java Clip循环不起作用

时间:2013-07-21 17:31:25

标签: java loops audio javasound clip

我有一个简单的Clip方法,可以播放小的wav声音。是的,我现在找到了方法clip.loop(),但无论如何我无法理解为什么我的方法不起作用。

下面是代码:

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();
}

它的String声音,因为我把它从hashmap中取出来了。当我用

打电话时
playSound(key, false, 10);

声音重复10次。但是当我再次调用它时(我用按钮做),它只播放4-8次,所以循环不能正常工作。我犯了什么错?

谢谢!

1 个答案:

答案 0 :(得分:1)

  • if(!loop || repeatCount > repeatTime)应该是OR而不是AND。
  • 使用for循环代替while
  • 问题可能是您一遍又一遍地尝试open相同的剪辑。为此,您必须先通过此AudioInputStream获取open Clip。{/ li>