我正在将 TR-808 的 Soundbank 加载到 Java 中并想要播放该套件 - 问题是我无法禁用默认的 Soundbank 与鼓一起播放。仅使用 GM 声音时一切正常,但在加载 SoundBank 时,一切都被混合在一起。
player = MidiSystem.getSequencer();
player.open();
seqTrans = player.getTransmitter();
synth = MidiSystem.getSynthesizer();
synthRcvr = synth.getReceiver();
seqTrans.setReceiver(synthRcvr);
synth.open();
File file = new File("resources/TR-808.sf2");
Soundbank soundbank = MidiSystem.getSoundbank(file);
// synth.unloadAllInstruments(synth.getDefaultSoundbank()); don't work:(
synth.loadAllInstruments(soundbank);
Sequence seq = new Sequence(Sequence.PPQ, 4);
Track track = seq.createTrack();
ShortMessage instr = new ShortMessage();
instr.setMessage(192, channel, 35, 0);
MidiEvent changeInstrument = new MidiEvent(instr, 1);
track.add(changeInstrument);
for(int i = 1; i < 30; i++){
ShortMessage a = new ShortMessage();
a.setMessage(144, channel, 35, 100);
MidiEvent noteOn = new MidiEvent(a, 4+4*i);
track.add(noteOn);
}
这里有什么看不出来的吗?
编辑
我刚刚发现了这个,显然我不是唯一一个遇到这个问题的人:
一个人写
这里有人似乎遇到了同样的问题,默认音库与新的同时播放: http://forums.sun.com/thread.jspa?threadID= 5182082。不过,他们的“已解决”回复并没有提供太多信息。与他们的新音库的 .gm 文件的位置有关。
可悲的是,Sun 论坛的链接不再起作用(我在看你,甲骨文!)而且帖子是 2009 年的,所以它在互联网时代已经很老了,我希望这个问题已经得到解决 - 可悲的是它似乎没有。
我转而使用 Beads Project ( http://beadsproject.net ),他们还提供 Midi 支持。我的音频样本运行良好(比 Java 音频好得多!),并将在不久的将来(-ish)尝试他们的 Midi 实现。如果有人感兴趣,我可以在得到结果后立即发布此问题的更新。