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
。
问题可能是您一遍又一遍地尝试open
ning 相同的剪辑。为此,您必须首先获得一个新的AudioInputStream
,以便由这个Clip
编辑为open
。
【讨论】:
谢谢它真的应该是或。它是一个真正的循环 - 我在这里如何使用 puld?我只是在完成后打开它。以上是关于java剪辑循环不起作用的主要内容,如果未能解决你的问题,请参考以下文章
GradientDrawable.setCornerRadii 的剪辑不起作用