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.