音频Java暂停后继续循环剪辑
在java中创建Clip
并打开声音后,可以使用clip.start()
播放声音。您可以使用clip.stop()
暂停播放此声音,然后调用clip.start()
继续播放
在使用clip.loop(i)
时是否有任何方法可以做同样的事情
调用clip.loop(3)
后,该剪辑应播放四次。但是,如果在声音上调用clip.stop()
,然后通过调用clip.start()
继续播放,则剪辑将取消暂停,但无论需要执行多少次循环,都只会完成当前的播放。因此,如果我理解正确,clip.stop()
停止播放而不重置微秒位置,clip.start()
仅从当前微秒位置继续播放到片段末尾一次
那么,如何在不丢失循环量的情况下恢复java中的循环片段呢?如果有一种方法可以得到一个剪辑的循环次数,我可能会找到它
# 1 楼答案
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/com/sun/media/sound/DirectAudioDevice.java
首先,在得到某种异常之后,我搜索并找到了这个网页,它是实现接口Clip、DataLine和其他一些类的文档。 很难说这些方法到底做了什么,但类中似乎有一个循环计数器,我们无法访问。基本上,如果要计算循环数,则需要剪裁。连续循环_,并在轨道末端有自己的递增计数器。请注意,stop()将影响Clip实例的许多值,因此在start()之后,您将再次需要循环(-1)[Clip.loop\u CONTINUOUSLY=-1,但使用API确认]
我决定实现我自己的setLoopPoints(int,int)和loop(int)连接方法,并将其发布在下面。请注意(可能是因为它在线程中)getFramePosition()似乎只返回每441帧,有时是882帧或1323帧,这意味着这不是一个完美的解决方案,但我认为没有完美的解决方案
另外,请注意,如果您使用剪辑在UI线程上执行任何操作(如移动位置),可能会影响此操作并导致异常
代码如下: