Я проходил через ту же проблему и собирался сходить с ума.Оказывается, значения Program Change в различных спецификациях данных MIDI от разных поставщиков основаны на 1.Не 0. Или, возможно, неправильная реализация AudioKit?
Итак, вместо значения programChange, равного 9, следует использовать значение 8. Вот мой код для изменения текущего инструмента на канале 0 нарояль Bösendorfer на клавиатуре Yamaha Clavinova, где значение programChange в спецификации данных MIDI обозначено как 1.
midiOut.sendControllerMessage(0, value: 108) // MSB sound bank selection
midiOut.sendControllerMessage(32, value: 0) // LSB sound bank selection
midiOut.sendEvent(AKMIDIEvent(programChange: 0, channel: 0)) // Initiate program change based on MSB and LSB selections
При чтении различной документации о том, как работает MIDI, я также видел сообщения на форуме, описывающие клавиатуры, которыеожидать выбора банка LSB до выбора банка MSB.Однако я не понимаю, как должен работать MIDI, но стоит попробовать, если вы все еще не можете заставить его работать с клавиатурами Roland.