我对使用声音相当陌生,我也能播放声音,但我在播放声音时遇到了java制作的所有声音剪辑线程的问题。我想知道我如何使所有的声音运行在一个线程上,或死亡,一旦它完成播放。
我目前正在运行这段代码来实际播放声音,在调用play()方法时创建所有内容的新实例:
private AudioInputStream as;
private Clip c;
public synchronized void play(final SoundType type) {
reset();
try {
as = AudioSystem.getAudioInputStream(getSound(type));
c = AudioSystem.getClip();
c.open(as);
c.start();
} catch (Exception e) {
e.printStackTrace();
}
}我能做的是,它使我能够在一次播放多个声音,通过创建一个新的实例,每一项在一次。唯一的问题是它在进程中创建了多个线程,当播放不同的声音时,程序会有这么多线程。
是否有一种更有效的方法,或者我可以对我目前的方法进行批准,允许我一次播放多个声音,但最终它会杀死那个剪辑线程,或者可能有一个线程处理所有声音?
发布于 2013-12-02 23:25:00
你可以写你自己的音频混合器。没那么难。从音频文件中提取音频数据,并在输出到单个SourceDataLine之前对所述帧进行求和。
或者,您可以使用TinySound (github上可用的代码)。这正是这种混合的一个很好的、干净的实现。
混合到单个输出的一个好处是:一些系统(有些Linux)不支持多个输出。
https://stackoverflow.com/questions/20320020
复制相似问题