我有一个计划线程,大约每半秒运行一次,每次播放一个音频剪辑,在每个循环之前对剪辑调用stop()
,以便再次start()
:
public AudioThread() {
Clip clipF5 = AudioSystem.getClip();
AudioInputStream inputF5 = AudioSystem.getAudioInputStream(Main.class.getResourceAsStream("sound.wav"));
clipF5.open(inputF5);
}
ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(new Runnable() {
public void run() {
if (clipF5.isRunning()) { clipF5.stop(); }
clipF5.start();
}
}, 1, interval, TimeUnit.MICROSECONDS);
但第一次之后就不再播放了。代码运行,但声音不播放。有什么想法吗?
容易修理!
你只需要增加重置媒体位置的步骤。您可以使用< code > clip . setframeposition(0)或< code > clip . setmicrosecondposition(0)返回到剪辑的开头。start()方法只是从最后一个媒体位置开始,即使它是文件的结尾。
if (clipF5.isRunning())
{
clipF5.stop();
clipF5.setFramePosition(0);
}
clipF5.start();
我假设你的剪辑长度不到30秒!