Отправка изменения программы с номером программы (номером патча) - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть два устройства Roland Midi, которые ведут себя одинаково, когда я пытаюсь отправить банк и изменить программу. Он всегда устанавливает его на первый патч банка. Это не изменит патч, который я выберу в банке. Однако Pro Logic может переключаться на другие банки.

В следующем примере устройства переключаются на банк, но программа (патч) на устройстве по умолчанию имеет первый в этом банке номер, а не номер 9.

var event = AKMIDIEvent(controllerChange: 0, value: 89, channel: 0)
midiOut.sendEvent(event)
event = AKMIDIEvent(controllerChange: 32, value: 64, channel: 0)
midiOut.sendEvent(event)
event = AKMIDIEvent(programChange: 9, channel: 0)
midiOut.sendEvent(event)

Кто-нибудь имеет опыт отправки этого MIDI-сообщения?

1 Ответ

0 голосов
/ 08 февраля 2019

Я проходил через ту же проблему и собирался сходить с ума.Оказывается, значения 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.

...