java - 重复的音频剪辑无法播放 - Java

标签 java audio

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

相关文章:

android - Android:java.lang.RuntimeException:无法实例化 Activity ComponentInfo:java.lang.NullPointerException

javascript - 是什么导致桌面 Safari html 音频 currentTime 不准确?

java - 是否可以在java servlet中准确判断客户端的IP地址

android - 在Android中听不到持续时间短于100ms的正弦波

java - TreeMap 只允许放入一项?

java - 如何让导入的图片短暂显示?

api - 我想通过Web音频API获取当前频率

vb.net - 为什么运行媒体播放器可以消除VB.NET应用程序的音频延迟?

Java JPA 日期提前 14 小时

java - 同步 : Threads execute two critical sections in same order