2012-01-23 27 views
7

Bu kod neden sürekli olarak bu ses klibini oynatmayacağına dair doğru yönde işaret edebilir mi? Bir kez çalar ve durur.Ses Klipsi sürekli olarak dönmez

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

open() 'den once loop() yapmayı denediniz mi? Denemedim ama işe yarayabilir. –

+0

Sadece burada denedim ve işe yarıyor gibi görünüyor ... try bloğundaki herhangi bir istisnayı yakalayan bu kodun akması gerekiyor mu? – Timst

+0

Merhaba, bunu denedim ve işe yarıyor. İlk döngüden sonra bir istisna var mı? – hudi

cevap

12

Daha büyük bir uygulama çalıştırıyorsanız, bu yanıt geçerli olmayabilir. Ama kod sadece o parça ile basit bir test için, bu may yardım:

Clip.loop() kendi iplik olduğunu başlar, ancak bu parçacığı JVM canlı tutmak olmaz. Bu yüzden çalışmasını sağlamak için klibin tek iş parçacığı olmadığından emin olun.

Bu snippet'ten Thread.sleep (..) 'i dışarı çıkarırsam, siz de aynı sorunu alırım;

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

Sonuna kadar teşekkürler. Anladığım kadarıyla 'itibar' ya da bir şey eklemek için yukarı ok tuşuna basarsam anlarım, ama yapmama izin verecek yeterli mesajım yok. Yeşil onay işaretini gördüm, umarım soruyu cevaplamak için cevabınızı seçerim. – daveed007

+0

Tam olarak haklısınız, yardımcı olabildiğime sevindim! – Paaske

1

Tam ses dosyasını çalmak için, uyumak için gereken süreyi bilmeniz gerekir. IsRunning() devlet yanlış döndü kadar bu (100 ms artışlarla) uyku tutar

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

: bir alternatif olacaktır. Bu döngüden önce ilk uykuya ihtiyacın olabilir, böylece isRunning() durumunun ayarlanması için zamana sahip olur.

1

Ses dosyamda 20 saniyelik bir bip sesi var. Halka çalmak için sürekli ihtiyacım var. İplik kullanmak yerine, aşağıda gösterilen kod parçası ile devam ettim.

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

Bu yardımcı olur. Teşekkürler.

İlgili konular