【发布时间】:2015-09-23 11:55:35
【问题描述】:
嗯,我正在使用 java 编写一个游戏项目,我想实现这样的东西:当一个对象开始移动时,它会发出一些声音效果,而当另一个对象在第一个对象停止之前开始移动时,它也会制作一些音效。在第二个对象开始移动后,第一个对象停止移动之前,如何合并两个对象的声音而不是单独播放?
【问题讨论】:
嗯,我正在使用 java 编写一个游戏项目,我想实现这样的东西:当一个对象开始移动时,它会发出一些声音效果,而当另一个对象在第一个对象停止之前开始移动时,它也会制作一些音效。在第二个对象开始移动后,第一个对象停止移动之前,如何合并两个对象的声音而不是单独播放?
【问题讨论】:
其中大部分将使用java.sound.sampled 库来实现。专注于Clip 的功能。 This site 使用样本和 MIDI 文件提供了一些非常好的样板文件。它甚至还有一个游戏示例。
无论如何,根据 StackOverflow 的 javasound page,这是一个同时播放两个 Clips 的粗略示例:
public static void main(String... args) throws Exception {
URL url1 = new URL("http://www.websitewithsomewav/noise1.wav");
Clip clip1 = AudioSystem.getClip();
AudioInputStream stream1 = AudioSystem.getAudioInputStream(url1);
clip1.open(stream1);
URL url2 = new URL("http://www.websitewithsomewav/noise2.wav");
Clip clip2 = AudioSystem.getClip();
AudioInputStream stream2 = AudioSystem.getAudioInputStream(url2);
clip2.open(ais2);
clip1.loop(Clip.LOOP_CONTINUOUSLY);
clip2.loop(Clip.LOOP_CONTINUOUSLY);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// A GUI element to prevent the Clip's daemon Thread
// from terminating at the end of the main()
JOptionPane.showMessageDialog(null, "Close to exit!");
}
});
}
如果你绝对必须使用单个输入流,你可以试试MixingAudioInputStream
【讨论】: