Tocar mp3 em Java

  1. Tocar um arquivo MP3 usando JLayer
  2. Tocar um MP3 usando JACo MP3Player

Hoje daremos uma olhada nas maneiras de tocar MP3 em Java. As bibliotecas nativas do Java não nos permitem reproduzir áudio no formato MP3, portanto, aqui usamos duas bibliotecas externas que exigem configuração mínima.

Tocar um arquivo MP3 usando JLayer

Abaixo, criamos uma classe chamada MP3Player e duas variáveis ​​em que a primeira é a String que conterá o nome e o caminho do arquivo MP3 a ser reproduzido, e a segunda variável é o objeto jlPlayer da classe Player . Em seguida, geramos um construtor da classe MP3Player e tomamos a String mp3FileToPlay como parâmetro e inicializamos a variável de classe.

Nós fazemos um método play() que pega o mp3FileToPlay e o passa para o construtor de FileInputStream que converte o arquivo em um InputStream e então passamos este objeto InputStream para BufferedInputStream que o converte em um BufferedInputStream. Agora passamos o objeto bufferedInputStream para o construtor da classe Player que retorna um objeto.

Uma coisa a se notar é que o encadeamento no qual o áudio está sendo reproduzido fica bloqueado até que o processamento do áudio seja concluído. Não queremos bloquear o thread principal, então criamos um new Thread() e chamamos o método run() dentro dele. No método run(), chamamos a função play() que vem com a classe Player da biblioteca. Para iniciar a thread, chamamos a função start() da thread.

Agora, no método main(), inicializamos filename com o nome do arquivo MP3 e então criamos um objeto da classe MP3Player com o filename passado em seu construtor. Para iniciar o áudio, chamamos mp3Player.play(). Depois disso, obtemos o objeto Scanner e recebemos a entrada do usuário se a entrada for igual a parar, então chamamos o mp3Player.close() que chama o método close() do Player Classe, e para a música.

import javazoom.jl.player.Player;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.util.Scanner;


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

Tocar um MP3 usando JACo MP3Player

JACo MP3Player é uma biblioteca externa que temos que incluir em nosso projeto para usar. Esta é uma biblioteca muito pequena e fácil de integrar. No exemplo a seguir, criamos um objeto da classe MP3Player que é uma classe da biblioteca. Passamos um objeto File no construtor do MP3Player. Chamamos a função play() da classe MP3Player para iniciar o áudio.

Para parar o processamento de áudio, primeiro verificamos se o áudio parou usando o método isStopped(), e se parou, chamamos Thread.sleep() que pausa o thread por algum tempo.

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