我目前正在开发一种应用程序,可以用不同的乐器演奏一些MIDI。我为此使用javax.sound.midi.MidiChannel,它可以与吉他(索引25)和贝司(索引32)一起正常工作。现在,我想添加一个曼陀林频道;根据synthesizer.getDefaultSoundbank()。getInstruments(),索引为215。但是使用下面的代码,曼陀林通道的程序设置为25(与吉他通道相同)。根据文档,programChange()方法仅允许使用0到127之间的值。 有什么想法可以配置频道以与曼陀林一起使用吗?
Synthesizer synthesizer = MidiSystem.getSynthesizer();
synthesizer.open();
final Instrument[] instruments = synthesizer.getDefaultSoundbank().getInstruments();
MidiChannel guitarChannel = synthesizer.getChannels()[0];
guitarChannel.programChange(instruments[25].getPatch().getProgram());
MidiChannel bassChannel = synthesizer.getChannels()[1];
bassChannel.programChange(instruments[32].getPatch().getProgram());
MidiChannel mandolinChannel = synthesizer.getChannels()[2];
mandolinChannel.programChange(instruments[215].getPatch().getProgram());
mandolinChannel.noteOn(note, 100);
答案 0 :(得分:1)
在理论中,您需要使用补丁的.getBank()
方法,并将银行编号和程序编号同时提供给.programChange()
。
实际上,当我尝试自己复制问题时,默认的com.sun.media.sound.SoftSynthesizer
似乎根本不支持银行更改。
答案 1 :(得分:0)
通用MIDI中总共只有128个乐器程序,因此您将无法使用乐器215,这可能不存在。
Wikipedia上列出了所有可用的Midi乐器,您也许可以在这里找到与您所寻找的非常接近的东西。