2013-07-21 94 views
0

我有一個簡單的剪輯方法,播放小wav聲音。是的,我現在找到了方法clip.loop(),但無論如何,我不明白爲什麼我的方法不工作。java剪輯循環不起作用

繼承人的代碼:

public void playSound(final String sound, final boolean loop, final int repeatTime){ 
    try { 
     sounds.get(sound).open(); 
    } 
    catch(Exception e) { 
     System.out.println(e); 
    } 
    new Thread(new Runnable() { 
     public void run() { 
      int repeatCount = 1; 
      Clip actualClip = sounds.get(sound); 
      actualClip.setFramePosition(0); 
      actualClip.start(); 
      while(true){ 
       System.out.println("repeat c: " + repeatCount + ", frames left: " + (actualClip.getFrameLength() - actualClip.getFramePosition())); 
       if(actualClip.getFramePosition() >= actualClip.getFrameLength()){ 
        actualClip.stop(); 
        actualClip.setFramePosition(0); 
        actualClip.start(); 
        repeatCount++; 
       } 
       if(!loop && repeatCount > repeatTime){ 
        break; 
       } 
      } 
      actualClip.stop(); 
     } 
    }).start(); 
} 

的絃音,IM因爲...得到它出的HashMap的。當我打電話給它時

playSound(key, false, 10); 

聲音重複10次。但是當我再次調用它時(我用一個按鈕來做),它的播放時間只有4-8次,所以循環無法正常工作。我做錯了什麼?

謝謝!

+0

1)爲了更好地提供幫助,請發佈[SSCCE](http://sscce.org/)。 2)'Clip'不需要單獨的'Thread'。 –

+0

我想它應該是'if(!loop || repeatCount> repeatTime)'。順便說一下,爲什麼不使用'for'而不是'while'?它會讓你的代碼更具可讀性。 – Elist

+0

謝謝你......這實際上是一個sscce o.O確定失敗......真的應該和。 – GFP

回答

1
  • if(!loop || repeatCount > repeatTime)應該是OR而不是AND。
  • 使用for循環代替while
  • 問題可能是您嘗試反覆使用同一個剪輯。要做到這一點,您必須首先獲得此Clip編輯的新AudioInputStreamopen
+0

謝謝你真的應該或。它是一個真正的循環 - 我在這裏用了多少?而即時通訊只是打開它時完成。 – GFP