MIDI 乐器不适用于 javax.sound.midi.MidiChannel
MIDI instrument not working for javax.sound.midi.MidiChannel
我目前正在开发一个使用不同乐器播放 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);
General MIDI 中总共只有 128 个乐器程序,因此您将无法使用可能不存在的乐器 215。
维基百科上列出了所有可用的 MIDI 乐器,您也许可以在那里找到与您所寻找的非常接近的东西。
在理论中,您需要使用补丁的.getBank()
方法并将库号和程序号提供给.programChange()
。
实际上,当我尝试自己复制您的问题时,默认的 com.sun.media.sound.SoftSynthesizer
似乎根本不支持银行更改。
我目前正在开发一个使用不同乐器播放 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);
General MIDI 中总共只有 128 个乐器程序,因此您将无法使用可能不存在的乐器 215。
维基百科上列出了所有可用的 MIDI 乐器,您也许可以在那里找到与您所寻找的非常接近的东西。
在理论中,您需要使用补丁的.getBank()
方法并将库号和程序号提供给.programChange()
。
实际上,当我尝试自己复制您的问题时,默认的 com.sun.media.sound.SoftSynthesizer
似乎根本不支持银行更改。