Reproducir mp3 en Java
Hoy veremos las formas de reproducir MP3 en Java. Las bibliotecas nativas de Java no nos permiten reproducir audio en formato MP3, por lo que aquí usamos dos bibliotecas externas que exigen una configuración mínima.
Reproducir un archivo MP3 con JLayer
A continuación, creamos una clase llamada MP3Player
y dos variables en las que la primera es el String que contendrá el nombre y la ruta del archivo MP3 a reproducir, y la segunda variable es el objeto jlPlayer
de la clase Player
. Luego generamos un constructor de la clase MP3Player
y tomamos la cadena mp3FileToPlay
como parámetro e inicializamos la variable de clase.
Hacemos un método play()
que toma el mp3FileToPlay
y lo pasamos al constructor de FileInputStream
que convierte el archivo en un InputStream
y luego pasamos este objeto InputStream
a BufferedInputStream
que lo convierte en un BufferedInputStream
. Ahora pasamos el objeto bufferedInputStream
al constructor de la clase Player
que devuelve un objeto.
Una cosa a tener en cuenta es que el hilo en el que se reproduce el audio se bloquea hasta que se completa el procesamiento del audio. No queremos bloquear el hilo principal, así que creamos un new Thread()
y llamamos al método run()
dentro de él. En el método run()
, llamamos a la función play()
que viene con la clase Player
de la biblioteca. Para iniciar el hilo, llamamos a la función start()
del hilo.
Ahora en el método main()
, inicializamos filename
con el nombre de archivo MP3 y luego creamos un objeto de la clase MP3Player
con el filename
pasado en su constructor. Para iniciar el audio, llamamos mp3Player.play()
. Después de eso, obtenemos el objeto Scanner
y tomamos la entrada del usuario si la entrada es igual a stop
, luego llamamos al mp3Player.close()
que llama al método close()
del Player
Clase, y detiene la música.
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.util.Scanner;
import javazoom.jl.player.Player;
public class PlayMP3 {
public static void main(String[] args) {
String filename = "example.mp3";
MP3Player mp3Player = new MP3Player(filename);
mp3Player.play();
Scanner sc = new Scanner(System.in);
System.out.println("Write stop to stop the music: ");
if (sc.nextLine().equalsIgnoreCase("stop")) {
mp3Player.close();
}
}
}
class MP3Player {
private final String mp3FileToPlay;
private Player jlPlayer;
public MP3Player(String mp3FileToPlay) {
this.mp3FileToPlay = mp3FileToPlay;
}
public void play() {
try {
FileInputStream fileInputStream = new FileInputStream(mp3FileToPlay);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
jlPlayer = new Player(bufferedInputStream);
} catch (Exception e) {
System.out.println("Problem playing mp3 file " + mp3FileToPlay);
System.out.println(e.getMessage());
}
new Thread() {
public void run() {
try {
jlPlayer.play();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}.start();
}
public void close() {
if (jlPlayer != null)
jlPlayer.close();
}
}
Reproducir un MP3 con JACo MP3Player
JACo MP3Player
es una biblioteca externa que tenemos que incluir en nuestro proyecto para poder usarla. Esta es una biblioteca muy pequeña y fácil de integrar. En el siguiente ejemplo, creamos un objeto de la clase MP3Player
que es una clase de la biblioteca. Pasamos un objeto File
en el constructor de MP3Player
. Llamamos a la función play()
de la clase MP3Player
para iniciar el audio.
Para detener el procesamiento de audio, primero verificamos si el audio ha dejado de usar el método isStopped()
, y si está detenido, llamamos a Thread.sleep()
que pausa el hilo por algún tiempo.
import jaco.mp3.player.MP3Player;
import java.io.File;
public class PlayMP3 {
public static void main(String[] args) {
try {
File f = new File("example.mp3");
MP3Player mp3Player = new MP3Player(f);
mp3Player.play();
while (!mp3Player.isStopped()) {
Thread.sleep(5000);
}
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
}
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn