gpt4 book ai didi

java - 如何使用 AudioSystem 预加载不同的剪辑?

转载 作者:行者123 更新时间:2023-11-30 05:43:01 25 4
gpt4 key购买 nike

我在 Java 应用程序中集成了音频。问题是有时clip.open()会挂起一点,所以我读到我需要重新加载剪辑,然后只需clip.start()。

我为每个音频文件使用一个声音类,它会在播放完成后重新加载剪辑。这里的问题是,当我触发它时,我触发的声音不会正确播放,而是当我触发下一个声音时。它改变了所有的声音。

我想出了这样的想法:它发生是因为加载方法打开了一个剪辑,然后由另一个声音实例使用,“它不应该只加载它的剪辑吗?”

就像我说的,如果在启动后立即调用 load 方法,有时会卡住。我创建了一个线程来运行它,这样它就不会挂起主线程,但它无论如何都会卡住,因此声音播放得很晚。

public class Sound {

private final String file;
private static Clip clip;

public Sound(String file){
this.file = file;
load();
}

public final void load(){
try {
AudioInputStream stream = AudioSystem.getAudioInputStream(new File(file).getAbsoluteFile());
clip = AudioSystem.getClip();
System.out.println(clip);
clip.open(stream);
} catch (UnsupportedAudioFileException | IOException | LineUnavailableException ex) {
Logger.getLogger(Sound.class.getName()).log(Level.SEVERE, null, ex);
}
}

public void play() {
clip.start();
clip.addLineListener(e -> {
if (e.getType() == LineEvent.Type.STOP) {
clip.stop();
clip.close();
load();
}
});
}

}

我希望音频在触发时播放。

最佳答案

我明白了。这是一个非常愚蠢的错误。 Clip 对于所有类都是相同的,不是因为 getClip() 返回相同的值,而是因为我将其设置为静态。刚刚更改:

private static Clip clip;

private Clip clip;

关于java - 如何使用 AudioSystem 预加载不同的剪辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55341517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com