Executar Audio em Java Swing
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
- Netbeans 7.0
- Windows 7
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:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 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étodoplay(), 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:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 | 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.
Sabe como fazer o "STOP"?
ResponderExcluirCaro mateus. Primeiramente obrigado por participar deste blog!
ExcluirRespondendo sua pergunta, creio que queiras parar o tocador. Para isso você pode usar o método close();
Exemplo:
musica.close();
Ele para qualquer arquivo de audio que estiver sendo executado.
Espero que tenha sido útil.
Se possível participe siga este blog ou faça parte de nossa página no Facebook
https://www.facebook.com/Javanamente?bookmark_t=page
Abraços!
Aqui não pegou =/
ResponderExcluirNão tem erro, simplesmente não tocou o arquivo mp3. Oq pode ser ?
Paulo, não houve erro? você colocou o caminho certo do arquivo? verificou se sua placa de áudio esta realmente funcionando? implementou de forma correta a classe Mp3 com a chamada ao método play? Abraços!
ResponderExcluircomo pausar o mp3
ResponderExcluircrie estas varíáveis de exemplo:
Excluirplayer = null;
FIS = null;
valid = false;
BIS = null;
path = null;
total = 0;
stopped = 0;
canResume = false;
e depois crie um método pause:
public void pause(){
try{
stopped = FIS.available();
player.close();
FIS = null;
BIS = null;
player = null;
if(valid) canResume = true;
}catch(Exception e){
}
Como pegar os minutos da música que está tocando?
ResponderExcluirComo pausar o mp3?
ResponderExcluirComo o tempo da música?
ResponderExcluirComo pegar o tempo da música?
ResponderExcluirCongrats pelo post me ajudou muito...
ResponderExcluirFico feliz por ter ajudado Rosemar!
Excluir