Riproduzione di .mp3 e .wav in Java?

Come posso riprodurre un file .mp3 e .wav nella mia applicazione Java? Sto usando Swing. Ho provato a cercare su internet, per qualcosa di simile a questo esempio:

 public void playSound() { try { AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File("D:/MusicPlayer/fml.mp3").getAbsoluteFile()); Clip clip = AudioSystem.getClip(); clip.open(audioInputStream); clip.start(); } catch(Exception ex) { System.out.println("Error with playing sound."); ex.printStackTrace(); } } 

Ma questo riprodurrà solo i file .wav .

Lo stesso con:

http://www.javaworld.com/javaworld/javatips/jw-javatip24.html

Voglio essere in grado di riprodurre entrambi i file .mp3 e .wav con lo stesso metodo.

Java FX ha classi Media e MediaPlayer che riprodurranno file mp3.

Codice di esempio:

 String bip = "bip.mp3"; Media hit = new Media(new File(bip).toURI().toString()); MediaPlayer mediaPlayer = new MediaPlayer(hit); mediaPlayer.play(); 

Avrai bisogno delle seguenti dichiarazioni di importazione:

 import javafx.scene.media.Media; import javafx.scene.media.MediaPlayer; 

Ho scritto un lettore mp3 java puro: mp3transform .

puoi giocare .wav solo con l’API java:

 import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.Clip; 

codice:

 AudioInputStream audioIn = AudioSystem.getAudioInputStream(MyClazz.class.getResource("music.wav")); Clip clip = AudioSystem.getClip(); clip.open(audioIn); clip.start(); 

E gioca .mp3 con jLayer

È passato un po ‘di tempo da quando l’ho usato, ma JavaLayer è ottimo per la riproduzione di MP3

Consiglierei l’uso di BasicPlayerAPI. È open source, molto semplice e non richiede JavaFX. http://www.javazoom.net/jlgui/api.html

Dopo aver scaricato ed estratto il file zip, è necessario aggiungere i seguenti file jar al percorso di build del progetto:

  • basicplayer3.0.jar
  • tutti i vasi della directory lib (all’interno di BasicPlayer3.0)

Ecco un esempio di utilizzo minimalista:

 String songName = "HungryKidsofHungary-ScatteredDiamonds.mp3"; String pathToMp3 = System.getProperty("user.dir") +"/"+ songName; BasicPlayer player = new BasicPlayer(); try { player.open(new URL("file:///" + pathToMp3)); player.play(); } catch (BasicPlayerException | MalformsdURLException e) { e.printStackTrace(); } 

Importazioni richieste:

 import java.net.MalformsdURLException; import java.net.URL; import javazoom.jlgui.basicplayer.BasicPlayer; import javazoom.jlgui.basicplayer.BasicPlayerException; 

È tutto ciò di cui hai bisogno per iniziare a suonare. Il lettore sta avviando e gestendo il proprio thread di riproduzione e fornisce funzionalità di riproduzione, pausa, ripresa, interruzione e ricerca .

Per un utilizzo più avanzato, è ansible dare un’occhiata a jlGui Music Player. È un clone WinAmp open source: http://www.javazoom.net/jlgui/jlgui.html

La prima class da guardare sarebbe PlayerUI (all’interno del pacchetto javazoom.jlgui.player.amp). Dimostra abbastanza bene le funzionalità avanzate di BasicPlayer.

Utilizzando l’API standard javax.sound, una singola dipendenza Maven, completamente Open Source (richiesto Java 7 ):

pom.xml

    com.googlecode.soundlibs tritonus-share 0.3.7-2   com.googlecode.soundlibs mp3spi 1.9.5-1   com.googlecode.soundlibs vorbisspi 1.0.3-1  

Codice

 import java.io.File; import java.io.IOException; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.DataLine.Info; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.SourceDataLine; import javax.sound.sampled.UnsupportedAudioFileException; import static javax.sound.sampled.AudioSystem.getAudioInputStream; import static javax.sound.sampled.AudioFormat.Encoding.PCM_SIGNED; public class AudioFilePlayer { public static void main(String[] args) { final AudioFilePlayer player = new AudioFilePlayer (); player.play("something.mp3"); player.play("something.ogg"); } public void play(String filePath) { final File file = new File(filePath); try (final AudioInputStream in = getAudioInputStream(file)) { final AudioFormat outFormat = getOutFormat(in.getFormat()); final Info info = new Info(SourceDataLine.class, outFormat); try (final SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info)) { if (line != null) { line.open(outFormat); line.start(); stream(getAudioInputStream(outFormat, in), line); line.drain(); line.stop(); } } } catch (UnsupportedAudioFileException | LineUnavailableException | IOException e) { throw new IllegalStateException(e); } } private AudioFormat getOutFormat(AudioFormat inFormat) { final int ch = inFormat.getChannels(); final float rate = inFormat.getSampleRate(); return new AudioFormat(PCM_SIGNED, rate, 16, ch, ch * 2, rate, false); } private void stream(AudioInputStream in, SourceDataLine line) throws IOException { final byte[] buffer = new byte[4096]; for (int n = 0; n != -1; n = in.read(buffer, 0, buffer.length)) { line.write(buffer, 0, n); } } } 

Riferimenti:

Il modo più semplice che ho trovato è stato scaricare il file jar JLayer da http://www.javazoom.net/javalayer/sources.html e aggiungerlo alla libreria Jar http://www.wikihow.com/Add-JARs- to-Project-build-percorsi-in-Eclipse-% 28Java% 29

Ecco il codice per la class

 public class SimplePlayer { public SimplePlayer(){ try{ FileInputStream fis = new FileInputStream("File location."); Player playMP3 = new Player(fis); playMP3.play(); } catch(Exception e){ System.out.println(e); } } } 

e qui ci sono le importazioni

 import javazoom.jl.player.*; import java.io.FileInputStream; 

Per dare ai lettori un’altra alternativa, suggerisco la libreria di JACo MP3 Player, un java mp3 multipiattaforma.

Caratteristiche:

  • utilizzo della CPU molto basso (~ 2%)
  • incredibile piccola biblioteca (~ 90KB)
  • non ha bisogno di JMF (Java Media Framework)
  • facile da integrare in qualsiasi applicazione
  • facile da integrare in qualsiasi pagina web (come applet).

Per un elenco completo dei suoi metodi e attributi è ansible controllare la sua documentazione qui .

Codice d’esempio:

 import jaco.mp3.player.MP3Player; import java.io.File; public class Example1 { public static void main(String[] args) { new MP3Player(new File("test.mp3")).play(); } } 

Per maggiori dettagli, ho creato qui un semplice tutorial che include un codice sorgente scaricabile.

Devi prima installare JMF ( scarica usando questo link )

 File f = new File("D:/Songs/preview.mp3"); MediaLocator ml = new MediaLocator(f.toURL()); Player p = Manager.createPlayer(ml); p.start(); 

non dimenticare di aggiungere i file jar JMF

Fai una ricerca di freshmeat.net per la libreria JAVE (acronimo di Java Audio Video Encoder) (link qui ). È una libreria per questo genere di cose. Non so se Java ha una funzione nativa mp3.

Probabilmente avrai bisogno di racchiudere la funzione mp3 e la funzione wav insieme, usando l’ereditarietà e una semplice funzione wrapper, se vuoi che un metodo esegua entrambi i tipi di file.

Per aggiungere il supporto per la lettura di MP3 a Java Sound, aggiungi il file mp3plugin.jar di JMF al percorso class run-time dell’applicazione.

Si noti che la class Clip ha limitazioni di memoria che la rendono inadatta per più di qualche secondo di suono di alta qualità.

Usa questa libreria: import sun.audio. *;

 public void Sound(String Path){ try{ InputStream in = new FileInputStream(new File(Path)); AudioStream audios = new AudioStream(in); AudioPlayer.player.start(audios); } catch(Exception e){} }