In diesem Artikel wird die allgemeine MIDI-Architektur beschrieben, unabhängig von einer Plattformimplementierung, API oder platformspezifischen Funktionen.
Schlüsselkonzepte
Ereignisse
Das MIDI-Protokoll ist für die ereignisbasierte Kommunikation konzipiert. Ein Ereignis ist ein Hinweis darauf, dass etwas zu einer bestimmten Zeit passiert ist oder passieren wird. MIDI-Ereignisse werden durch Nachrichten dargestellt, also atomare Informationspakete.
Transport
MIDI-Nachrichten werden über eine Transportschicht, abgekürzt Transportschicht, codiert und gesendet. Diese sendet die Roh-MIDI-Daten an den Empfänger, der die Daten dann in Nachrichten decodiert.
Hardwarebasierte MIDI-Transporte:
- MIDI 1.0-Stromschleife mit 5‑poligem DIN-Anschluss
- USB
- Bluetooth Low Energy (BLE)
Nachrichtendarstellung
Eine MIDI-Transportspezifikation beschreibt, wie Nachrichten übertragen werden. Obwohl die Verpackung von Nachrichten auf der untersten Ebene transportspezifisch ist, können Anwendungen auf einer höheren Ebene eine zeitgeordnete Sequenz von Nachrichten als abgegrenzten Bytestream betrachten. Das ist möglich, da jede Nachricht genügend Informationen enthält, um die Gesamtlänge der Nachricht zu bestimmen, sofern der Beginn der Nachrichtengrenze bekannt ist.
Die meisten MIDI-Nachrichten sind kurz (ein bis drei Byte), es gibt jedoch die Möglichkeit, über SysEx längere Nachrichten zu senden.
Zeitstempel
Ein Zeitstempel ist ein optionales Label, das einer Nachricht je nach Transport entweder beim Senden oder beim Empfangen hinzugefügt wird. Der Zeitstempel wird in Zeiteinheiten wie Sekunden oder Ticks ausgedrückt.
Wenn kein expliziter Zeitstempel vorhanden ist, muss das System den Zeitstempel der unmittelbar vorhergehenden Nachricht oder die aktuelle Uhrzeit einfügen. Die Genauigkeit dieser Zeitstempel, ob explizit oder implizit, ist ein wichtiger Aspekt der Zuverlässigkeit eines MIDI-basierten Systems.
Zeitstempel sind nicht Teil des MIDI 1.0-Protokolls. Sie werden oft als Teil einer plattformspezifischen API hinzugefügt. Der BLE-Transport enthält Zeitstempel, die das Timing der einzelnen Nachrichten angeben, die in einem BLE-Paket gesendet werden.
Geräte
Ein Peripheriegerät bietet Eingabe-/Ausgabefunktionen (I/O) für einen Computer. Die Begriffe MIDI-Peripheriegerät und MIDI-Gerät beziehen sich in der Regel auf jedes Hardware- oder Softwaremodul, das das MIDI-Protokoll unterstützt. In diesem Dokument bezieht sich MIDI-Peripheriegerät auf das physische Gerät und MIDI-Gerät beschreibt das Modul, das MIDI tatsächlich implementiert.
Ports
Ein Port ist eine Schnittstelle zwischen Computern und Peripheriegeräten.
MIDI 1.0 verwendet eine 5‑polige DIN-Buchse als Port. Jeder Port ist entweder OUT (Quelle von MIDI-Daten), IN (Senke für MIDI-Daten) oder THRU (ein IN, das direkt an ein OUT weitergeleitet wird).
Andere Transportprotokolle wie USB und BLE erweitern das Portkonzept.
Ein MIDI-Gerät hat mindestens einen OUT-Port, einen IN-Port oder beides.
Das MIDI-Gerät liefert Nachrichtenstreams, die an jedem OUT-Port stammen, und empfängt Nachrichtenstreams, die an jedem IN-Port ankommen. Die Begriffe IN und OUT beziehen sich natürlich auf einen Port. Aus der Sicht des anderen Ports gilt der umgekehrte Begriff.
Verbindung
Beim MIDI 1.0-Transport ist ein OUT-Port aufgrund der Art der Stromschleife maximal mit einem IN- oder THRU-Port verbunden. Bei USB- und BLE-Transporten gilt das auch auf der untersten Schicht. Eine Implementierung kann den Nachrichtenstream jedoch so neu formatieren, dass er an mehrere IN-Ports gesendet werden kann.
Kabel
Ein MIDI 1.0-Kabel ist das physische Kabelbündel, das einen OUT-Port mit einem IN- oder THRU-Port verbindet. Das Kabel überträgt nur Daten.
Hinweis:Es gibt nicht standardmäßige MIDI-Modifikationen, bei denen die beiden nicht verwendeten Pins mit Strom versorgt werden. Dies wird als Phantomspeisung bezeichnet.
Ein USB-Kabel ist ähnlich, mit der Ausnahme, dass es eine Vielzahl von Anschlusstypen gibt und das Konzept IN/OUT/THRU durch die Rolle „Host/Peripheriegerät“ ersetzt wird.
Im USB-Host-Modus versorgt das Hostgerät das MIDI-Peripheriegerät mit Strom. Die meisten kleinen MIDI-Peripheriegeräte benötigen eine USB-Ladeeinheit (100 mA) oder weniger. Einige größere Peripheriegeräte oder Peripheriegeräte mit Audioausgang oder Beleuchtung benötigen jedoch mehr Strom, als das Hostgerät liefern kann. Wenn Probleme auftreten, versuchen Sie es mit einem anderen MIDI-Peripheriegerät oder einem USB-Hub mit Stromversorgung.
Kanal
Jeder MIDI-Nachrichtenstream wird auf 16 Kanäle aufgeteilt. Die meisten Nachrichten sind an einen bestimmten Kanal gerichtet, es gibt aber auch nicht kanalspezifische Nachrichtentypen. Die Kanäle sind normalerweise von 1 bis 16 nummeriert, werden aber durch Kanalwerte von 0 bis 15 dargestellt.
Wenn die Anwendung mehr als 16 Kanäle oder einen höheren Durchsatz benötigt, als ein Nachrichtenstream unterstützen kann, müssen mehrere Ports verwendet werden.
Bei MIDI 1.0 wird dies durch mehrere Kabel erreicht, die Portpaare verbinden.
Beim MIDI-over-USB-Transport kann ein einzelner USB-Endpunkt mehrere Ports unterstützen, die jeweils durch eine Kabelnummer [sic] gekennzeichnet sind. Gemäß der USB-MIDI-Spezifikation identifiziert die Kabelnummer den virtuellen Port innerhalb des Endpunkts.
Hinweis:Portnummer wäre ein genauerer Begriff, da damit ein Port identifiziert wird.
So kann ein einzelnes physisches USB-Kabel mehr als einen Satz von 16 Kanälen übertragen.
Plattformimplementierung
Wie bereits in der Einführung erwähnt, gelten diese allgemeinen MIDI-Konzepte für alle Implementierungen. Eine Interpretation der Konzepte auf der Android-Plattform findest du im
Android MIDI-Nutzerhandbuch für android.media.midi
.