Tocar mp3 em Java
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 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();
}
}
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());
}
}
}
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