MIDI乐器不适用于javax.sound.midi.MidiChannel

时间:2019-03-01 13:45:33

标签: java midi javasound synthesizer

我目前正在开发一种应用程序,可以用不同的乐器演奏一些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);

2 个答案:

答案 0 :(得分:1)

理论中,您需要使用补丁的.getBank()方法,并将银行编号和程序编号同时提供给.programChange()

实际上,当我尝试自己复制问题时,默认的com.sun.media.sound.SoftSynthesizer似乎根本不支持银行更改。

答案 1 :(得分:0)

通用MIDI中总共只有128个乐器程序,因此您将无法使用乐器215,这可能不存在。

Wikipedia上列出了所有可用的Midi乐器,您也许可以在这里找到与您所寻找的非常接近的东西。