2012-01-23 18 views
7

このコードがこのオーディオクリップを連続して再生しない理由について、誰かが正しい方向に向けることができますか?それは一度それを演奏し、停止する。オーディオクリップが連続してループしない

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()の前にloop()を実行しようとしましたか?私はそれを試していないが、それは動作する可能性があります。 –

+0

私はちょうどここでそれを試して、それは動作するようだ...あなたはこのコードを覆しているはずですtryブロック内の任意の例外をキャッチですか? – Timst

+0

こんにちは、私もこれを試して、それは動作します。最初のループの後にsomの例外がありますか? – hudi

答えて

12

大きなアプリケーションを実行している場合、この回答は適用されない場合があります。しかし、このコードだけの簡単なテストでは、が助けます:

Clip.loop()は自身のスレッドを開始しますが、そのスレッドはJVMを存続させません。だから、それを機能させるには、クリップが唯一のスレッドでないことを確認してください。

このスニペットからThread.sleep(..)を除外すると、私と同じ問題が発生します。

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

フランクさん、ありがとうございました私はそれがあなたの「評判」に何かを加える上向きの矢印キーを押したかどうか分かりますが、そうするために十分な投稿がありません。私は緑色のチェックマークを押しました。私はあなたの答えを選んで質問に答えることを願っています。 – daveed007

+0

あなたはまさに正しいです、私は助けることができてうれしいです! – Paaske

1

完全なオーディオファイルを再生するには、睡眠時間を知る必要があります。 isRunning()状態がfalseになったまでは(100ミリ秒単位で)寝続け

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

:代替をするだろう。 isRunning()状態に時間が設定されるように、このループの前に最初にスリープする必要があります。

1

私のオーディオファイルには20秒間のアラーム音が含まれています。私はそれが絶えず鳴ることが必要です。スレッドを使用する代わりに、私は下に示すコードを使いました。

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

これが役立つと思います。ありがとう。

関連する問題