java剪辑循环不起作用

Posted

技术标签:

【中文标题】java剪辑循环不起作用【英文标题】:java Clip loop not working 【发布时间】:2013-07-21 17:31:24 【问题描述】:

我有一个简单的 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 次,所以循环不能正常工作。我做错了什么?

谢谢!

【问题讨论】:

1) 为了尽快获得更好的帮助,请发帖 SSCCE。 2) Clip 不需要单独的Thread 我猜应该是if(!loop || repeatCount > repeatTime)。顺便说一句,为什么不使用for 而不是while?它会让你的代码更具可读性。 谢谢...这实际上是一个 sscce o.O 好的失败...真的应该是和。 【参考方案1】: if(!loop || repeatCount > repeatTime) 应该是 OR 而不是 AND。 使用for 循环而不是while。 问题可能是您一遍又一遍地尝试openning 相同的剪辑。为此,您必须首先获得一个新的AudioInputStream,以便由这个Clip 编辑为open

【讨论】:

谢谢它真的应该是或。它是一个真正的循环 - 我在这里如何使用 puld?我只是在完成后打开它。

以上是关于java剪辑循环不起作用的主要内容,如果未能解决你的问题,请参考以下文章

水平剪辑不起作用

剪辑路径在 Firefox [% 值] 中不起作用

GradientDrawable.setCornerRadii 的剪辑不起作用

为啥带有 SVG 的 CSS 剪辑路径在 Safari 中不起作用?

actionscript 2 影片剪辑事件不起作用

为啥我的调整剪辑图像大小的脚本不起作用?