WikiDer > RTP-MIDI
RTP-MIDI (также известный как AppleMIDI) - это протокол для передачи MIDI сообщения внутри RTP (Протокол реального времени) пакетов по сетям Ethernet и WiFi. Он полностью открыт и бесплатен (лицензия не требуется) и совместим как с областями применения LAN, так и с WAN. По сравнению с MIDI 1.0, RTP-MIDI включает новые функции, такие как управление сеансами, синхронизация устройств и обнаружение потерянных пакетов с автоматической регенерацией потерянных данных. RTP-MIDI совместим с приложениями реального времени и поддерживает синхронизацию с точностью до сэмпла для каждого сообщения MIDI.
История RTP-MIDI
В 2004 году Джон Лаззаро и Джон Вавжинек из Калифорнийский университет в Беркли, сделал презентацию перед AES называется «Полезная нагрузка RTP для MIDI».[1]В 2006 году документ был отправлен в IETF и получил номер RFC 4695.[2] Параллельно с этим Лаззаро и Вавжинек выпустили еще один документ, в котором подробно рассказывается о практической реализации протокола RTP-MIDI, особенно о механизме журналирования.[3]
RFC 4695 устарел RFC 6295 в 2011 году. Протокол не изменился между двумя версиями документов RFC, последняя содержит исправление ошибок, обнаруженных в RFC 4695)[4]
ММА (Ассоциация производителей MIDI) создал страницу на своем веб-сайте, чтобы предоставить основную информацию, связанную с протоколом RTP-MIDI.[5]
AppleMIDI
яблоко Компьютер представил RTP-MIDI как часть своей операционной системы, Mac OS X v10.4, в 2005 году. Доступ к драйверу RTP-MIDI можно получить с помощью значка сети в инструменте настройки MIDI / аудио. Реализация Apple строго следует RFC 4695 для полезной нагрузки RTP и системы журналирования, но использует специальный протокол управления сеансом; они не следуют RFC 4695 предложение по управлению сеансом. Этот протокол отображается в Wireshark как «AppleMIDI» и был позже задокументировано Apple.
Apple также создала специальный класс в своих mDNS/Bonjour реализация. Устройства, соответствующие этому классу, автоматически появляются на панели конфигурации Apple RTP-MIDI как каталог участников, что делает систему Apple MIDI полностью доступной.Подключи и играй'. Однако можно вручную ввести IP-адреса и порты в этот каталог для подключения к устройствам, которые не поддерживают Bonjour.
Apple также представила поддержку RTP-MIDI в iOS4, но такие устройства не могут быть инициаторами сеанса.
Драйвер RTP-MIDI от Apple создает виртуальные MIDI-порты с именем «Sessions», которые доступны как MIDI-порты в любом программном обеспечении, таком как секвенсоры или программные инструменты, с использованием CoreMIDI, где они отображаются как пара портов MIDI IN / MIDI OUT, например любой другой порт MIDI 1.0 или порт USB MIDI.
Реализации
Встроенные устройства
В 2006 году голландская компания Kiss-Box представила первую встроенную реализацию RTP-MIDI в различных продуктах, таких как MIDI или LTC интерфейсы.[6] Эти устройства соответствуют реализации AppleMIDI, используя тот же протокол управления сеансом, чтобы быть совместимыми с другими устройствами и операционной системой, использующими этот протокол.
Фирменный драйвер был первоначально разработан компанией для Windows XP, но это было ограничено общением с их устройствами; невозможно было подключить ПК к компьютеру Mac с помощью этого драйвера. Поддержка этого драйвера была прекращена в 2012 году в пользу стандартного подхода, когда стал доступен драйвер rtpMIDI для Windows.
Kiss-Box объявила о выпуске в 2012 году плат ЦП нового поколения под названием «V3», которые поддерживают функции инициатора сеанса. Эти модели могут устанавливать сеансы с другими устройствами RTP-MIDI без использования компьютера в качестве точки управления.
Во время NAMM 2013 канадская компания iConnectivity представила новый интерфейс под названием iConnectivityMIDI4 +, который поддерживает RTP-MIDI и позволяет осуществлять прямое соединение между устройствами USB и RTP-MIDI. С тех пор они последовали за несколькими другими интерфейсами с поддержкой RTP-MIDI, включая mio4 и mio10, а также PlayAUDIO 12.
Windows
Тобиас Эриксен в 2010 году выпустил Windows-реализацию драйвера Apple RTP-MIDI.[7] Этот драйвер работает под XP, Vista, Windows 7, Windows 8, и Windows 10, 32 и 64 битные версии [8]. В драйвере используется панель конфигурации, очень похожая на панель Apple, и она полностью соответствует реализации Apple. Затем его можно использовать для подключения компьютера Windows к компьютеру Macintosh, а также встроенных систем. Как и в случае с драйвером Apple, драйвер Windows создает виртуальные MIDI-порты, которые становятся видимыми из любого MIDI-приложения, запущенного на ПК. Доступ осуществляется через уровень mmsystem, как и все другие MIDI-порты.
Linux
Поддержка RTP-MIDI для Linux была возобновлена в феврале 2013 года после периода бездействия. О доступности драйверов было объявлено на некоторых форумах, основанных на оригинальной работе Николя Фальке и Доминика Фобера.[9][10] Также доступна специальная реализация для компьютера Raspberry PI, называемая raveloxmidi.[11]Полная реализация RTP-MIDI (включая систему журналирования) доступна в дистрибутиве Ubuntu в программном пакете Scenic.[12]
iOS
Apple добавила полную поддержку CoreMIDI в свои устройства iOS в 2010 году, что позволило разрабатывать MIDI-приложения для iPhone, iPad и iPod. Затем MIDI стало доступно через стыковочный порт в виде USB-контроллера, что позволило подключать USB-MIDI-устройства с помощью «Apple Camera Kit». Он также был доступен в виде слушателя сеанса RTP-MIDI через WiFi.
Устройства iOS не поддерживают функции инициации сеанса, что требует использования внешнего инициатора сеанса в сети для открытия сеанса RTP-MIDI с iPad. Этим инициатором сеанса может быть компьютер Mac или компьютер Windows с активированным драйвером RTP-MIDI, или встроенное устройство RTP-MIDI. Сеанс RTP-MIDI отображается под именем «Network MIDI» для всех приложений CoreMIDI на iOS, и для добавления поддержки RTP-MIDI в приложение iOS не требуется специальной разработки. Порт MIDI виртуализирован с помощью CoreMIDI, поэтому программисту просто нужно открыть соединение MIDI, независимо от того, подключен ли порт к USB или RTP-MIDI.
Некоторые жалобы возникли по поводу использования MIDI через USB с устройствами iOS,[13] поскольку iPad / iPhone должен обеспечивать питание внешнего устройства. Некоторые USB-адаптеры MIDI потребляют слишком много тока для iPad, что ограничивает ток и блокирует запуск устройства, которое затем не отображается как доступное для приложения. Этой проблемы можно избежать, используя RTP-MIDI.
Javascript
С июня 2013 года Javascript-реализация RTP-MIDI, созданная Дж. Дачтерой, доступна как проект с открытым исходным кодом.[14] Исходный код основан на протоколе управления сеансами Apple и может выступать в качестве инициатора сеанса и его прослушивателя.
Ява
Возможны кроссплатформенные Java-реализации RTP-MIDI, в частности, библиотека nmj.[15]
WinRT
Проект WinRTP-MIDI [16] - это реализация стека протоколов RTP-MIDI с открытым исходным кодом под Windows RT. Первоначально код был разработан для переноса между различными версиями Windows, но последняя версия была оптимизирована для WinRT, чтобы упростить разработку приложений для Магазина Windows.
Ардуино
RTP-MIDI был доступен для платформы Arduino в ноябре 2013 года под названием «библиотека AppleMIDI».[17] Программный модуль может работать либо на модулях Arduino со встроенным адаптером Ethernet, таких как Intel Galileo, либо на «шилде Ethernet».
KissBox производит OEM-модуль RTP-MIDI, плату внешнего коммуникационного процессора, которая подключается через SPI автобусное сообщение.
MIDIbox
В декабре 2013 года два члена MIDIbox Группа DIY начала работу над начальной версией MIOS (Операционная система MIDIbox), включая поддержку RTP-MIDI по быстрому каналу SPI. Чтобы упростить интеграцию, было решено использовать внешнюю плату сетевого процессора, обслуживающую весь стек протоколов. Первая бета-версия была выпущена на второй неделе января 2014 года.[18] Первое официальное программное обеспечение было выпущено в первую неделю марта 2014 года.
Протокол, используемый в канале SPI между процессором MIOS и сетевым процессором, основан на том же формате, что и USB, с использованием 32-битных слов, содержащих полное сообщение MIDI, и был предложен в качестве открытого стандарта для связи между модулями сетевого процессора и Платы MIDI-приложений.
Аксолоти
Аксолоты - это оборудование с открытым исходным кодом синтезатор на базе процессора ARM STM32F427. Этот синтезатор полностью программируется с использованием концепции виртуальных патчей, аналогичной Max / MSP, и включает полную поддержку MIDI. Расширение node.js было разработано, чтобы разрешить RTP-MIDI соединение Axoloti с любыми RTP-MIDI устройствами.[19] Аппаратное обеспечение Axoloti также может быть оснащено внешним сопроцессором RTP-MIDI, подключенным через шину SPI, доступную на порте расширения ядра Axoloti. Подход такой же, как описанный для Arduino и MIDIbox.
MIDIKit Кросс-платформенная библиотека
MIDIKit - это кроссплатформенная библиотека с открытым исходным кодом, которая предоставляет унифицированный MIDI API для различных MIDI API, доступных на рынке (Core MIDI, Windows MME, Linux ALSA и т. Д.). MIDIKit поддерживает протокол RTP-MIDI, включая систему журналирования. Порты RTP-MIDI рассматриваются в MIDIKit как дополнительные порты (они не зависят от драйвера rtpMIDI), добавленные к собственным системным портам MIDI.[20]
Использование без водителя
Поскольку RTP-MIDI основан на UDP / IP, любое приложение может реализовать протокол напрямую, без использования какого-либо драйвера. Драйверы необходимы только тогда, когда пользователи хотят, чтобы сетевые MIDI-порты отображались как стандартные MIDI-порты. Например, некоторые объекты Max / MSP и плагины VST были разработаны в соответствии с этой методологией.
RTP-MIDI через AVB
AVB представляет собой набор технических стандартов, которые определяют спецификации для потоковых сервисов с чрезвычайно малой задержкой в сетях Ethernet. Сети AVB могут обеспечивать задержки вплоть до одного аудиосэмпла во всей сети.
RTP-MIDI изначально совместим с сетями AVB, как и любой другой IP-протокол, поскольку переключатели AVB (также известные как «переключатели IEEE802.1») автоматически управляют приоритетом между аудио / видеопотоками в реальном времени и IP-трафиком. Протокол RTP-MIDI также может использовать возможности AVB в реальном времени, если устройство реализует RTCP полезная нагрузка описана в документе IEEE-1733.[21] Затем приложения RTP-MIDI могут сопоставлять временную метку «презентации», предоставленную IEEE-802.1 Master Clock, с временной меткой RTP, обеспечивая точное распределение времени событий MIDI с точностью до выборки.
Протокол
RFC 4695/RFC 6295 разделить реализацию RTP-MIDI на разные части. Единственный обязательный параметр, определяющий соответствие спецификации RTP-MIDI, - это формат полезной нагрузки. Журналируемая часть является необязательной, но пакеты RTP-MIDI должны указывать, что у них есть пустой журнал, поэтому журнал всегда присутствует в пакете RTP-MIDI, даже если он пуст. Часть инициирования / управления сеансом носит чисто информационный характер. Он не использовался Apple, которая создала собственный протокол управления сеансами.
Формат заголовка
Раздел | Немного | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
RTP | 0 | V | п | Икс | CC | M | Тип полезной нагрузки (PT) | Порядковый номер | |||||||||||||||||||||||||
32 | Отметка времени | ||||||||||||||||||||||||||||||||
64 | Идентификатор источника синхронизации (SSRC) | ||||||||||||||||||||||||||||||||
96 | Идентификаторы содействующего источника (CSRC) (необязательно) | ||||||||||||||||||||||||||||||||
… | … | ||||||||||||||||||||||||||||||||
MIDI-команды | … | B | J | Z | п | LEN… | Список сообщений MIDI… | ||||||||||||||||||||||||||
Журнал (необязательно в зависимости от флага J) | … | S | Y | А | ЧАС | TOTCHAN | Контрольная точка пакета Seqnum | Системный журнал (необязательно)… | |||||||||||||||||||||||||
Журналы каналов… |
Сессии
Сеансы RTP-MIDI отвечают за создание виртуального пути между двумя устройствами RTP-MIDI, и они выглядят как пара MIDI IN / MIDI OUT с точки зрения приложения.RFC 6295 предлагает использовать ГЛОТОК (Протокол инициирования сеанса) и SDP (Протокол описания сеанса), но Apple решила создать собственный протокол управления сеансом. Протокол Apple связывает сеансы с именами, используемыми в Bonjour, а также предлагает службу синхронизации часов.
Данный сеанс всегда создается между двумя и только двумя участниками, причем каждый сеанс используется для обнаружения потенциальной потери сообщений между двумя участниками. Однако данный контроллер сеанса может открывать несколько сеансов параллельно, что обеспечивает такие возможности, как разделение, объединение или распределенная панель исправлений. На приведенной здесь схеме устройство 1 имеет два открытых сеанса одновременно, один с устройством 2, а другой с устройством 3, но два сеанса в устройстве 1 отображаются для конечного пользователя как один и тот же виртуальный интерфейс MIDI.
Сеансы против конечных точек
Распространенной ошибкой является несоответствие между конечными точками RTP-MIDI и сеансами RTP-MIDI, поскольку они оба представляют собой пару портов MIDI IN / MIDI OUT.
Конечная точка используется для обмена данными MIDI между элементом (программным и / или аппаратным), отвечающим за декодирование транспортного протокола RTP-MIDI, и элементом с использованием сообщений MIDI. Другими словами, на уровне конечной точки видны только данные MIDI. Для устройств с разъемами MIDI 1.0 DIN существует одна конечная точка на пару разъемов, например: 2 конечные точки для KissBox MIDI2TR, 4 конечные точки для iConnectivityMIDI4 + и т. Д. Устройства, использующие другие каналы связи, такие как SPI или USB, предлагают больше конечных точек, например, устройство Используя 32-битное кодирование USB MIDI Class, можно представить до 16 конечных точек с помощью поля Cable Identifier. Конечная точка представлена на стороне RTP-MIDI парным портом UDP, когда используется протокол сеанса AppleMIDI.
Сеанс определяет соединение между двумя конечными точками. MIDI IN одной конечной точки подключается к MIDI OUT удаленной конечной точки, и наоборот. Одна конечная точка может принимать несколько сеансов, в зависимости от конфигурации программного обеспечения. Каждый сеанс для данной конечной точки отображается как один для удаленного обработчика сеанса. Обработчик удаленного сеанса не знает, используется ли конечная точка, к которой он подключен, другими сеансами одновременно. Если для данной конечной точки активны несколько сеансов, различные потоки MIDI, достигающие конечной точки, объединяются перед отправкой данных MIDI в приложение. В другом направлении MIDI-данные, созданные приложением, отправляются всем обработчикам сеансов, подключенным к конечной точке.
Участники сессии AppleMIDI
Реализация AppleMIDI определяет два типа контроллеров сеанса: инициаторы сеанса и слушатели сеанса. Инициаторы сеанса отвечают за приглашение слушателей сеанса и отвечают за последовательность синхронизации часов. Инициаторы сеанса обычно могут быть слушателями сеанса, но некоторые устройства, такие как устройства iOS, могут быть только слушателями сеанса.
MIDI слияние
Устройства RTP-MIDI могут объединять различные потоки MIDI без необходимости в каком-либо конкретном компоненте, в отличие от устройств MIDI 1.0, которые требуют «объединения MIDI». Как видно на схеме, когда контроллер сеанса подключен к двум или более удаленным сеансам, он автоматически объединяет потоки MIDI, поступающие с удаленных устройств, без какой-либо конкретной настройки.
Разделение MIDI ("MIDI THRU")
Устройства RTP-MIDI могут дублировать потоки MIDI из одного сеанса в любое количество удаленных сеансов без необходимости использования каких-либо устройств поддержки «MIDI THRU». Когда сеанс RTP-MIDI связан с двумя или более удаленными сеансами, все удаленные сеансы получают копию данных MIDI, отправленных из источника.
Концепция распределенной коммутационной панели
Сеансы RTP-MIDI также могут предоставлять функцию «коммутационной панели», для которой требуется отдельное аппаратное устройство с подключениями MIDI 1.0. Коммутационная панель MIDI 1.0 - это аппаратное устройство, которое обеспечивает динамическое соединение между набором MIDI-входов и набором MIDI-выходов, большую часть времени в форме матрицы. Концепция «динамического» соединения отличается от классического использования линий MIDI 1.0, когда кабели соединялись «статически» между двумя устройствами. Вместо того, чтобы устанавливать путь данных между устройствами в виде кабеля, коммутационная панель становится центральной точкой, где подключаются все MIDI-устройства. Программное обеспечение в коммутационной панели MIDI сконфигурировано так, чтобы определять, какой MIDI-вход на какой MIDI-выход, и пользователь может изменить эту конфигурацию в любой момент, без необходимости отсоединять кабели MIDI DIN.
Аппаратные модули "patchbay" больше не нужны с RTP-MIDI, благодаря концепции сеанса. Сеансы, по определению, представляют собой виртуальные пути, установленные по сети между двумя портами MIDI. Никакого специального программного обеспечения для выполнения функций коммутационной панели не требуется, поскольку процесс настройки точно определяет назначения для каждого MIDI-потока, создаваемого данным MIDI-устройством. Затем можно в любой момент изменить эти виртуальные пути, просто изменив IP-адреса назначения, используемые каждым инициатором сеанса. Сформированная таким образом конфигурация «патча» может храниться в энергонезависимой памяти, чтобы позволить патчу автоматически преобразовываться при включении питания установки, но они также могут быть изменены напрямую, например, с помощью программного инструмента RTP-MIDI Manager или с помощью Панели управления драйверами RTP-MIDI, на уровне RAM.
Термин «распределенная коммутационная панель» исходит из того факта, что различные устройства RTP-MIDI могут быть распределены географически по всей конфигурации MIDI, в то время как коммутационная панель MIDI 1.0 заставляла различные MIDI-устройства физически располагаться непосредственно вокруг самого коммутационного модуля.
Протокол сеанса Apple
Документ RFC6295 предлагает использовать протоколы SDP (протокол описания сеанса) и SIP (протокол инициации сеанса) для установления и управления сеансами между партнерами RTP-MIDI. Однако эти два протокола довольно сложно реализовать, особенно в небольших системах, тем более, что они не ограничивают ни один из параметров, перечисленных в дескрипторе сеанса, например частоту выборки, которая, в свою очередь, определяет все поля, связанные с данными синхронизации, как в заголовках RTP, так и в RTP. -MIDI полезная нагрузка. Более того, документ RFC6295 предлагает использовать только эти протоколы, разрешая использование любого другого протокола, что приводит к потенциальной несовместимости между поставщиками.
Apple решила создать свой собственный протокол, наложив все параметры, связанные с синхронизацией, такие как частота дискретизации. Этот протокол сеанса называется «AppleMIDI» в программном обеспечении Wireshark. Для управления сеансом по протоколу AppleMIDI требуется два порта UDP, первый называется «Порт управления», а второй - «Порт данных». При использовании в многопоточной реализации только порт данных требует потока «реального времени», другим портом может управлять поток с обычным приоритетом. Эти два порта должны быть расположены в двух последовательных местах (n / n + 1); первый может быть любым из 65536 возможных портов.
Нет ограничений на количество сеансов, которые могут быть открыты одновременно на наборе портов UDP с протоколом AppleMIDI. Можно либо создать одну группу портов для каждого диспетчера сеансов, либо использовать только одну группу для нескольких сеансов, что ограничивает объем памяти в системе. В этом последнем случае стек IP предоставляет ресурсы для идентификации партнеров по их IP-адресам и номерам портов. Эта функция называется «повторное использование сокета» и доступна в большинстве современных реализаций IP.
Все сообщения протокола AppleMIDI используют общую структуру из 4 слов по 32 бита с заголовком, содержащим два байта со значением 255, за которыми следуют два байта, описывающие значение сообщения:
Описание | Определение заголовка Wireshark | Значение поля (шестнадцатеричное) | Значение поля (символы) |
---|---|---|---|
Приглашение | APPLEMIDI_COMMAND_INVITATION | 0x494e | В |
Приглашение принято | APPLEMIDI_COMMAND_INVITATION_ACCEPTED | 0x4f4b | ОК |
Приглашение отклонено | APPLEMIDI_COMMAND_INVITATION_REJECTED | 0x4e4f | Нет |
Заключительная сессия | APPLEMIDI_COMMAND_ENDSESSION | 0x4259 | ОТ |
Синхронизация часов | APPLEMIDI_COMMAND_SYNCHRONIZATION | 0x434b | СК |
Синхронизация журналов | APPLEMIDI_COMMAND_RECEIVER_FEEDBACK | 0x5253 | RS |
Битрейт | APPLEMIDI_COMMAND_BITRATE_RECEIVE_LIMIT | 0x524c | RL |
Эти сообщения управляют конечным автоматом, связанным с каждым сеансом. Например, этот конечный автомат запрещает любой обмен MIDI-данными до тех пор, пока сеанс не достигнет «открытого» состояния.
Последовательность приглашения
Открытие сеанса начинается с приглашения. Первый партнер сеанса («Инициатор сеанса») отправляет сообщение IN в порт управления второго партнера. Они отвечают, отправляя сообщение ОК, если они соглашаются открыть сеанс, или сообщение НЕТ, если они не принимают приглашение. Если приглашение принято на порту управления, та же последовательность повторяется для порта данных. После того, как приглашения были приняты на обоих портах, конечный автомат переходит в фазу синхронизации.
Последовательность синхронизации
Последовательность синхронизации позволяет обоим участникам сеанса обмениваться информацией, относящейся к их локальным часам. Этот этап позволяет компенсировать задержку, вызванную сетью, а также поддерживать «будущую временную метку» (см. Раздел «Задержка» ниже).
Инициатор сеанса отправляет первое сообщение (с именем CK0) удаленному партнеру, указывая его местное время в 64 битах (обратите внимание, что это не абсолютное время, а время, связанное с локальной ссылкой, обычно указываемое в микросекундах с момента запуска ядро операционной системы). Это время выражается на основе тактовой частоты дискретизации 10 кГц (100 микросекунд на приращение). Удаленный партнер должен ответить на это сообщение сообщением CK1, содержащим его собственное местное время в 64 битах. Затем оба партнера узнают разницу между их соответствующими часами и могут определить смещение, применяемое к полям Timestamp и Deltatime в протоколе RTP-MIDI.
Инициатор сеанса завершает эту последовательность, отправляя последнее сообщение с именем CK2, содержащее местное время, когда он получил сообщение CK1. Этот метод позволяет вычислить среднюю задержку сети, а также компенсировать потенциальную задержку, вызванную медленным запуском потока, которая может возникать в операционных системах, не работающих в реальном времени, таких как Linux, Windows или OS X.
Apple рекомендует повторить эту последовательность несколько раз сразу после открытия сеанса, чтобы повысить точность синхронизации, в случае, если один из них был случайно задержан из-за временной перегрузки сети или пика задержки при активации потока.
Эта последовательность должна циклически повторяться, обычно от 2 до 6 раз в минуту, и всегда инициатором сеанса, чтобы поддерживать долгосрочную точность синхронизации за счет компенсации дрейфа локальных часов, а также для обнаружения потери партнера по связи. Партнер, не отвечающий на несколько сообщений CK0, должен считать, что удаленный партнер отключен. В большинстве случаев инициаторы сеанса переключают свой конечный автомат в состояние «Приглашение», чтобы автоматически восстановить связь, как только удаленный партнер повторно подключается к сети. Некоторые реализации, особенно на персональных компьютерах, также отображают предупреждающее сообщение и предлагают пользователю выбор между новой попыткой подключения или закрытием сеанса.
Обновление журнала
Механизм журналирования позволяет обнаруживать потерю сообщений MIDI и позволяет приемнику генерировать недостающие данные без необходимости повторной передачи. Журнал хранит в памяти «MIDI-образы» для разных участников сеанса в разные моменты времени. Однако бесполезно хранить в памяти данные журнала, соответствующие событиям, правильно принятым партнером по сеансу. Затем каждый партнер циклически отправляет другому партнеру сообщение RS, указывая последний правильно полученный порядковый номер, другими словами, без какого-либо промежутка между двумя порядковыми номерами. Затем отправитель может при необходимости освободить память, содержащую старые данные журналирования.
Отключение партнера по сеансу
Партнер по сеансу может в любой момент попросить покинуть сеанс, что в ответ закроет сеанс. Это делается с помощью сообщения BY. Когда партнер по сеансу получает это сообщение, он немедленно закрывает сеанс с удаленным партнером, который отправил сообщение, и освобождает все ресурсы, выделенные для этого сеанса. Следует отметить, что это сообщение может быть отправлено инициатором сеанса или слушателем сеанса («приглашенным» партнером).
Задержка
Наиболее частая проблема, связанная с RTP-MIDI, связана с проблемами задержки, общей проблемой для цифровых аудио рабочих станций, в основном потому, что она использует стек IP. Однако легко показать, что правильно запрограммированное приложение или драйвер RTP-MIDI не демонстрирует большей задержки, чем другие методы связи.
Кроме того, RTP-MIDI, как описано в RFC 6295 содержит механизм компенсации задержки. Похожий механизм присутствует в большинстве плагинов, которые могут информировать хост о задержке, которую они добавляют к пути обработки. Затем хост может заранее отправить сэмплы в плагин, чтобы сэмплы были готовы и отправлены синхронно с другими аудиопотоками. Механизм компенсации, описанный в RF6295, использует систему относительных отметок времени, основанную на дельтатиме MIDI, как описано в [22]. Каждое MIDI-событие, передаваемое в полезной нагрузке RTP, имеет начальное значение дельтатиметра, связанное с текущим источником времени полезной нагрузки, определенным полем Timestamp в заголовке RTP.
Каждое MIDI-событие в полезной нагрузке RTP-MIDI может быть строго синхронизировано с глобальными часами. Точность синхронизации напрямую зависит от источника синхронизации, определенного при открытии сеанса RTP-MIDI. RFC 6295 дает несколько примеров, основанных на часах дискретизации звука, чтобы получить точную временную метку MIDI-событий. Реализация Apple RTP-MIDI, как и все другие связанные реализации, такие как драйвер rtpMIDI для Windows или встроенных систем KissBox, использует фиксированную тактовую частоту 10 кГц вместо частоты дискретизации звука. Таким образом, точность синхронизации всех событий MIDI составляет 100 микросекунд для этих реализаций.
Часы отправителя и получателя синхронизируются при запуске сеанса, и они поддерживаются синхронизированными в течение всего периода сеанса с помощью регулярных циклов синхронизации, контролируемых инициаторами сеанса. Этот механизм может компенсировать любую задержку, от нескольких сотен микросекунд, как в приложениях LAN, до секунд. Он может компенсировать задержку, вызванную Интернетом, например, позволяя исполнять музыкальные произведения в реальном времени.
Однако этот механизм в основном предназначен для предварительно записанных MIDI-потоков, например, исходящих от трека секвенсора. Когда RTP-MIDI используется для приложений реального времени (например, управление устройствами с клавиатуры, совместимой с RTP-MIDI [23]), deltatime обычно устанавливается на конкретное значение 0, что означает, что связанное событие MIDI должно интерпретироваться, как только оно получено). При таком сценарии использования описанный ранее механизм компенсации задержки использовать нельзя.
Таким образом, полученная задержка напрямую связана с различными сетевыми компонентами, участвующими в пути связи между устройствами RTP-MIDI:
- Время обработки MIDI-приложения
- Время обработки стека IP-связи
- Время пересылки пакетов сетевых коммутаторов / маршрутизаторов
Время обработки заявки
Время обработки приложения обычно строго контролируется, поскольку задачи MIDI чаще всего выполняются в реальном времени. В большинстве случаев задержка напрямую связана с задержкой потока, которую можно получить в данной операционной системе, обычно не более 1-2 мс в системах Windows и Mac OS. Системы с ядром реального времени могут достичь гораздо лучших результатов, вплоть до 100 микросекунд. Это время можно считать постоянным, независимо от канала связи (MIDI 1.0, USB, RTP-MIDI и т. Д.), Поскольку потоки обработки работают на другом уровне, чем потоки / задачи, связанные с обменом данными.
Время обработки IP-стека
Время обработки IP-стека является наиболее важным, поскольку процесс связи находится под управлением операционной системы. Это применимо к любому протоколу связи, связанному с IP или нет, поскольку большинство операционных систем, включая Windows, Mac OS или Linux, не разрешают прямой доступ к адаптеру Ethernet. В частности, распространенной ошибкой является объединение «сырых сокетов» с «прямым доступом к сети»; сокеты являются точкой входа для отправки и получения данных по сети в большинстве операционных систем. «Сырой сокет» - это сокет, который позволяет приложению отправлять любой пакет с использованием любого протокола. Затем приложение отвечает за построение телеграммы в соответствии с заданными правилами протокола, в то время как «прямой доступ» потребует доступа на уровне системы, который ограничен ядром операционной системы. Пакет, отправленный с использованием сырого сокета, может быть задержан операционной системой, если сетевой адаптер в настоящее время используется другим приложением. Таким образом, IP-пакет может быть отправлен в сеть до пакета, относящегося к необработанному сокету. С технической точки зрения доступ к данной сетевой карте контролируется «семафорами».[24]
Стеки IP должны соотносить адреса Ethernet (MAC-адрес) и IP-адреса, используя определенный протокол с именем ARP. Когда приложение RTP-MIDI хочет отправить пакет на удаленное устройство, оно должно сначала найти его в сети, поскольку Ethernet не понимает концепций, связанных с IP, чтобы создать путь передачи между маршрутизаторами / коммутаторами. Это выполняется автоматически стеком IP, отправляя сначала запрос ARP (протокол распознавания адресов). Когда устройство назначения распознает свой собственный IP-адрес в пакете ARP, оно отправляет ответ ARP со своим MAC-адресом. Затем стек IP может отправить пакет RTP-MIDI. Следующим пакетам RTP-MIDI больше не нужна последовательность ARP, если только канал не становится неактивным на несколько минут, что очищает запись ARP в таблице маршрутизации отправителя.
Эта последовательность ARP может занять несколько секунд, что, в свою очередь, может привести к заметной задержке, по крайней мере, для первого пакета RTP-MIDI. Однако реализация Apple решила эту проблему элегантным способом, используя протокол управления сеансом. Протокол сеанса использует те же порты, что и сам протокол RTP-MIDI. Затем последовательность ARP выполняется во время последовательности инициации сеанса. Когда приложение RTP-MIDI хочет отправить первый пакет RTP-MIDI, таблицы маршрутизации компьютера уже инициализированы с правильными MAC-адресами назначения, что позволяет избежать любой задержки для первого пакета.
Помимо последовательности ARP, самому стеку IP требуются вычисления для подготовки заголовков пакетов, таких как заголовок IP, заголовок UDP и заголовок RTP. В современных процессорах эта подготовка выполняется очень быстро и занимает всего несколько микросекунд, что ничтожно мало по сравнению с задержкой самого приложения. Как описано ранее, после подготовки пакет RTP-MIDI может быть задержан только тогда, когда он пытается достичь сетевого адаптера, если адаптер уже передает другой пакет, независимо от того, является ли сокет IP-адресом или «сырым». Однако задержка, вводимая на этом уровне, обычно чрезвычайно мала, поскольку потоки драйвера, отвечающие за сетевые адаптеры, имеют очень высокий приоритет. Более того, большинство сетевых адаптеров имеют буферы FIFO на аппаратном уровне, поэтому пакеты могут храниться для немедленной передачи в самом сетевом адаптере без необходимости сначала запускать поток драйвера. A method to help keep the latency related to "adapter access competition" as low as possible is to reserve the network adapter for MIDI communication only, and use a different network adapter for other network usages like file sharing or Internet browsing.
Network components routing time
The different components used to transmit Ethernet packets between the computers, whatever the protocols being used, introduce latency too. All modern network switches use the "store and forward" technology, in which packets are stored in the switch before they are sent to the next switch. However, the switching times are most often negligible. For example, a 64-byte packet on 100Mbit/s network takes around 5.1 microseconds to be forwarded by each network switch. A complex network with 10 switches on a given path introduces then a latency of 51 microseconds.
The latency is however directly related to the network load itself, since the switches will delay a packet until the previous one is transmitted. The computation/measure of the real latency introduced by the network components can be a hard task, and will involve representative usecases, for example, measuring the latency between two networked devices connected to the same network switch will always give excellent results. As said in the previous section, one solution to limit the latency introduced by the network components is to use separate networks. However, this is far less critical for network components than for network adapters in computers.
Expected latency for real-time applications
As it can be seen, the exact latency obtained for RTP-MIDI link depends on many parameters, most of them being related to the operating systems themselves. Measurements made by the different RTP-MIDI actors give latency times from a few hundreds of microseconds for embedded systems using real-time operating systems, up to 3 milliseconds when computers running general purpose operating systems are involved.
Latency enhancement (sub millisecond latency)
В AES started a working group named SC-02-12H[25] in 2010 in order to demonstrate the capability of using RTP payloads in IP networks for very low latency applications. The draft proposal issued by the group in May 2013 demonstrates that it is possible to achieve RTP streaming for live applications, with a latency value as low as 125 microseconds.
Configuration
The other most common concern related to RTP-MIDI is the configuration process, since the physical connection of a device to a network is not enough to ensure communication with another device. Since RTP-MIDI is based on IP protocol stack, the different layers involved in the communication process must be configured, such as IP address and UDP ports. In order to simplify this configuration, different solutions have been proposed, the most common being the "Zero Configuration" set of technologies, also known as Zeroconf.
RFC 3927 [26] describes a common method to automatically assign IP addresses, which is used by most RTP-MIDI compatible products. Once connected to the IP network, such a device can assign itself an IP address, with automatic IP address conflict resolution. If the device follows port assignation recommendation from the RTP specification, the device becomes "Plug&Play" from the network point of view. It is then possible to create an RTP-MIDI network entirely without needing to define any IP address and/or UDP port numbers. It must be noted however that these methods are generally reserved for small setups. Complete automation of the network configuration is generally avoided on big setups, since the localization of faulty devices can become complex, because there will be no direct relationship between the IP address which has been selected by the Zeroconf system and the physical location of the device. A minimum configuration would be then to assign a name to the device before connecting it to the network, which voids the "true Plug&Play" concept in that case.
One must note that the "Zero Configuration" concept is restricted to network communication layers. It is technically impossible to perform the complete installation of any networked device (related to MIDI or not) just by abstracting the addressing layer. A practical usecase which illustrates this limitation is an RTP-MIDI sound generator that has to be controlled from a MIDI master keyboard connected to an RTP-MIDI interface. Even if the sound generator and the MIDI interface integrate the "Zero Configuration" services, they are unable to know by themselves that they need to establish a session together, because the IP configuration services are acting at different levels. Any networked MIDI system, whatever the protocol used to exchange MIDI data (based on IP or not), then requires the mandatory use of a configuration tool to define the exchanges that have to take place between the devices after they have been connected to the network. This configuration tool can be an external management tool running on a computer, or be embedded in the application software of a device in form of a configuration menu if the device integrates a Human-Machine Interface.
Compatibility with MIDI 2.0
The MIDI Manufacturers Association has announced in January 2019 that a major evolution of MIDI protocol, called MIDI 2.0[27] was entering in final prototyping phase.
MIDI 2.0 relies heavily on MIDI-CI extension, used for protocol negotiation (identification of MIDI 1.0 and MIDI 2.0 devices to allow protocol switchover). RTP-MIDI fully supports MIDI-CI protocol, since it uses MIDI 1.0 System Exclusive even on MIDI 2.0 devices.
An evolution of RTP-MIDI protocol to include MIDI 2.0 has been presented to the MMA and is currently being discussed in the MIDI 2.0 working group. The enhanced protocol supports both MIDI 1.0 and MIDI 2.0 data format in parallel (MIDI 2.0 uses 32-bit based packets, while MIDI 1.0 uses 8-bit based packets)
Companies/Projects using RTP-MIDI
- Apple Computer (RTP-MIDI driver integrated in Mac OS X and iOS for the whole range of products) - RTP-MIDI over Ethernet and WiFi
- Yamaha (Motif synthesizers, UD-WL01 adapter[28]) - RTP-MIDI over Ethernet and WiFi
- Behringer (X-Touch Control Surface)[29]
- KissBox (RTP-MIDI interfaces with MIDI 1.0, LTC, I/O and ArtNet, VST plugins for hardware synthesizer remote control)
- Tobias Erichsen Consulting (Free RTP-MIDI driver for Windows / Utilities)
- GRAME (Linux driver)
- HRS (MIDI Timecode distribution on Ethernet / Synchronization software)
- iConnectivity (Audio & MIDI interfaces with USB and RTP-MIDI support)
- Merging Technologies (Horus, Hapi, Pyramix, Ovation) - RTP-MIDI for LTC/MTC, MIDI DIN, and MicPre control [30]
- Zivix PUC (Wireless RTP-MIDI interface for iOS devices)[31]
- Arduino-AppleMIDI-Library[32]
- MIDIbox[33]
- Cinara (MIDI interface with USB and RTP-MIDI support)[34]
- McLaren Labs rtpmidi for Linux[35]
- BEB (DSP modules for modular synthesizers based on RTP-MIDI backbone)[36]
- Axoloti (Hardware open-source synthesizer with RTP-MIDI connectivity)[37]
использованная литература
- ^ An RTP Payload format for MIDI. The 117th Convention of the Audio Engineering Society, October 28-31, 2004, San Francisco, CA.
- ^ RTP Payload format for MIDI - RFC 4695
- ^ Implementation Guide for RTP MIDI. RFC 4696
- ^ RTP Payload format for MIDI - RFC 6295
- ^ [1]'About RTP-MIDI' page on MMA website
- ^ Kiss-Box website (hardware devices using RTP-MIDI protocol)
- ^ [2] RTP-MIDI driver for Windows
- ^ https://www.tobias-erichsen.de/software/rtpmidi.html
- ^ http://www.grame.fr/ressources/publications/falquet05.pdf Implementing a MIDI stream over RTP
- ^ http://www.grame.fr/ressources/publications/TR-050622.pdf Recovery journal and evaluation of alternative proposal
- ^ https://github.com/ravelox/pimidi RTP-MIDI implementation dedicated to Raspberry PI platform
- ^ http://manpages.ubuntu.com/manpages/oneiric/man1/midistream.1.html#contenttoc0 В архиве 2015-05-18 at the Wayback Machine User's manual of RTP-MIDI object called "midistream" under Linux Ubuntu
- ^ support.apple.com/kb/HT4106 Apple page about USB MIDI connectivity problems
- ^ https://github.com/jdachtera/node-rtpmidi
- ^ http://www.humatic.de/htools/nmj/
- ^ [3] Website of open-source WinRTP-MIDI project
- ^ RTP-MIDI/AppleMIDI library for Arduino
- ^ MIDIbox forum announcement of RTP-MIDI support in MIOS
- ^ https://gist.github.com/DatanoiseTV/6a59fc66517fbd923ed9 Node.js extension to provide RTP-MIDI connection to Axoloti
- ^ https://github.com/jpommerening/midikit/blob/master/driver/common/rtpmidi.c Cross-platform unified MIDI library with integrated RTP-MIDI support
- ^ [4] IEEE Standard for Layer 3 Transport Protocol for Time-Sensitive Applications in Local Area Networks
- ^ MIDI 1.0 Specification - Section 4 - Standard MIDI Files
- ^ «Архивная копия». Архивировано из оригинал on 2013-03-16. Получено 2013-05-10.CS1 maint: заархивированная копия как заголовок (ссылка на сайт) RTP-MIDI expansion kit for CME keyboards
- ^ http://en.wikibooks.org/wiki/Operating_System_Design/Processes/Semaphores Operating systems semaphores
- ^ http://www.x192.org/about AES standard group for audio interoperability over IP networks
- ^ Automatic configuration of IPv4 Link-Local addresses - RFC3927
- ^ https://www.midi.org/articles-old/the-midi-manufacturers-association-mma-and-the-association-of-music-electronics-industry-amei-announce-midi-2-0tm-prototyping
- ^ http://usa.yamaha.com/products/musical-instruments/keyboards/accessories/usb-devices/ud-wl01/?mode=model
- ^ http://www.behringer.com/EN/Products/X-TOUCH.aspx
- ^ http://www.merging.com/products/networked-audio
- ^ http://www.indiegogo.com/projects/puc-free-your-midi-from-the-tyranny-of-wires-the-only-solution-for-midi-ios
- ^ "lathoub/Arduino-AppleMidi-Library". GitHub. Получено 2016-05-28.
- ^ MIDIbox homepage
- ^ Cinara homepage
- ^ McLaren Labs
- ^ HorusDSP Homepage
- ^ Axoloti main page