Musical Instrument Digital Interface (MIDI) был первоначально разработан для соединения электронных музыкальных инструментов. Этот интерфейс является гибким и использует в приложениях далеко за пределами музыкальных инструментов. Его простой однонаправленный протокол обмена сообщениями поддерживает множество различных видов обмена сообщениями. Одним из видов MIDI-сообщений является Control Change message, которое используется для передачи изменений в элементах управления, таких как ручки, ползунки и кнопки.
MIDI control surface - это устройство с элементами управления, которое отправляет сообщения MIDI Control Change, когда вы поворачиваете ручку, перемещаете ползунок или нажимаете кнопку на его поверхности. Каждое сообщение Control Change указывает, какое управление изменилось и какова его новая позиция.
Поскольку протокол обмена сообщениями MIDI является однонаправленным, определение конкретного положения контроллера требует, чтобы приемник прослушивал сообщения изменения управления, которые посылает контроллер. Протокол не поддерживает запрос контроллера MIDI на его позицию.
Простейшие поверхности управления MIDI являются однонаправленными: Они отправляют сообщения MIDI Control Change, но не получают их. Более сложные поверхности управления являются двунаправленными: Они могут отправлять и получать сообщения об изменении управления. Эти управляющие поверхности имеют ручки или ползунки, которые могут работать автоматически. Для примера поверхность управления может иметь моторизованные ползунки или ручки. Когда оно получает сообщение Control Change, соответствующее управление переходит в положение в сообщении.
Audio Toolbox™ позволяет вам использовать поверхности управления MIDI для управления MATLAB® программы и Simulink® модели путем предоставления возможности прослушивания сообщений Control Change. Тулбокс также предоставляет ограниченную возможность отправки сообщений об изменении управления для поддержки синхронизации элементов управления MIDI. Это руководство охватывает общие функции MIDI. Для функций, характерных для аудиоплагинов в MATLAB, смотрите MIDI Control for Audio Plugins. Общий интерфейс Audio Toolbox к управляющим поверхностям MIDI включает пять функций и один блок:
midiid
- Интерактивно идентифицируйте управление MIDI.
midicontrols
- Откройте группу элементов управления MIDI для чтения.
midiread
- Верните последнее значение элементов управления MIDI.
midisync
- Отправка значений в элементы управления MIDI для синхронизации.
midicallback
-- Вызывать указатель на функцию, когда MIDI управляет изменением значения.
MIDI Controls (блок) -- Выход значений из элементов управления на поверхности управления MIDI. Блок MIDI Controls объединяет функциональность общих функций MIDI в один блок для окружения Simulink.
Эта схема показывает типовой рабочий процесс с общими функциями MIDI в MATLAB. Для окружения Simulink выполните шаги 1 и 2, а затем используйте блок MIDI Controls для управляемого пользовательским интерфейсом рабочего процесса.
Перед запуском MATLAB подключите поверхность управления MIDI к компьютеру и включите его. Инструкции по подключению см. в инструкциях для вашего MIDI-устройства. Если вы запустите MATLAB перед подключением устройства, MATLAB может не распознать ваше устройство при его подключении. Чтобы исправить проблему, перезапустите MATLAB с уже подключенным устройством.
Используйте midiid
функция для определения имени устройства и контрольных номеров вашей поверхности управления MIDI. После звонка midiid
он продолжает слушать до тех пор, пока не получит сообщение «Control Change». Когда оно получает сообщение Control Change, оно возвращает управляющий номер, сопоставленный с номером контроллера, которым вы манипулировали, и опционально возвращает имя устройства вашей поверхности управления MIDI. Имя устройства определяется производителем и операционной системой хоста. См. раздел «Контрольные номера» для объяснения того, как MATLAB вычисляет контрольное число.
Чтобы задать имя устройства по умолчанию, смотрите Set Default MIDI Device.
Используйте midicontrols
функция для создания объекта, который прослушивает сообщения Control Change и кэширует самые последние значения, соответствующие указанным контроллерам. Когда вы создаете midicontrols
объект, вы задаете поверхность управления MIDI по имени устройства и определенным контроллерам на поверхности по связанным с ними номерам управления. Потому что midicontrols
объект не может запросить поверхность управления MIDI для начальных значений, рассмотрите установку начальных значений при создании объекта.
Используйте midiread
функцию, чтобы запросить вашу midicontrols
объект для текущих значений управления. midiread
возвращает матрицу со значениями, соответствующими всем контроллерам midicontrols
объект прослушивает. Как правило, вы хотите разместить midiread
в цикле аудиопотока для непрерывного обновления.
Вы можете использовать midisync
для отправки сообщений Control Change на поверхность управления MIDI. Если поверхность управления MIDI является двунаправленной, она настраивает указанные контроллеры. Одно важное использование midisync
- установить начальные значения положения контроллера на поверхности управления MIDI.
Другое важное использование midisync
обновление поверхности управления MIDI, если значения управления скорректированы в цикле аудиопотока. В этом случае вы вызываете midisync
с обоими вашими midicontrols
объект и обновленные управляющие значения.
midisync
также является мощным инструментом в системах, которые также включают пользовательские интерфейсы (UI), так что, когда одно управление изменено, другое управление отслеживает его. Обычно вы реализуете такое отслеживание, установив функции обратного вызова на обоих midicontrols
объект (использование midicallback
) и управление UI. Коллбэк для midicontrols
объект отправляет новые значения в элемент управления UI. Пользовательский интерфейс использует midisync
для отправки новых значений в midicontrols
объект и поверхность управления MIDI. Посмотрите midisync
для примеров.
Вы можете использовать midicallback
как альтернатива размещению midiread
в цикле аудиопотока. Если midicontrols
объект получает сообщение Control Change, midicallback
автоматически вызывает указанный указатель на функцию. Функция обратного вызова обычно вызывает midiread
для определения нового значения элементов управления MIDI. Вы можете использовать этот коллбэк, когда хотите, чтобы контроллер инициировал действие, такое как обновление пользовательского интерфейса. Использование этого подхода препятствует непрерывной работе программы MATLAB в командном окне.
Вы можете задать устройство MIDI по умолчанию в среде MATLAB, используя setpref
функция. Использовать midiid
для определения имени устройства и последующего использования setpref
для установки выбора.
[~,deviceName] = midiid
Move the control you wish to identify; type ^C to abort. Waiting for control message... done deviceName = BCF2000
setpref('midi','DefaultDevice',deviceName)
Если вы не задаете этот выбор, MATLAB и операционная система хоста выбирают для вас устройство. Однако такой автоматический выбор может привести к непредсказуемым результатам, поскольку на многих компьютерах установлены «виртуальные» (программные) MIDI-устройства, о которых вы, возможно, не знаете. Для предсказуемого поведения установите выборы.
MATLAB задает контрольные числа как (MIDI channel number) × 1000 + (MIDI controller number).
MIDI channel number - это канал передачи, который используется вашим устройством для отправки сообщений. Это значение находится в области значений 1-16.
MIDI controller number - это номер, присвоенный отдельному элементу управления на устройстве MIDI. Это значение находится в области значений 1-127.
Ваше устройство MIDI определяет значения MIDI channel number и MIDI controller number.
midicallback
| midicontrols
| midiid
| midiread
| midisync