Preciso de um simples player em java, onde toque uma musica após a outra.
Obrigado.
legal, de nada!
- Abra o seu editor de texto ou IDE preferido.
- Codifique o seu player em java.
- Salve.
- Compile.
- Pronto.
Olá, uma busca no forum costuma responder bastante coisa.
Tópico do dcbasso:
http://www.guj.com.br/posts/list/71782.java
Blog dele com os detalhes:
http://dcbasso.blogspot.com/2007/10/trabalhando-com-mp3-e-ogg-no-java.html
Tem mais aqui …
http://www.guj.com.br/posts/list/76160.java
flw e sucesso!
Roger Leite
Entao… eu entendi sobre esses.
So que eu mando por parametro um vetor com os caminhos
File[] r;
r = new File[aud.length];
for (int i = 0; i < Vcaminho.length; i++) {
r[i] = new File(Vcaminho[i]);
player = Manager.createRealizedPlayer(r[i].toURL());
player.start();
}
passei a string pra file para poder mandar para o player, so que o player só aceitar URL, entao eu converti o File r para URL.
O problema que ocorre que ele toca as duas musicas juntas. O certo seria ele tocar uma apos a outra.
por favor me ajudem.
lembrando que estou usando o Jmf
Cidao,
Nunca trabalhei/mexi com JMF, mas o que está ocorrendo (o que tudo indica) é o seguinte.
Quando você executa o player.start() ele cria um processo (Thread) para tocar o som.
Se você debugar vai ver que quando executa o start(), a execução continua imediatamente
para a próxima linha e manda executar também a outra musica.
Solução: Ao chamar o start() você vai ter que “monitarar” a execução da música através
de listeners para descobrir quando ela acabou para partir pra próxima.
Este post tem códigos de exemplo para isso, de qualquer maneira, o apoio no Javadoc do JMF é essencial para sanar dúvidas.
Espero que funcione, e se funcionar e puder, atualize este post para Resolvido
postando o código que usou, assim você ajudará outras pessoas com a mesma dúvida.
flw e sucesso!
Roger Leite
Está certo.
vou dar uma olhada , e quando eu terminar o codigo eu ponho ele aqui.
Bem eu fiz um metodo utilizando o Timer.
Onde eu pego o tempo da musica e quando eu dou start no player eu tambem dou start no time.
e ele cada vez chama o metodo tocar.
lembrando que quando for chamar o metodo tocar, entrar com valor 0 no i.
espero que gostem.
public void tocar() {
try {
if (player != null) {
player.stop();
}
if (timer != null) {
timer.stop();
}
File[] fileMusica;
fileMusica = new File[audiosNome.length];
fileMusica[i] = new File(audiosNome[i]);
player = Manager.createRealizedPlayer(fileMusica[i].toURL());
player.start();
timer = new Timer((int) (player.getDuration().getSeconds() * 1000), new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (i < audiosNome.length) {
tocar();
} else {
timer.stop();
}
}
});
if (i < audiosNome.length) {
timer.start();
} else {
timer.stop();
}
i++;
} catch (NoPlayerException e1) {
e1.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
} catch (CannotRealizeException e3) {
e3.printStackTrace();
}
}
Sei que o assunto está encerrado, mas acredito que uma melhor opção do que pegar a duração da faixa e sincroniza-la a um timer, pode ser utilizar-se do evento disparado ao se chegar ao final da faixa
para tanto, bloqueie o método:
public synchronized void blockingPlay() {
player.start();
while (!eomReached) {
try {
wait();
player.deallocate();
JOptionPane.showMessageDialog(null, "played");
} catch (java.lang.InterruptedException e) {
e.printStackTrace();
System.exit(1);
}
}
}
public synchronized void controllerUpdate (ControllerEvent event) {
if (event instanceof EndOfMediaEvent) {
JOptionPane.showMessageDialog(null, "eom contr");
eomReached = true;
notify();
}
}
Espero ter ajudado (=
Sera que poderia disponibilizar o codigo todo para mim…estou precisando fazer algo parecido com videos…criei aqui mais nao estou conseguindo executar uma playlist…vc poderia disponibilizar seu codigo?? Agradeco…
sorry, no code yet )=