Architektura MIDI

W tym artykule opisano ogólną architekturę MIDI, niezależną od implementacji platformy, interfejsu API lub funkcji specyficznych dla platformy.

Kluczowe idee

Wydarzenia

Protokół MIDI przeznaczony jest do komunikacji opartej na zdarzeniach. Zdarzenie oznacza informację, że coś się wydarzyło lub wydarzy w określonym czasie. Zdarzenia MIDI są reprezentowane przez komunikaty , atomowe wiązki informacji.

Transport

Komunikaty MIDI są kodowane i dostarczane poprzez warstwę transportową , w skrócie transport , która wysyła surowe dane MIDI do odbiorcy, który następnie dekoduje dane w wiadomości.

Sprzętowe transporty MIDI obejmują:

Reprezentacja wiadomości

Specyfikacja transportu MIDI opisuje sposób przekazywania komunikatów. Chociaż na najniższym poziomie pakowanie komunikatów jest specyficzne dla transportu, na wyższym poziomie aplikacje mogą traktować uporządkowaną czasowo sekwencję komunikatów jako wyznaczony strumień bajtów . Jest to możliwe, ponieważ każdy komunikat zawiera wystarczającą ilość informacji, aby określić całkowitą długość komunikatu, pod warunkiem, że znany jest początek granicy komunikatu.

Większość komunikatów MIDI jest krótka (od jednego do trzech bajtów), istnieje jednak możliwość przesyłania dłuższych komunikatów za pośrednictwem SysEx .

Znaczniki czasu

Znacznik czasu to opcjonalna etykieta dołączana do wiadomości w momencie jej nadania lub po otrzymaniu, w zależności od sposobu transportu. Znacznik czasu wyrażany jest w jednostkach czasu, takich jak sekundy lub takty .

W przypadku braku wyraźnego znacznika czasu system musi zastąpić znacznik czasu bezpośrednio poprzedzającego komunikatu lub bieżący czas. Dokładność tych znaczników czasu, jawna lub ukryta, jest ważnym aspektem niezawodności systemu opartego na MIDI.

Sygnatury czasowe nie są częścią protokołu MIDI 1.0. Często są dodawane jako część interfejsu API specyficznego dla platformy. Transport BLE ma znaczniki czasu wskazujące czas wielu pojedynczych wiadomości wysyłanych w jednym pakiecie BLE.

Urządzenia

Urządzenie peryferyjne zapewnia możliwość wejścia/wyjścia (I/O) komputera. Terminy urządzenie peryferyjne MIDI i urządzenie MIDI powszechnie odnoszą się do dowolnego sprzętu lub modułu oprogramowania obsługującego protokół MIDI. W tym dokumencie urządzenie peryferyjne MIDI odnosi się do jednostki fizycznej, a urządzenie MIDI opisuje moduł, który faktycznie implementuje MIDI.

Porty

Port to punkt interfejsu pomiędzy komputerami i urządzeniami peryferyjnymi.

MIDI 1.0 wykorzystuje jako port żeńskie 5-pinowe gniazdo DIN. Każdy port to OUT (źródło danych MIDI), IN (ujście danych MIDI) lub THRU (co oznacza IN , które jest bezpośrednio kierowane do OUT ).

Inne transporty, takie jak USB i BLE, rozszerzają koncepcję portów .

Urządzenie MIDI ma co najmniej jeden port OUT , port IN lub oba.

Urządzenie MIDI dostarcza strumień(i) komunikatów pochodzących z każdego portu OUT i odbiera strumień(y) komunikatów docierających do każdego portu IN . Terminy IN i OUT odnoszą się oczywiście do jednego portu; z punktu widzenia drugiego portu obowiązuje termin odwrotny.

Połączenie

W transporcie MIDI 1.0 port OUT łączy się z co najwyżej jednym portem IN lub THRU ze względu na naturę pętli prądowej. W przypadku transportów USB i BLE to samo dotyczy najniższej warstwy, chociaż implementacja może ponownie kondycjonować strumień komunikatów, tak aby mógł być transmitowany do wielu portów IN .

Kable

Kabel MIDI 1.0 to fizyczna wiązka przewodów łącząca port OUT z portem IN lub THRU . Kabel przenosi tylko dane.

Uwaga: istnieją niestandardowe modyfikacje MIDI, które zapewniają zasilanie przez dwa nieużywane piny. Nazywa się to mocą fantomową .

Kabel USB jest podobny, z tą różnicą, że istnieje szeroka gama typów złączy, a koncepcja IN / OUT / THRU została zastąpiona rolą hosta/urządzenia peryferyjnego.

Podczas pracy w trybie hosta USB urządzenie hosta zasila urządzenie peryferyjne MIDI. Większość małych urządzeń peryferyjnych MIDI pobiera jedno obciążenie USB (100 mA) lub mniej. Jednak niektóre większe urządzenia peryferyjne lub urządzenia peryferyjne z wyjściem audio lub oświetleniem wymagają większej mocy, niż może dostarczyć urządzenie główne. Jeśli wystąpią problemy, wypróbuj inne urządzenie peryferyjne MIDI lub zasilany koncentrator USB.

Kanał

Każdy strumień komunikatów MIDI jest multipleksowany na 16 kanałów . Większość wiadomości jest kierowana do określonego kanału, ale istnieją typy wiadomości, które nie są specyficzne dla kanału. Konwencjonalnie kanały są ponumerowane od 1 do 16, chociaż są reprezentowane przez wartości kanałów od zera do 15.

Jeśli aplikacja wymaga więcej niż 16 kanałów lub większej przepustowości, niż może obsłużyć jeden strumień komunikatów, należy użyć wielu portów.

W MIDI 1.0 jest to realizowane poprzez wiele kabli łączących pary portów.

W transporcie MIDI przez USB pojedynczy punkt końcowy USB może obsługiwać wiele portów, każdy oznaczony numerem kabla [sic!]. Zgodnie ze specyfikacją USB MIDI numer kabla identyfikuje port wirtualny w punkcie końcowym.

Uwaga: numer portu byłby bardziej dokładnym terminem, biorąc pod uwagę, że identyfikuje port.

Zatem pojedynczy fizyczny kabel USB może przesyłać więcej niż jeden zestaw 16 kanałów.

Wdrożenie platformy

Jak zauważono we wstępie, te ogólne koncepcje MIDI mają zastosowanie do wszystkich implementacji. Interpretację pojęć na platformie Android można znaleźć w Podręczniku użytkownika Android MIDI dla android.media.midi .