在java中创建Clip
并打开声音后,您可以使用clip.start()
播放声音。您可以使用clip.stop()
暂停播放此声音,然后通过调用clip.start()
继续播放。
使用clip.loop(i)
时有没有做同样的事情?
调用clip.loop(3)
后,剪辑应播放四次。但是,如果你在声音上调用clip.stop()
,然后通过调用clip.start()
恢复它,剪辑将取消暂停,但无论需要多少循环,它都只会完成当前的游戏。因此,如果我理解正确,clip.stop()
会在不重置微秒位置的情况下停止播放,并且clip.start()
仅从当前微秒位置到剪辑结尾仅继续播放一次。
那么如何在不丢失循环量的情况下在java中恢复循环剪辑呢?如果有办法获得剪辑循环的次数,我可能会想出来。
答案 0 :(得分:1)
首先,在获得某种异常后,我搜索并找到了这个网页,这是一个实现接口Clip,DataLine和其他一些类的类的文档。 很难确切地说出这些方法的作用,但似乎在类中有一个我们无法访问的循环计数器。基本上,如果你想计算你需要Clip.LOOP_CONTINUOUSLY的循环并拥有自己的计数器,它在轨道的末尾递增。请注意,stop()将影响Clip实例的许多值,因此在start()之后,您将再次需要循环(-1)[Clip.LOOP_CONTINUOUSLY = -1,但使用API确认]。
我决定实现自己的setLoopPoints(int,int)和loop(int)join方法,并将其发布在下面。请注意(也许是因为它在一个Thread中)getFramePosition()似乎只返回每第441帧,或者有时是第882帧或第1323帧,这意味着这不是一个完美的解决方案,但我不认为有一个完美的解决方案。
另外,请注意,如果您在UI线程上对剪辑执行任何操作(如移动位置),则可能会影响此操作并导致异常。
以下是代码:
%HOMEDRIVE%%HOMEPATH%