我制作了一个 java 程序,使用 java 声音 API 中的 MIDI 包合成声音,但是,当我将它导出到 .jar 文件时,播放的声音与我在 eclipse 中运行时的声音完全不同.有谁知道它为什么这样做或如何解决这个问题?
可在此处找到仪器列表:http://www.hittrax.com.au/images/artists/gmgs.pdf
下面是我的部分代码
try {
Synthesizer synth = MidiSystem.getSynthesizer();
synth.open();
MidiChannel[] channels = synth.getChannels();
channels[0].programChange(123); // Set the instrument to be played (integer between 0 and 127)
channels[0].noteOn(60, 80); // Play Middle C
Thread.sleep(duration);
channels[0].noteOff(60);
Thread.sleep(500);
synth.close();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (MidiUnavailableException e) {
e.printStackTrace();
}
下图是我录制时的声音,第一个是eclipse中的声音,第二个是导出到.jar时的声音
最佳答案
正如您刚刚发现的,在 eclipse 之外运行 jar 文件时,Java 会返回不同的默认合成器。
这可能是由 javax.sound.midi.Synthesizer
属性或类路径中的 sound.properties
文件引起的。
作为解决方法,您可以在 eclipse 中运行应用程序时打印属性值并手动设置它,以便 jar 文件使用相同的合成器。
编辑:
如果你想使用 com.sun.media.sound.MixerSynth
作为默认创建属性
javax.sound.midi.Synthesizer=com.sun.media.sound.MixerSynth
例子:
Properties props = System.getProperties();
props.setProperty("javax.sound.midi.Synthesizer", "com.sun.media.sound.MixerSynth");
Synthesizer synth = MidiSystem.getSynthesizer();
....
更多信息:http://docs.oracle.com/javase/7/docs/api/javax/sound/midi/MidiSystem.html )
关于java - MIDI 乐器在导出到 .jar 文件时听起来不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31152589/