MIDI-архитектура

В этой статье описывается общая архитектура MIDI, независимая от какой-либо реализации платформы, API или функций, специфичных для платформы.

Ключевые понятия

События

Протокол MIDI предназначен для связи на основе событий. Событие — это указание на то, что что-то произошло или произойдет в определенное время. MIDI-события представлены сообщениями , атомарными связками информации.

Транспорт

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

Аппаратные MIDI-транспорты включают:

Представление сообщения

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

Большинство MIDI-сообщений короткие (от одного до трех байтов), но есть возможность для более длинных сообщений через SysEx .

Временные метки

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

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

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

Устройства

Периферийное устройство обеспечивает возможность ввода/вывода (I/O) для компьютера. Термины MIDI-периферия и MIDI-устройство обычно относятся к любому аппаратному или программному модулю, который поддерживает протокол MIDI. В этом документе MIDI-периферия относится к физическому объекту, а MIDI-устройство описывает модуль, который фактически реализует MIDI.

Порты

Порт — это точка интерфейса между компьютерами и периферийными устройствами.

MIDI 1.0 использует 5-контактный разъем DIN в качестве порта. Каждый порт является либо OUT (источник MIDI-данных), IN (приемник для MIDI-данных), либо THRU (что означает IN , который напрямую направляется на OUT ).

Другие транспорты, такие как USB и BLE, расширяют концепцию портов .

MIDI-устройство имеет как минимум один порт OUT , порт IN или оба.

MIDI-устройство передает поток(и) сообщений, поступающих на каждый порт OUT , и принимает поток(и) сообщений, поступающих на каждый порт IN . Термины IN и OUT , конечно, относятся к одному порту; с точки зрения другого порта применяется обратный термин.

Связь

В транспорте MIDI 1.0 порт OUT соединяется не более чем с одним портом IN или THRU из-за характера текущей петли. В транспортах USB и BLE то же самое верно на самом низком уровне, хотя реализация может переформулировать поток сообщений, чтобы его можно было транслировать на несколько портов IN .

Кабели

Кабель MIDI 1.0 — это физический пучок проводов, соединяющий порт OUT с портом IN или THRU . Кабель передает только данные.

Примечание. Существуют нестандартные модификации MIDI, которые подают питание на два неиспользуемых контакта. Это называется фантомное питание .

USB-кабель аналогичен, за исключением того, что существует большое разнообразие типов разъемов, а концепция IN / OUT / THRU заменена ролью хоста / периферии.

При работе в режиме хоста USB хост-устройство подает питание на периферийное устройство MIDI. Большинство небольших периферийных устройств MIDI потребляют одну нагрузку USB (100 мА) или меньше. Однако некоторым более крупным периферийным устройствам или периферийным устройствам с аудиовыходом или подсветкой требуется больше энергии, чем может обеспечить хост-устройство. Если у вас возникли проблемы, попробуйте другое периферийное устройство MIDI или концентратор USB с питанием.

Канал

Каждый поток MIDI-сообщений мультиплексируется среди 16 каналов . Большинство сообщений направляются на определенный канал, но есть типы сообщений, которые не привязаны к конкретному каналу. Обычно каналы нумеруются от 1 до 16, хотя представлены значениями каналов от 0 до 15.

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

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

В транспорте MIDI через USB одна конечная точка USB может поддерживать несколько портов, каждый из которых идентифицируется номером кабеля [так в оригинале]. Согласно спецификации USB MIDI, номер кабеля идентифицирует виртуальный порт в конечной точке.

Примечание: номер порта был бы более точным термином, учитывая, что он идентифицирует порт.

Таким образом, один физический USB-кабель может передавать более одного набора из 16 каналов.

Реализация платформы

Как отмечалось во введении, эти общие концепции MIDI применимы ко всем реализациям. Интерпретацию концепций на платформе Android см. в Руководстве пользователя Android MIDI для android.media.midi .