MIDI

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

MIDI (Musical Instruments Digital Interface) ist ein zu Beginn der 1980er Jahre erfundenes Protokoll zum Übertragen von Steuerbefehlen zwischen elektronischen Musikinstrumenten wie Keyboards, Synthesizern, Samplern etc. und auch dem Computer. Zu Beginn war es für die Steuerung von monophonen Synthesizern erdacht worden, entwickelte sich dann aber weiter zum Standard für elektronische Musikinstrumente. Es ist in praktisch allen elektronischen Klangerzeugern verfügbar und wird sogar zur Steuerung von Mischpulten eingesetzt. Einige Computerspiele nutzten MIDI in den späten 1980ern, um sich zu vernetzen, weil sie noch keine serielle Schnittstelle hatten. Siehe das Programm MIDI-MAZE.

Prokotoll

Das Protokoll ist von der verwendeteten physikalischen Verbindung abhängig. In der ursprünglichen Version werden die Daten seriell mit 31250 Baud über eine Stromschleife mit 5 mA übertragen. Zur Vermeidung von Masseschleifen ist die Empfängerseite durch einen Hochgeschwindigkeits-Optokoppler (z.B. H11L1, 6N138) galvanisch vom Sender getrennt. Das Protokoll kann damit von allen gängigen UARTs eines PC generiert werden.

Hardware

Die Hardware-Spezifikation ist frei verfügbar[1]; die eigentliche MIDI-Spezifikation inzwischen auch[2].

Stecker

DIN

MIDI benutzt standardmäßige 5-polige DIN-Stecker, bei denen drei Pins belegt sind. Pins 4 und 5 übertragen das Signal, als Hin- und Rückleitung der Stromschleife; Pin 2 dient nur zur Abschirmung des Kabels. Es wird empfohlen, diese nicht dazu zu nutzen, die Massen der Geräte zu koppeln

Klinke

Später wurde auch eine SPEC für den 2.5 und auch den 3.5mm Klinkenstecker eingeführt, um den flachen Geräten gerecht zu werden. Dabei werden wieder 2 Kontakte verknüpft und die dritte dient als Abschirmung.

Beschaltung

Sender

Im Ruhezustand ist Pin 5 beim Sender offen, was als logisch "1" gilt; zur Erzeugung einer logischen "0" muss er Pin 5 auf Masse schalten:

MIDI-Sender.svg

Die Widerstände begrenzen den Strom, sowohl für den normalen Betrieb, als auch im Falle eines Kurzschlusses (in diesem Fall muss R2 gut 100 mA vertragen - bei o.g. Dimensionierung etwa 75mA/250mW). Wenn nur eine 5V-Spannungsversorgung zur Verfügung steht, müssen R1 und R2 durch jeweils 220 Ω ersetzt werden.

Wenn der TXD-Pin des Mikrocontrollers nicht als Open-Drain konfiguriert werden kann, müssen die I/O-Spannung des Mikrocontrollers und die Versorgungsspannung an R2 übereinstimmen. Wenn der TXD-Pin die gut 5 mA Strom nicht verträgt, muss das Signal durch einen Puffer (z.B. 74AHC1G07 oder -125) zwischen TXD und R1 verstärkt werden.

Empfänger

Der Empfänger muss den Strom, der zwischen Pins 4 und 5 fließt, auswerten. Zur Vermeidung eine Masseschleife darf Pin 2 nicht direkt mit der Masse des Empfängers verbunden werden:

MIDI-Empfänger.svg

VCC ist 3,3 V oder 5 V, R1 dient zur Strombegrenzung, D1 schützt die LED des Optokopplers vor einer zu hohen Rückwärtsspannung.

Andere häufig verwendete Optokoppler sind 6N137 oder 6N138, die allerdings eine Versorgungsspannung von 5 V voraussetzen:

MIDI-Empfänger-6N137.svg MIDI-Empfänger-6N138.svg

Zur Verbesserung der EMI/EMC-Eigenschaften kann es notwendig sein, zusätzliche Kondensatoren und Filter einzusetzen.[1]

Probleme

Auflösung

MIDI wurde ursprünglich im Jahre 1982 von der Firma Roland eingeführt und ist aus heutiger Sicht veraltet. Das damals definierte Protokoll wurde für Einzelstimmengeräte erdacht und gestattet lediglich das Senden von 7-Bit-breiten Controllerwerten auf vergleichsweise geringen Geschwindigkeiten, wodurch Lautstärke und Stimmformung nur sehr grob eingestellt- und nicht ohne hörbare Stufen verändert ("gefaded") werden können. Um dem abzuhelfen, werden die empfangenen Controllerwerte im Endgerät meistens geglättet, was aber zu weiteren Problemen führt. Für einige wenige Controller wurden zudem Erweiterungen auf 14 Bits eingeführt.[3]

MIDI 2.0 bringt nun Controller-Auflösungen bis 16Bit.

Geschwindigkeit

Was die Übertragungsgeschwindigkeit anbetrifft, sind die ca. 31 kHz der physikalischen Schnittstelle nach wie vor nicht geeignet, um viele Kanäle zu bedienen und mehrere gleichzeitige Ereignisse, wie z.B. einen beidhändigen Akkordanschlag angemessen zu beschreiben:

Ein MIDI-Ereignis benötigt mindestens 2 Bytes, wodurch 8 Finger auch ohne irgendwelche zusätzlichen Controllerwerte bereits 16 MIDI-Bytes erzeugen, was zu einer ungewollten Latenz von 6 ms für den letzen Wert gegenüber dem ersten führt. Mit kombinierten Controllerwerten zur Einstellung der Stimme inklusive "NOTE ON", "VELOCITY", "TUNING" etc, sind bei 10 Fingern bis zu 80 MIDI-Bytes zu übertragen, was etwa 30ms entspräche. Durch die verschieden langen Nachrichten kann es daher zu unmusikalischem, unvorhersehbaren Jitter kommen. Komplexere Lautstärkemdulationen mit quasianalogen MIDI-Gebern, wie bei der MIDI-Gitarre und MIDI-Flöte ("breath controller") sind damit im Zusammenhang mit realer MIDI-Hardware nur sehr eingeschränkt und nur alleine verwendbar.

Ein solcher Controller kann typisch etwa 500 Nachrichten in der Sekunde senden und damit das Anblasen einer Flöte in den ersten 50 ms mit etwa 16 Stützstellen auflösen. Für eine solche Bandbreite ist das USB-Protokoll ausreichend, allerdings besteht hier öfters das Problem der Anfangslatenz:

Latenz

Das USB-Protokoll, welches immer häufiger zur Anwendung kommt, bietet zwar eine mehr als ausreichende Bandbreite, jedoch wird dies von nur wenigen älteren Klangerzeugern unterstützt. Lediglich Softwaresampler und andere PC-basierte Systeme wie SW-Synthesizer und moderne Klanggeräte sind damit zu steuern. Hierbei wirkt sich aber die PC-typische Latenz des Betriebssystems sehr negativ aus. Ein tatsächlicher Echtzeitbetrieb ist mit keinem derzeit auf dem Markt verfügbaren Gerät möglich, daher haben moderne Geräte meistens beide Optionen: Klassisches MIDI und USB-MIDI.

Übertragungsprotokolle

Statt des MIDI-Transports über die klassische serielle Verbindung mit Stand 1982 sind heute höhere Bandbreiten möglich, z.B. durch MIDI über USB oder Ethernet. Transportmethoden wie Parallelport (EPP) oder S/PDIF wurden ebenfalls realisiert, konnten sich aber aufgrund mangelnder Kompatibilität nicht durchsetzen bzw. sind technisch überholt oder werden nur in Nischen oder Sonderanwendungen verwendet. Bei Geräten, die normalerweise nicht live eingesetzt werden, sondern an einen PC angeschlossen werden, hat sich MIDI über die USB-Schnittstelle weitgehend durchgesetzt.

MIDI over Audio

Um die limitierte Bandbreite bei MIDI zu überwinden, wurde schon in den 1980ern vorgeschlagen, den MIDI-Datenstrom über Audiokanäle zu senden, um die dort vorhandene Infrastruktur für das Senden und Speichern zu nutzen. Da die MIDI-Bandbreite jedoch wegen der ca. 30kHz rund 100kHz beträgt, müssten 4 Audiokanäle belegt werden, was zum damaligen Zeitpunkt wegen der kaum verbreiteten 4-Kanal / bzw. Surround-Technik nicht für die Breite Masse der Nutzer einsetzbar war. Vereinzelt gelang es, ähnlich wie bei der Datasette im Computerbereich eine Speicherung vorzunehmen, indem eine erhöhte Bandbreite des Signals zusammen mit einer Kompression benutzt wurde. Später wurde Ähnliches mit den 48kHz-Digital-DAT-Recordern probiert, konnte sich aber nicht durchsetzen, weil die meisten Musiker noch analog aufzeichneten.

MIDI über FireWire

Von Yamaha und anderen Herstellern wurde 1999 das sogenannte Music-LAN definiert, welches auf FireWire basiert und vergleichsweise hohe Bandbreiten zugelassen hätte. Einige Teile des Protokolls wurden veröffenlicht und standardisiert[4], vollständige Interoperabilität ist damit aber nicht möglich. Da keine Möglichkeit zum Aushandeln einer höheren Geschwindigkeit definiert ist, ist die Bandbreite auf die normalen 3125 Bytes/s begrenzt[5].

Serial wire MIDI

Mit Aufkommen der PCs gab es mehrere Ansätze, die COM-Schnittstelle für schnellere MIDI-Kommunikation zu nutzen. Mitte der 90er waren PC-UARTs mit typisch 115kbps, später auch 230kbps verfügbar. Diese wurden von Anwendern mittels proprietärer Software genutzt oder von Herstellern in einzelne Geräte integriert. Sehr bekannt sind die z.T. heute noch existierenden "TO HOST" Interfaces, die meist über MINI-DIN-Stecker erreichbar waren. Die Kommunikation erfolgte über einen eigenen Treiber. Es existierten Versionen mit RS 422 - interface [6] oder mit einer PS/2 Buchse. [7]

Parallel-Port-MIDI

Ein Abkömmling des seriellen MIDIs sind Parallelport-Anwendungen, die aber nur bei einzelnen Geräten üblich waren. Oft wurden Mehrfach-MIDI-Controller mit einem Parallelport-Anschluss versehen, um die Datenrate für gleich mehrere MIDI-Geräte (in der Regel 8, seltener 16) bereitstellen zu können. Die ersten Geräte von M-Audio, MIDI-MAN und MOTU arbeiten auf diese Weise. Obwohl die Bandbreite praktisch verzehnfacht wurde, blieb es nur bei der Nutzung zwischen PCs und herstellerspezifischen Geräten. Die Protokolle sind untereinander meist nicht kompatibel. Bis Mitte der 2000er Jahre war dies die am meisten verbreitete Form der MIDI-Verschaltung in semiprofessionellen Studios, weil diese Geräte auch selbständig MIDI-Geräte untereinander verschalten konnten und eine MIDI-Matrix anboten. Später wurden diese Geräte durch USB-Versionen ersetzt, auch weil bei vielen PCs der Parallelport wegfiel.

MIDI over S/PDIF

Von unterschiedlichen Seiten wurde probiert, die limitierte Entfernung von MIDI-Verbindungen (meist 5m und weniger) durch Übersetzung auf alternative Protokolle zu vergrößern und die Verbindung auch störstabiler zu bekommen. Unter anderem wurde MIDI 2000 vorgeschlagen, welches das MIDI-Protokoll erweitert und in einen Stereo-S/PDIF-Datenstrom übersetzt und damit die Bandbreite praktisch um den Faktor 100 anhebt. Zum damaligen Zeitpunkt um die Jahrtausendwende waren bereits etliche Studiogeräte und Klangerzeuger mit S/PDIF ausgerüstet - auch Soundkarten mit S/PDIF-Ausgang waren schon lange verfügbar. Die Übertragung kann direkt in den Audiodaten erfolgen [8] oder verpackt in Form von S/PDIF-Daten über Ethernet. [9] Es blieb jedoch letztlich bei proprietären Applikationen, da sich von der PC-Seite her, USB 1.0 begann, durchzusetzen. Lediglich eine Firma weltweit bietet mit dem Gerät ES-4 einen S/PDIF-basierten MIDI-Übertragungsweg an.

MIDI über USB

USB erlaubt höhere Bandbreiten, bei SuperSpeed bis zu 5 GBit/s. Die meisten derzeitigen MIDI-Geräte arbeiten aber noch mit Full Speed (12 MBit/s) oder High Speed (480 MBit/s). Auch moderne Geräte arbeiten meistens mit USB 2.0. Dies liegt oft an der noch größeren Latenz des USB 3.0, das auch Bandbreite ausgelegt ist. In der Praxis ist die Bandbreite durch den sendenden Mikrocontroller (Master-Keyboard) und dessen Software, oder den Pendants im Endgerät, bzw der PC-Infrastruktur begrenzt; üblich sind ca. 100 kBit/s. Die Latenzen liegen zwischen 15ms und bis über 150ms, abhängig von der Paketgröße und den verwendeten Chips.

Das USB-MIDI-Protokoll[10] ist mit dem 'normalen' USB-Serial-Protokoll (CDC) nicht kompatibel; deshalb ist es nicht möglich, USB-seriell-Konverter-Chips unverändert und ohne zusätzliche Treiber für MIDI zu verwenden. Es existiert aber eine Spezifikation zu class compliant devices, an die sich die meisten Hersteller inzwischen halten.

MIDI über Ethernet/WLAN: RTP-MIDI

Das Real-time Transport Protocol, das auf normalen UDP-Paketen basiert, hat auch die Möglichkeit, MIDI zu übertragen[11][12]. [13]

MIDI über Ethernet: AVB

IEEE-1722 (Audio/Video Bridging) definiert ein Protokoll zur Übertragung von Multimedia-Information. Dabei ist es notwendig, dass alle beteiligten Netzwerk-Karten und Switches/Router AVB in Hardware unterstützen. AVB verwendet die gleichen Datenformate wie FireWire und hat die gleichen Einschränkungen.

Sonstige

Für Sonderapplikationen gibt es eine Spezifikation für das Senden von MIDI über AES3 oder MADI.

MIDI HD

Seit 2005 berät sich das MIDI-Komitee über einen offiziellen Nachfolger der MIDI-Spezifikation[14].

Im Jahre 2020 wurde dann schließlich die neue Spezifikation MIDI 2.0 vorgestellt.

Verwendung

DIN - MIDI

DIN-MIDI-Geräte verfügen meist über eine IN / OUT Buchse mit der sich Ringe aufbauen lassen, sofern das jeweilige Gerät über Filter verfügt, um eingehende Daten, die verarbeitet wurden rauszufiltern und eigene beizumischen. Dann kann ein Folgegerät an die out des ersten angeschlossen werden. Zu bevorzugen ist jedoch die THRU-Buchse, wenn vorhanden. Ideal sind MIDI-Matrix-Geräte, die eine Sternverdrahtung in beide Richtungen ermöglichen.

USB - Geräte

Üblicherweise gibt es bei USB einen host und mehrere slaves. Bei PC-Anwendungen ist dieser immer der host, d.h. sowohl das keyboard. als auch das Musikgerät sind der slave. Es gibt daher keine Möglichkeit, ein MIDI-keyboard direkt an ein Gerät anzuschließen, das nur über einen physikalischen MIDI-Eingang verfügt. Dazu benötigt man einen MIDI-host, der USB-MIDI-Geräte verwalten und erkennen kann und dann auch das MIDI übersetzt.[15]

Siehe auch

Artikel auf Mikrocontroller

Beiträge auf Mikrocontroller

Referenzen

externe Links ins Web