Sonido en java

Estoy haciendo una práctica en java (un juego de aventura) y quería poner un midi de sonido de fondo. En parte conseguí el objetivo con este código:
File f2=new File(archivo);
MidiFileFormat mff2=
MidiSystem.getMidiFileFormat(f2);
Sequence S=
MidiSystem.getSequence(f2);
Sequencer seq=
MidiSystem.getSequencer();
seq.open();
seq.setSequence(S);
Eso va metido dentro de un try-catch. El problema que me encuentro es que la reproducción no es infinita, es decir cuando la pista acaba no vuelve a empezar. ¿Sabes cómo tengo que hacer para que haga reproducción infinita?

2 respuestas

Respuesta
1
Sinceramente, nunca he trabajado con Midi en Java. Sin embrago he estado revisando la Api y parece ser que no es configurable directamente el número de reproducciones. Lo que si parece es que a el secuenciador se le puede asignar un gestor de eventos, con lo que cuando se produzca el el evento "fin de archivo" se podría lanzar otra vez.
No estoy muy seguro de como se hace, pero tiene pinta de ser así.
Suerte.
Respuesta
1
Puede haber dos formas
La más sencilla:
Un ciclo infinito (o semiInfinito si es que sustituyes el true por alguna variable Boolean para tener un control para finalizar la canción), aunque te recomiendo utilizar el método start() de tu objeto Sequencer
while(true) {
seq.start(); //empieza la reproducción de la canción
while(seq.isRunning()) { // espera a que termine
try {Thread.sleep(100);}
catch(Exception e) {;}
}
}
Haciendo las cosas por el camino difícil:
Implementa la interface MetaEventListener, después "escucha" los eventos MetaEvent con código 47 (fin de reproducción de un archivo midi). Finalmente cuando captures ese evento vuelve a decirle a tu objeto: seq. Start(); para que vuelva a empezar la reproducción del archivo.
Saludos y Feliz Año 2005.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas