Tocando arquivos MP3 com Java e JLayer
Uma das coisas que mais motivam nós programadores quando estamos aprendendo a programar ou que continuemos a estudar a linguagem a qual programamos é aprender sempre algo novo que a linguagem nos oferece. Claro que Java nos permite hoje fazer qualquer tipo de aplicação, porém o grande problema é que não sabemos como fazer o que queremos e a partir da aí buscamos cada vez mais o conhecimento que precisamos para fazer o que desejamos.
Recentemente descobri essa biblioteca chamada JLayer a qual nos permite tocar de forma muito fácil arquivos MP3 em nossos programas Java. Eu ainda não estudei essa biblioteca profundamente para ver tudo o que ela tem, porém hoje eu mostro como fazer o básico para tocar arquivos MP3 usando a Jlayer.
O tutorial é dividido em duas partes. A primeira parte (logo a seguir) ensina a tocar um arquivo mp3 em código Java de forma bem simples. Na segunda parte (que publicarei algum dia), ensinarei a tocar o arquivo mp3 usando threads e mostrando alguns outros recursos do JLayer.
Para fazer este tutorial, eu estou usando o seguinte ambiente de desenvolvimento:
- JDK 1.6
- JLayer 1.0.1
- Eclipse 3.4 (Ganymede)
- Ubuntu 8.10 (Intrepid Ibex)
A primeira coisa que devemos fazer é baixa a biblioteca JLayer. A biblioteca é grátis (LGPL) e você pode fazer o download dos binários e fontes aqui: http://www.javazoom.net/javalayer/javalayer.html
Depois de feito o download, descompacte o arquivo e copie o arquivo jl1.0.1.jar para a pasta lib de seu projeto. Copiado o jar, adicione a biblioteca ao classpath do projeto. Feito isso, vamos criar uma classe que será responsável por tocar nosso arquivo MP3. Eu chamei a classe de MP3 e ela ficou dessa forma:
package com.meupost.player; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import javazoom.jl.player.Player; public class MP3 { /** * Objeto para nosso arquivo MP3 a ser tocado */ private File mp3; /** * Objeto Player da biblioteca jLayer. Ele tocará o arquivo * MP3 */ private Player player; /** * Construtor que recebe o objeto File referenciando o arquivo * MP3 a ser tocado e atribui ao atributo MP3 da classe. * * @param mp3 */ public MP3(File mp3) { this.mp3 = mp3; } /** * Método que toca o MP3 */ public void play() { try { FileInputStream fis = new FileInputStream(mp3); BufferedInputStream bis = new BufferedInputStream(fis); this.player = new Player(bis); System.out.println("Tocando!"); this.player.play(); System.out.println("Terminado!"); } catch (Exception e) { System.out.println("Problema ao tocar " + mp3); e.printStackTrace(); } } }
A classe está comentada e explica o que significa os atributos e os métodos. No método play(), vemos que um objeto FileInputStream e BufferedInputStream são instanciados. O Player da biblioteca JLayer usa o BufferedInputStream para poder instanciar e deixar pronto o objeto Player, o qual nos permite enfim, tocar a música. O método play() do objeto Player é o responsável pela execução da música.
Note que como esse exemplo não é multithread, a música começará a tocar no momento da chamada do método play() e o fluxo de execução irá parar nesse método. O fluxo somente retornará quando a música terminar. Por fim, se ocorrer qualquer erro na execução da música, esteremos capturando a exceção e exibindo o stackTrace da mesma.
Terminada essa nossa classe MP3, vamos criar uma classe Main que instancia nossa classe MP3 e que permita nós testarmos a classe MP3 para ver se realmente funciona.
Eu criei uma classe Main assim:
package com.meupost.main; import java.io.File; import com.meupost.player.MP3; public class Main { public static void main(String[] args) { //String com o caminho do arquivo MP3 a ser tocado String path = "/home/ricardo/Músicas/Rock Clássico/Eagles - Hotel California.mp3"; //Instanciação de um objeto File com o arquivo MP3 File mp3File = new File(path); //Instanciação do Objeto MP3, a qual criamos a classe. MP3 musica = new MP3(mp3File); //Finalmente a chamada do método que toca a música musica.play(); } }
As quatro linhas de código nela estão comentadas e falam o que é cada comando. Acredito que você já possa testar e ver se funciona. Mande um Play aí.
Espero que tenham gostado. É bem simples, mas muito legal. No próximo tutorial mostrarei como fazer um tocador mais complexo utilizando threads.




há 10 meses atrás
Opa gostei do artigo,
ele me foi bastante útil.
obrigrado!
há 7 meses atrás
@Filipe
opa, consegui fazer tocar o som aki tb, mto bacana..
eu gostaria de uma dica se possivel, eu nao preciso q toke um mp3 propriamente, mas sim akeles sons de inicialização do windows.. por exemplo: liga o sistema, logoff e desligar o sistema tb…
se vc puder me ajudar , agradeço!!
vlw pelo tuto ae, ta fmz!!!
há 6 meses atrás
Muito bom esse exemplo, funcionou perfeitamente, parabéns!!! sucesso!!
há 5 meses atrás
Meu caro estou tentando baixar a biblioteca, mas o site que vc mencionou não está funcionando…http://www.javazoom.net/javalayer/javalayer.html. vc poderia informar outro site para baixar a biblioteca?
Obrigado!
há 1 mês atrás
muito bom este post…..
necessito colocar varios arquivos para tocar ao mesmo tempo… tem alguma dica de como fazer?
há 1 mês atrás
cabelo, é só usar threads….