Javazoom para rodar um arquivo interno

5 respostas
kaial

Olá galera!
A minha duvida é a seguinte…eu uso o javazoom para executar sons, só que o javazoom esta preparado para receber um “File”,assim para passar um arquivo interno eu uso um URL, por exempo: getClass().getResource(“mp3.mp3”);, se eu tentar passar isso para um File, nao dá por que logicamente ele nao recebe um URL.Estou rodeando o assunto para tentar exclarecer a duvida.
Entao eu tenho duas escolhas: Tentar passar o caminho que é fixo (getClass().getResource(…)) para um File, ou modificar o javazoom para receber uma URL.
Mas eu só sei passar para um file strings do tipo:“c//desktop//mp3.mp3”…e eu nao quero um caminho fixo, eu quero que o programa carrege o mp3 de dentro do pacote do meu projeto!
Se alguem souber como fazer isso posta ai por favor!!
Desde já grato…

5 Respostas

Marky.Vasconcelos

Por que voce nao usa o construtor que recebe um InputStream?

kaial
Uai Mark.... Entao....a classe que estou vendo do javazoom é esta aqui:
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();
            }
     }
}
Entao pelo que voce falou um ImputStream seria capaz de pegar este arquivo interno meu nao é? Entao como eu faço para passar isso para a classe MP3 sendo que ela pega um File? Desculpa a ignorancia mas nao tenho muito conhecimento nessa area de files!
ViniGodoy

Essa classe MP3 não é do Javazoom, é sua. Você deve ter copiado de algum tutorial.

Simplesmente altere-a para usar o InputStream:
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 InputStream 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 = new BufferedInputStream(new FileInputStream(mp3));
  	}
 
	/**
	 * Construtor que recebe um inputstream com o arquivo.
	 * MP3 a ser tocado e atribui ao atributo MP3 da classe.
	 * 
	 * @param mp3
	 */
	public MP3(InputStream mp3) {
              this.mp3 = mp3;
  	}
 
	/**
	 * Método que toca o MP3
	 */
	public void play() {
	    try {
                this.player = new Player(mp3);
                System.out.println("Tocando!");
                this.player.play();
                System.out.println("Terminado!");
            }
            catch (Exception e) {
                System.out.println("Problema ao tocar " + mp3);
                e.printStackTrace();
            }
     }
}

Agora é só usar o getClass().getResourceAsStream().

ViniGodoy

Aliás, o uso da classe Player é tão simples que eu sequer teria a classe mp3 no meu código. Ela aparentemente não está facilitando em nada. E uma classe que não faz nada, não é necessária.

Marky.Vasconcelos

++

Criado 27 de abril de 2011
Ultima resposta 1 de mai. de 2011
Respostas 5
Participantes 3