我有一个预定的线程,该线程每半秒左右运行一次,每次播放一个音频剪辑,在每个循环之前在剪辑上调用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);
但第一次后便不再播放。代码运行,但声音不播放。有任何想法吗?
最佳答案
容易修复!
您只需要添加重置媒体位置的步骤。您可以使用clip.setFramePosition(0)
或clip.setMicrosecondPosition(0)
来执行此操作,以返回到剪辑的开头。 start()方法只是从最后一个媒体位置开始,即使它是文件的结尾。
if (clipF5.isRunning())
{
clipF5.stop();
clipF5.setFramePosition(0);
}
clipF5.start();
我假设您的剪辑长度不到30秒!
关于java - 重复的音频剪辑无法播放-Java,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58628083/