Architektura MIDI

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

Kluczowych pojęć

Wydarzenia

Protokół MIDI jest przeznaczony do komunikacji opartej na zdarzeniach. Zdarzenie to informacja o tym, że coś się stało lub stanie w określonym czasie. Zdarzenia MIDI są reprezentowane przez wiadomości, czyli atomowe pakiety informacji.

Transport

Komunikaty MIDI są kodowane i przesyłane za pomocą warstwy transportowej (w skrócie transport), która wysyła nieprzetworzone dane MIDI do odbiorcy. Ten dekoduje je w komunikaty.

Do przesyłania danych MIDI za pomocą sprzętu należą:

  • MIDI 1.0 z pętlą prądową i złączem 5-stykowym DIN
  • USB
  • Bluetooth Low Energy (BLE)

Reprezentacja wiadomości

Specyfikacja transportu MIDI opisuje sposób przesyłania komunikatów. Chociaż pakowanie wiadomości jest specyficzne dla transportu na najniższym poziomie, na wyższym poziomie aplikacje mogą uznać uporządkowaną czasowo sekwencję wiadomości za wyznaczony strumień bajtów. Jest to możliwe, ponieważ każda wiadomość zawiera wystarczającą ilość informacji, aby określić łączną długość wiadomości, pod warunkiem że znany jest początek jej granicy.

Większość komunikatów MIDI jest krótka (1–3 bajty), ale można też wysyłać dłuższe komunikaty za pomocą SysEx.

Sygnatury czasowe

Znak czasowy to opcjonalna etykieta dołączona do wiadomości w momencie jej wysłania lub otrzymania, w zależności od transportu. Sygnatura czasowa jest wyrażona w jednostkach czasu, takich jak sekundy lub ticki.

W przypadku braku wyraźnej sygnatury czasowej system musi zastąpić ją sygnaturą czasową bezpośrednio poprzedzającej wiadomości lub bieżącą sygnaturą czasową. Dokładność tych sygnałów czasowych, czy jawnych, czy ukrytych, jest ważnym aspektem niezawodności systemu opartego na protokole MIDI.

Czas stempla nie jest częścią protokołu MIDI 1.0. Często są one dodawane w ramach interfejsu API konkretnej platformy. Transport BLE ma sygnatury czasowe, które wskazują czas wysyłania poszczególnych wiadomości w ramach jednego pakietu BLE.

Urządzenia

Urządzenie peryferyjne zapewnia komputerowi możliwość przesyłania danych wejściowych i wyjściowych. Terminy peryferia MIDIurządzenie MIDI zwykle odnoszą się do dowolnego modułu sprzętowego lub programowego, który obsługuje protokół MIDI. W tym dokumencie urządzenie peryferyjne MIDI odnosi się do fizycznego elementu, a urządzenie MIDI opisuje moduł, który faktycznie implementuje MIDI.

Porty

Port to punkt styku między komputerem a urządzeniami peryferyjnymi.

MIDI 1.0 używa 5-stykowego gniazda DIN jako portu. Każdy port jest albo OUT (źródło danych MIDI), albo IN (miejsce docelowe danych MIDI), albo THRU (co oznacza IN, który jest bezpośrednio kierowany do OUT).

Inne transporty, takie jak USB i BLE, rozszerzają koncepcję portu.

Urządzenie MIDI ma co najmniej 1 port OUT, 1 port IN lub oba te porty.

Urządzenie MIDI dostarcza strumienie wiadomości pochodzące z każdego portu OUT i odbiera strumienie wiadomości docierające do każdego portu IN. Terminy WEWY odnoszą się oczywiście do jednego portu; z perspektywy drugiego portu obowiązuje odwrotny termin.

Połączenie

W transporcie MIDI 1.0 port OUT łączy się z co najwyżej jednym portem IN lub THRU ze względu na charakter bieżącego pętli. W przypadku transportów USB i BLE jest to prawdą na najniższej warstwie, ale implementacja może ponownie sformatować strumień wiadomości, aby można było go przesyłać do wielu portów IN.

Kable

Kabel MIDI 1.0 to fizyczny pakiet przewodów, który łączy port OUT z portem IN lub THRU. Kabel przesyła tylko dane.

Uwaga: istnieją niestandardowe modyfikacje MIDI, które dostarczają zasilanie przez 2 nieużywane styki. Jest to tzw. moc pozorna.

Kabel USB działa podobnie, ale istnieje wiele typów złączy, a koncepcja WE/WY/PRZEZ jest zastąpiona rolą hosta/peryferyjnego urządzenia.

Podczas pracy w trybie hosta USB urządzenie hosta zasila urządzenie peryferyjne MIDI. Większość małych urządzeń MIDI wymaga 1 jednostki ładowania USB (100 mA) lub mniej. Jednak niektóre większe urządzenia peryferyjne lub urządzenia z wyjściami audio lub lampkami wymagają więcej energii niż może dostarczyć urządzenie hosta. Jeśli wystąpią problemy, spróbuj użyć innego urządzenia MIDI lub koncentratora USB z zasilaniem.

Kanał

Każdy strumień wiadomości MIDI jest multipleksowany na 16 kanałów. Większość wiadomości jest kierowana do konkretnego kanału, ale istnieją typy wiadomości, które nie są powiązane z kanałem. Konwencjonalnie kanały są numerowane od 1 do 16, ale reprezentowane przez wartości kanału od 0 do 15.

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

W MIDI 1.0 jest to realizowane za pomocą wielu kabli łączących pary portów.

W przypadku przesyłania MIDI przez USB jeden punkt końcowy USB może obsługiwać wiele portów, z których każdy jest identyfikowany przez numer kabla [sic]. Zgodnie ze specyfikacją USB MIDI numer kabla identyfikuje port wirtualny w urządzeniu końcowym.

Uwaga: numer portu byłby bardziej trafnym określeniem, ponieważ identyfikuje port.

Oznacza to, że jeden kabel USB może przenosić więcej niż 16 kanałów.

Implementacja na platformie

Jak wspomniano we wstępie, te ogólne koncepcje MIDI mają zastosowanie do wszystkich implementacji. Interpretację tych pojęć na platformie Androida znajdziesz w  przewodniku użytkownika Androida MIDI dla android.media.midi.