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

问题描述 投票:1回答:2

我目前正在开发一个应用程序,用不同的乐器演奏一些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);
java midi javasound synthesizer
2个回答
1
投票

从理论上讲,您需要使用补丁的.getBank()方法,并将库号和程序号提供给.programChange()

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


0
投票

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

在维基百科上有一个所有可用midi乐器的列表,你可能能找到一些非常接近你所寻找的东西。

© www.soinside.com 2019 - 2024. All rights reserved.