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…
Javazoom para rodar um arquivo interno
5 Respostas
Por que voce nao usa o construtor que recebe um InputStream?
Uai Mark....
Entao....a classe que estou vendo do javazoom é esta aqui:
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!
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();
}
}
}
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().
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.
++
Criado 27 de abril de 2011
Ultima resposta 1 de mai. de 2011
Respostas 5
Participantes 3