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 может поддерживать несколько портов, каждый из которых идентифицируется номером кабеля [sic]. Согласно спецификации USB MIDI, номер кабеля идентифицирует виртуальный порт в конечной точке.

Примечание. Номер порта был бы более точным термином, поскольку он идентифицирует порт.

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

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

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