MIDI-инструмент не работает для javax.sound.midi.MidiChannel - PullRequest
0 голосов
/ 01 марта 2019

В настоящее время я работаю над приложением для игры на 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);

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

В теории вам необходимо использовать метод патча .getBank() и указать номер банка и номер программы для .programChange().

На практике, когдаЯ пытаюсь повторить вашу проблему самостоятельно, похоже, что значение по умолчанию com.sun.media.sound.SoftSynthesizer вообще не поддерживает банковские изменения.

0 голосов
/ 01 марта 2019

Всего в General MIDI всего 128 программ для инструментов, поэтому вы не сможете использовать инструмент 215, которого, вероятно, не существует.

В Википедии есть список всех доступных миди-инструментов, возможно, вы сможете найти что-то очень похожее на то, что вы ищете.

...