我目前正在申请使用不同的乐器演奏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);发布于 2019-03-01 14:03:56
理论上,您需要使用补丁的.getBank()方法,并向.programChange()提供银行号和程序号。
实际上,当我试图复制您的问题时,默认的com.sun.media.sound.SoftSynthesizer似乎根本不支持银行的更改。
发布于 2019-03-01 13:59:17
在通用MIDI中只有128个仪器程序,所以您将无法使用仪器215,这可能并不存在。
维基百科上有一张所有可用的midi工具的清单,你也许能找到一些与你在那里寻找的东西非常接近的东西。
https://stackoverflow.com/questions/54945929
复制相似问题