Jugando .mp3 y .wav en Java?

¿Cómo puedo reproducir un archivo .mp3 y un archivo .wav en mi aplicación Java? Estoy usando Swing. Intenté buscar en Internet, para algo como este ejemplo:

 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(); } } 

Pero esto solo reproducirá archivos .wav .

Lo mismo con:

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

Quiero poder reproducir ambos archivos .mp3 y .wav con el mismo método.

Java FX tiene clases de Media y MediaPlayer que reproducirán archivos mp3.

Código de ejemplo:

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

Necesitará las siguientes declaraciones de importación:

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

Escribí un reproductor mp3 java puro: mp3transform .

Puedes jugar .wav solo con Java API:

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

código:

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

Y juega .mp3 con jLayer

Ha pasado un tiempo desde que lo usé, pero JavaLayer es excelente para la reproducción de MP3

Yo recomendaría usar BasicPlayerAPI. Es de código abierto, muy simple y no requiere JavaFX. http://www.javazoom.net/jlgui/api.html

Después de descargar y extraer el archivo comprimido, debe agregar los siguientes archivos jar a la ruta de comstackción del proyecto:

  • basicplayer3.0.jar
  • todos los archivos jar del directorio lib (dentro de BasicPlayer3.0)

Aquí hay un ejemplo de uso 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 | MalformedURLException e) { e.printStackTrace(); } 

Importaciones requeridas:

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

Eso es todo lo que necesitas para comenzar a reproducir música. El reproductor está iniciando y administrando su propio hilo de reproducción y brinda reproducción, pausa, reanudación, detención y búsqueda de funcionalidad.

Para un uso más avanzado, puede echar un vistazo al reproductor de música jlGui. Es un clon de WinAmp de fuente abierta: http://www.javazoom.net/jlgui/jlgui.html

La primera clase para mirar sería PlayerUI (dentro del paquete javazoom.jlgui.player.amp). Demuestra las funciones avanzadas de BasicPlayer bastante bien.

Usando la API javax.sound estándar, una sola dependencia Maven, completamente de código abierto (se requiere 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  

Código

 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); } } } 

Referencias

La forma más fácil que encontré fue descargar el archivo jar JLayer de http://www.javazoom.net/javalayer/sources.html y agregarlo a la biblioteca Jar http://www.wikihow.com/Add-JARs- to-Project-Build-Paths-in-Eclipse-% 28Java% 29

Aquí está el código para la clase

 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); } } } 

y aquí están las importaciones

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

Para darles a los lectores otra alternativa, sugiero la biblioteca JACo MP3 Player, un reproductor de mp3 java multiplataforma.

caracteristicas:

  • muy bajo uso de CPU (~ 2%)
  • pequeña biblioteca increíble (~ 90KB)
  • no necesita JMF (Java Media Framework)
  • fácil de integrar en cualquier aplicación
  • fácil de integrar en cualquier página web (como applet).

Para obtener una lista completa de sus métodos y atributos, puede consultar su documentación aquí .

Código de muestra:

 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(); } } 

Para más detalles, creé un tutorial simple aquí que incluye un código fuente descargable.

Primero debe instalar JMF ( descargue usando este enlace )

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

no olvides agregar archivos jar JMF

Haga una búsqueda de freshmeat.net para la biblioteca JAVE (siglas de Java Audio Video Encoder) (enlace aquí ). Es una biblioteca para este tipo de cosas. No sé si Java tiene una función mp3 nativa.

Probablemente necesite envolver la función mp3 y la función wav juntas, utilizando la herencia y una función de envoltura simple, si desea que un método ejecute ambos tipos de archivos.

Para agregar soporte de lectura de MP3 a Java Sound, agregue el mp3plugin.jar de JMF a la ruta de la clase en tiempo de ejecución de la aplicación.

Tenga en cuenta que la clase Clip tiene limitaciones de memoria que la hacen inadecuada por más de unos pocos segundos de sonido de alta calidad.

Utilice esta biblioteca: 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){} }