Java Player - Simples - RESOLVIDO

Preciso de um simples player em java, onde toque uma musica após a outra.
Obrigado.

legal, de nada!

  1. Abra o seu editor de texto ou IDE preferido.
  2. Codifique o seu player em java.
  3. Salve.
  4. Compile.
  5. 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 )=