Reproducir un archivo MP3 en Java usando JLayer
Puede que queramos añadir música o algún tipo de efecto sonoro a alguna aplicación que estemos programando. Hoy explicaré como reproducir un archivo MP3 desde Java.
Para ello vamos a utilizar la librería JLayer, que es capaz de decodificar, convertir y reproducir archivos MP3 en tiempo real. Esta librería se puede encontrar en http://www.javazoom.net/javalayer/sources.html . Debemos descargar y descomprimir el archivo comprimido (zip o tar.gz) para obtener el archivo jl1.0.jar (podemos descargarnos alguna versión más moderna si existiese), que es el que nos interesa.
Hay que incluir ese archivo jar en nuestro proyecto: si utilizamos el IDE Eclipse lo haremos pinchando con el botón derecho sobre la carpeta del proyecto; pinchamos en Propiedades; opción "Java Build Path"; pestaña Librerías; finalmente pulsamos en "Add External JAR" y seleccionamos el archivo jl1.0.jar .
A nosotros nos interesa el paquete "player", que es el que se encarga de la reproducción (podemos encontrar la documentación de su API aquí). Concretamente utilizaremos la clase "Player" (documentación aquí).
El código
A continuación muestro una aplicación muy simple en el que se reproduce un archivo MP3 que se encuentra en mi disco duro (también se pueden reproducir archivos MP3 alojados en la web). Lo importante es la línea de código en la que se llama al constructor de la clase Player (con un objeto FileInputStream como argumento) y la línea en la que se llama al método "play" del objeto Player.
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
public class Principal {
public static void main(String[] args) {
try {
FileInputStream fis;
Player player;
fis = new FileInputStream(
"D:\\Users\\Public\\Music\\Sample Music\\Sleep Away.mp3");
BufferedInputStream bis = new BufferedInputStream(fis);
player = new Player(bis); // Llamada a constructor de la clase Player
player.play(); // Llamada al método play
} catch (JavaLayerException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
Cualquier duda o consulta que surja podeis ponerla en los comentarios.
Tweet