2012-01-23 9 views
7

¿Alguien puede indicarme en la dirección correcta por qué este código no reproduce este clip de audio continuamente? Lo reproduce una vez y se detiene.El clip de audio no repetirá continuamente

final Clip clip = AudioSystem.getClip(); 
final AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("Alarm_Police.wav")); 
clip.open(inputStream); 
clip.loop(Clip.LOOP_CONTINUOUSLY); 
+0

¿Ha intentado hacer el ciclo() antes de abrir()? No lo he intentado, pero podría funcionar. –

+0

Acabo de probarlo aquí y parece funcionar ... ¿tiene alguna excepción en el bloque de prueba que debería estar cerca de este código? – Timst

+0

Hola, probé esto también y funciona. ¿Tiene alguna excepción después del primer ciclo? – hudi

Respuesta

12

Si está ejecutando una aplicación más grande, es posible que esta respuesta no se aplique. Pero para una prueba simple con solo ese fragmento de código, este puede ayuda:

Clip.loop() inicia su propio hilo, pero ese hilo no mantendrá viva la JVM. Para que funcione, asegúrese de que el clip no sea el único.

Si dejo fuera Thread.sleep (..) de este fragmento, me sale el mismo problema que tú;

import java.io.File; 

import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 
import javax.sound.sampled.Clip; 

public class Snippet { 
    public static void main(String[] args) throws Exception { 

     AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("notify.wav")); 
     Clip clip = AudioSystem.getClip(); 
     clip.open(inputStream); 
     clip.loop(Clip.LOOP_CONTINUOUSLY); 
     Thread.sleep(10000); // looping as long as this thread is alive 
    } 
} 
+0

Gracias Frank, en cuanto a Entiendo que si presiono la tecla de flecha hacia arriba se agrega a su "reputación" o algo así, pero no tengo suficientes publicaciones para permitirme hacerlo. Presiono la marca verde, lo que espero significa que elijo tu respuesta para responder la pregunta. – daveed007

+0

Tienes razón, me alegro de poder ayudarte. – Paaske

1

Para poder reproducir el archivo de audio completo, necesitará saber el tiempo que duerme. Una alternativa sería la de:

while(clip.isRunning()) 
{ 
    Thread.sleep(100); 
} 

Esto mantiene dormir (en incrementos de 100 ms) hasta que el estado isRunning() se ha convertido en falso. Es posible que necesite un sueño inicial antes de este ciclo para que el estado isRunning() tenga tiempo para establecerse.

1

Mi archivo de audio contiene 20 segundos de un pitido de alarma. Lo necesito continuamente para sonar. En lugar de usar hilo, continué con la pieza de código que se muestra a continuación.

 while(true){ 
      clip.start(); 
      clip.loop(clip.LOOP_CONTINUOUSLY);    
     } 

Creo que esto ayudaría. Gracias.

Cuestiones relacionadas