我目前正在开发一个应用程序,用不同的乐器演奏一些MIDI。我正在使用javax.sound.midi.MidiChannel,它适用于吉他(索引25)和贝司(索引32)。现在我想添加一个曼陀林频道;根据synthesizer.getDefaultSoundbank()。getInstruments(),这是索引215.但是使用下面的代码,Mandolin通道的程序设置为25(与吉他通道相同)。根据文档,programChange()方法只允许0到127之间的值...任何想法如何配置我的通道使用Mandolin作为工具?
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);
从理论上讲,您需要使用补丁的.getBank()
方法,并将库号和程序号提供给.programChange()
。
在实践中,当我尝试自己复制您的问题时,似乎默认的com.sun.media.sound.SoftSynthesizer
似乎根本不支持银行更改。
通用MIDI中只有128个乐器程序,因此您将无法使用可能不存在的乐器215。
在维基百科上有一个所有可用midi乐器的列表,你可能能找到一些非常接近你所寻找的东西。