Reproducir mp3 en Java

Rupam Yadav 12 octubre 2023
  1. Reproducir un archivo MP3 con JLayer
  2. Reproducir un MP3 con JACo MP3Player
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 Yadav avatar Rupam Yadav avatar

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