我有一个预定的线程,该线程每半秒左右运行一次,每次播放一个音频剪辑,在每个循环之前在剪辑上调用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/

10-10 08:14