0

我有一个简单的 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();
}

它的字符串声音,因为我从哈希图中得到它。当我打电话给它时

playSound(key, false, 10);

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

谢谢!

4

1 回答 1

1
  • if(!loop || repeatCount > repeatTime)应该是 OR 而不是 AND。
  • 使用for循环而不是while.
  • 问题可能是您open一遍又一遍地尝试使用相同的剪辑。要做到这一点,你必须首先得到一个 newAudioInputStreamopenthis 编辑Clip
于 2013-07-21T20:50:15.150 回答