Интерфейс MIDI-устройства

MIDI

Этот пример вводит протокол Цифрового интерфейса музыкальных инструментов (MIDI) и как можно использовать Audio Toolbox™, чтобы взаимодействовать с MIDI-устройствами. Инструменты, описанные здесь, позволяют вам отправить и получить все сообщения MIDI, аналогичные описанному протоколом MIDI. Если вы интересуетесь только отправкой и получением сообщений Изменения Управления с поверхностью управления MIDI, смотрите Интерфейс Поверхности Управления MIDI. Если вы интересуетесь использованием MIDI, чтобы управлять вашими аудио плагинами, смотрите Управление MIDI для Аудио Плагинов. Чтобы узнать больше о MIDI в целом, консультируйтесь с Ассоциацией Производителей MIDI.

MIDI является техническим стандартом для связи между электронными инструментами, компьютерами и связанными устройствами. MIDI несет сообщения о событиях, характерные для звуковых сигналов, таких как подача и скорость, а также управляющие сигналы для параметров и сигналов часов синхронизировать темп.

MIDI-устройства

MIDI device является любым устройством, способным к отправке или получению сообщений MIDI. MIDI-устройства имеют входные порты, выходные порты или обоих. Протокол MIDI задает сообщения как однонаправленные. MIDI-устройство может быть реальным или виртуальным.

Audio Toolbox позволяет вам создать интерфейс к MIDI-устройству с помощью mididevice. Чтобы создать MIDI-интерфейс к определенному устройству, используйте mididevinfo запрашивать вашу систему для доступных устройств. Затем создайте mididevice объект путем определения MIDI-устройства по наименованию или ID.

mididevinfo
MIDI devices available:
  ID  Direction  Interface   Name
   0   output    MMSystem   'Microsoft MIDI Mapper'
   1    input    MMSystem   'USB MIDI Interface '
   2   output    MMSystem   'Microsoft GS Wavetable Synth'
   3   output    MMSystem   'USB MIDI Interface '
device = mididevice('USB MIDI Interface ')
device = 

  mididevice connected to
     Input: 'USB MIDI Interface ' (1)
    Output: 'USB MIDI Interface ' (3)

Можно задать mididevice объект прислушаться к входным сигналам, отправьте выходные сигналы или обоих. В этом примере, mididevice объект получает сообщения MIDI во входном порту под названием 'USB MIDI Interface ', и отправляет сообщения MIDI от выходного порта под названием 'USB MIDI Interface '.

Сообщения MIDI

MIDI message содержит информацию, которая описывает связанное с аудио действие. Например, когда вы нажимаете клавишу на клавиатуре, соответствующее сообщение MIDI содержит 3 байта:

  1. Первый байт описывает вид действия и канала. Первый байт упоминается как Status Byte.

  2. Второй байт описывает, какая клавиша нажата. Второй байт упоминается как Data Byte.

  3. Третий байт описывает, как трудно ключ проигрывается. Третий байт является также Байтом Данных.

Это сообщение является сообщением Note On. Примечание По упоминается как имя сообщения, команда или тип.

В MATLAB® сообщение MIDI группировано как midimsg возразите и может управляться как скаляры или массивы. Чтобы создать сообщение MIDI, вызовите midimsg с типом сообщения и затем задают обязательные параметры для определенного типа сообщения. Например, чтобы создать примечание по сообщению, задайте midimsg Type как 'NoteOn' и затем задайте необходимые входные параметры: образуйте канал, отметьте, и скорость.

channel = 1;
note = 60;
velocity = 64;
msg = midimsg('NoteOn',channel,note,velocity)
msg = 

  MIDI message:
    NoteOn          Channel: 1  Note: 60  Velocity: 64  Timestamp: 0  [ 90 3C 40 ]

Для удобства, midimsg отображает тип сообщения, канал, дополнительные параметры, метку времени и созданное сообщение в шестнадцатеричной форме. Шестнадцатеричный предпочтительная форма, потому что она имеет прямую интерпретацию:

Отправка и получение сообщений MIDI

Чтобы отправить и получить сообщения MIDI, используйте mididevice возразите функциям midisend и midireceive. Когда вы создаете mididevice объект, это начинает получать данные в своем входе и помещать его в буфер.

Чтобы получить сообщения MIDI из буфера, вызовите midireceive.

receivedMessages = midireceive(device)
receivedMessages = 

  MIDI message:
    NoteOn          Channel: 1  Note: 36  Velocity: 64  Timestamp: 15861.9  [ 90 24 40 ]
    NoteOn          Channel: 1  Note: 36  Velocity: 0   Timestamp: 15862.1  [ 90 24 00 ]
Сообщения MIDI возвращены как массив midimsg объекты. В этом примере нажимается клавиша на клавиатуре MIDI.

Чтобы отправить сообщения MIDI в MIDI-устройство, вызовите midisend.

midisend(device,msg)

Типы сообщений MIDI

Тип сообщения MIDI, которое вы создаете, задан как вектор символов или строка. Чтобы создать сообщение MIDI, задайте его его типом и необходимыми значениями свойств. Например, создайте Давление Канала сообщение MIDI путем ввода следующего в командной строке:

channelPressureMessage = midimsg('ChannelPressure',1,20)
channelPressureMessage = 

  MIDI message:
    ChannelPressure Channel: 1  ChannelPressure: 20  Timestamp: 0  [ D0 14 ]
После того, как вы создаете сообщение MIDI, можно изменить свойства, но вы не можете изменить тип.
channelPressureMessage.ChannelPressure = 37
channelPressureMessage = 

  MIDI message:
    ChannelPressure Channel: 1  ChannelPressure: 37  Timestamp: 0  [ D0 25 ]

Таблица суммирует допустимые типы сообщений MIDI.

Audio Toolbox обеспечивает синтаксисы удобства, чтобы создать несколько сообщений MIDI, используемых в последовательности и создать массивы сообщений MIDI. Смотрите midimsg для полного списка синтаксисов.

Синхронизация сообщения MIDI

Протокол MIDI не задает синхронизацию сообщения и принимает, что сообщения действуются на сразу. Много приложений требуют времени выполнения для постановки в очередь и пакетной обработки данных. Для удобства время выполнения пакетов Audio Toolbox с MIDI обменивается сообщениями в один midimsg объект. Весь midimsg объекты имеют Timestamp свойство, которое установлено во время создания в качестве дополнительного последнего аргумента или после создания. Timestamp по умолчанию нуль.

Интерпретация Timestamp свойство зависит от того, как сообщение MIDI создается и используется:

  • При получении сообщений MIDI с помощью midireceive, базовая инфраструктура присваивает метку времени при получении сообщений MIDI. Концептуально, часы синхронизации запускаются когда mididevice объект создается и присоединяется как прослушиватель данного входного порта MIDI. Если другой mididevice присоединен к тому же входному порту, он получает метки времени от тех же часов синхронизации как первый объект.

  • При отправке сообщений MIDI с помощью midisend, метки времени интерпретированы как тогда, когда отправить сообщение.

    Если не было никаких недавних вызовов midisend, затем midisend интерпретирует метки времени как относительно текущего реального времени. Сообщение с меткой времени нуля сразу отправляется. Если был недавний вызов midisend, затем midisend интерпретирует метки времени как относительно самой большой метки времени последней возможности к midisend. Часы метки времени для midisend характерно для выходного порта MIDI что mididevice соединяется с.

    Рассмотрите пару сообщений MIDI, которые включают и выключают примечание. Сообщения указывают, что примечание запускается после одной секунды и поддержано в течение одной секунды.

    Создайте Примечание По и Примечание От сообщений.

    OnMsg = midimsg('NoteOn',1,59,64);
    OffMsg = midimsg('NoteOn',1,59,0);

    Переслать и от сообщений с помощью одного вызова midisend, задайте метки времени сообщений относительно того же времени начала.

    OnMsg.Timestamp = 1;
    OffMsg.Timestamp = 2;
    midisend(device,[OnMsg;OffMsg]))

    Чтобы отправить Сообщение От сообщения отдельно, задайте метку времени Примечания От сообщения относительно самой большой метки времени предыдущего вызова midisend.

    OnMsg.Timestamp = 1;
    OffMsg.Timestamp = 1;
    midisend(device,OnMsg)
    midisend(device,OffMsg)

    Время "запуска" или ссылочное время, для midisend макс. между абсолютным временем и самой большой меткой времени в последней возможности к midisend. Например, полагайте, что x, произвольное время начала, равен текущему абсолютному времени. Если существует 1,5 вторых паузы между пересылкой примечания и примечанием от сообщений, получившаяся длительность примечания составляет 1,5 секунды.

    OnMsg.Timestamp = 1;
    OffMsg.Timestamp = 1;
    midisend(device,OnMsg)
    pause(1.5)
    midisend(device,OffMsg)

    Обычно, сообщения MIDI отправляются быстрее, чем или на скоростях в реальном времени, таким образом, нет никакой потребности отследить абсолютное время.

    Для живых выступлений или включить прерывания в потоке MIDI, можно обнулить метки времени и затем вызвать midisend в соответствующих реальных временных интервалах. В зависимости от вашего варианта использования можно разделить поток MIDI на маленькие повторяемые фрагменты времени.

Смотрите также

Классы

Функции

Похожие темы

Внешние веб-сайты