MIDI-Nachrichten verstehen: Von Bits und Bytes zur Musik
Was ist MIDI eigentlich?
Das Jahr ist 1983. Im Winter erscheinen auf der NAMM-Show zwei Synthesizer, die Musikgeschichte schreiben: der Sequential Circuits Prophet-600 und Rolands Jupiter-6. Zum ersten Mal in der Geschichte können zwei Synthesizer verschiedener Hersteller miteinander kommunizieren – über ein gemeinsames, standardisiertes Protokoll namens MIDI (Musical Instrument Digital Interface).
MIDI wurde ursprünglich mit dem schlichten Ziel entwickelt, zwei Keyboards zu verbinden, sodass sich beide gleichzeitig über eine einzige Tastatur spielen lassen. Inzwischen ist das Einsatzspektrum jedoch weit umfangreicher: Nahezu alle musikalisch relevanten Parameter lassen sich per MIDI regeln. So kann man mehrere Parts oder Sounds eines oder mehrerer Instrumente ansteuern, zwischen Sounds wechseln oder Instrumente sogar aus der Ferne neu programmieren. Auch Effektgeräte sind über MIDI steuerbar, wodurch sich sowohl subtile als auch drastische klangliche Veränderungen realisieren lassen.
Geräte wie Sequenzer ( Roland MSQ-700 war der erste MIDI-Sequenzer, Sequential Model64 der erste Software-MIDI-Sequenzer), Drumcomputer oder DAWs können synchron gestartet, gestoppt und – ähnlich wie ein Tonbandgerät – vor- und zurückgespult werden. Verschiedene Unterstandards ermöglichen zudem die Übertragung digitaler Audiodaten, die Synchronisation von Bandmaschinen sowie die Erstellung und Übermittlung von Cue-Listen für die Postproduktion im Film- und Videobereich.
Darüber hinaus sind MIDI-Instrumente keineswegs auf Tastaturen als Steuerquelle beschränkt. Dank MIDI-fähiger Gitarren, Geigen, Blasinstrumente, Schlagzeuge und Akkordeons können auch Nicht-Keyboarder auf die Klangwelt von MIDI-Instrumenten zugreifen.
MIDI überträgt keine Klänge. MIDI überträgt Befehle – so wie eine Partitur dem Orchester sagt, was es spielen soll, ohne selbst Musik zu sein. Per MIDI kann ein Gerät andere Geräte steuern.
Wenn du in Logic Pros Piano Roll eine Note zeichnest, passiert akustisch erstmal nichts. Logic speichert eine Nachricht — eine kurze Bytefolge mit dem Inhalt: Note On, Kanal 1, Tonhöhe 60, Velocity 100. Das Synthesizer-Plugin empfängt diese Nachricht und entscheidet selbst, welchen Klang es daraus macht. MIDI und Audio sind vollständig voneinander getrennte Schichten.
Dieser Post geht tief in die Byte-Ebene von MIDI. Wenn du dich je gefragt hast, warum MIDI 128 Velocity-Stufen hat, warum Kanalnummern intern als 0–15 laufen, aber als 1–16 angezeigt werden, oder wie SysEx beliebige Herstellerdaten übertragen kann — hier ist die Erklärung.
Binär und Hexadezimal
Um MIDI wirklich zu verstehen, muss man kurz in die Welt der Zahlensysteme eintauchen. Keine Sorge – es ist einfacher als es klingt.
Das Binärsystem
Computer speichern alles als Spannungszustände: an oder aus. Diese Zustände werden als 1 und 0 dargestellt. Das ist binär. Ein einzelner An/Aus-Zustand ist ein Bit. Acht Bits ergeben ein Byte. Ein Byte kann 256 verschiedene Werte darstellen (0–255), denn 2⁸ = 256.
Ein Byte hat 8 Stellen (Bits). Die linkeste Stelle ist das Most Significant Bit (MSB), die rechteste das Least Significant Bit (LSB). Der Wert jeder Stelle verdoppelt sich von rechts nach links:
Die Bit-Positionen in einem Byte werden von rechts nach links nummeriert, beginnend bei 0. Jede Position repräsentiert eine Potenz von 2:
| Bit-Position | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Wert | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| Dezimal | Binär | Bedeutung |
|---|---|---|
| 0 | 0000 0000 | Null |
| 1 | 0000 0001 | Eins |
| 2 | 0000 0010 | Zwei (Stelle 2 gesetzt) |
| 4 | 0000 0100 | Vier (Stelle 3 gesetzt) |
| 8 | 0000 1000 | Acht (Stelle 4 gesetzt) |
| 15 | 0000 1111 | Alle 4 Bits gesetzt = Maxmimum |
| 128 | 1000 0000 | |
| 255 | 1111 1111 |
Bei MIDI Nachrichten wird das MSB verwendet um zu unterscheiden, ob es sich um eine Statusbyte oder ein Datenbyte handelt. D.h. es steht ein Wertebereich von 0-127 also 128 Werte zur Verfügung.
Hexadezimal
Binärzahlen sind exakt, aber mühsam zu lesen. Deshalb nutzen Techniker das Hexadezimalsystem (kurz: Hex). Es hat 16 Zeichen: 0–9 und A–F. Eine Hex-Stelle entspricht exakt 4 Bits – und damit beschreibt ein einzelnes Hex-Zeichen-Paar präzise ein ganzes Byte.
MERKREGEL Ein Byte = 8 Bits = 2 Hex-Stellen.
9FHbedeutet:9=1001binär,F=1111binär → zusammen1001 1111binär = 159 dezimal.
Das Nibble-Prinzip — kein Rechnen nötig
Ein Byte teilt sich natürlich in zwei Nibbles zu je 4 Bits auf. Das obere Nibble sind Bits 7–4, das untere Nibble Bits 3–0. Jedes Nibble wird zu genau einer Hex-Ziffer. Du kannst Hex aus Binär lesen, indem du das Byte einfach in zwei Hälften teilst und jede Hälfte in einer Tabelle nachschlägst — kein Rechnen erforderlich.
Binär: 1001 0110
──── ────
Oberes: 1001 = 9
Unteres: 0110 = 6
Hex: 0x96
Umgekehrt funktioniert genauso: 0x96 → obere Ziffer 9 = 1001, untere Ziffer 6 = 0110 → 10010110.
| Binär | Hex | Binär | Hex | |
|---|---|---|---|---|
| 0000 | 0 | 1000 | 8 | |
| 0001 | 1 | 1001 | 9 | |
| 0010 | 2 | 1010 | A | |
| 0011 | 3 | 1011 | B | |
| 0100 | 4 | 1100 | C | |
| 0101 | 5 | 1101 | D | |
| 0110 | 6 | 1110 | E | |
| 0111 | 7 | 1111 | F |
Das 0x-Präfix — warum steht das vor jeder Hex-Zahl?
In MIDI-Dokumentation, Synthesizer-Handbüchern und Code begegnet man ständig Schreibweisen wie 0x96, 0x3C oder 0xF0. Das 0x davor ist kein Rechenwert – es ist ein reines Kennzeichen: „Diese Zahl ist hexadezimal, nicht dezimal.”
Das Problem ohne Präfix: Was bedeutet 96 alleine? Sechsundneunzig dezimal – oder hex (= 150 dezimal)? Mehrdeutig. Mit Präfix ist es eindeutig.
| Schreibweise | System | Dezimalwert | MIDI-Bedeutung |
|---|---|---|---|
150 | Dezimal | 150 | nicht leicht ablesbar |
0x96 | Hexadezimal (C-Stil) | 150 | Note On, Kanal 7 (sofort sichtbar) |
96H | Hexadezimal (MIDI-Notation) | 150 | in Roland/Yamaha-Handbüchern üblich |
10010110 | Binär | 150 | exakt, aber unhandlich |
Das 0x-Präfix stammt aus der Programmiersprache C (1970er Jahre) und hat sich in nahezu allen Sprachen durchgesetzt. In MIDI-Handbüchern verwenden Hersteller oft das nachgestellte H: 96H statt 0x96. Beides meint dasselbe. In diesem Blogpost werden beide Notationen verwendet.
Interaktives Widget: Binär ↔ Hex Konverter
Klick auf die Bits, um sie umzuschalten und sieh, wie sich Hex- und Dezimalwerte in Echtzeit aktualisieren. Das obere Nibble (Bits 7–4) ist in Cyan, das untere Nibble (Bits 3–0) in Violet dargestellt. Nutze die Presets, um häufige MIDI-Bytes zu laden.
Status-Bytes und Data-Bytes
Die Bit-7-Regel
Jede MIDI-Nachricht beginnt mit einem Status-Byte. Das entscheidende Merkmal: Bit 7 ist auf 1 gesetzt. Jedes nachfolgende Data-Byte in dieser Nachricht hat Bit 7 auf 0 gesetzt. Diese einzige Regel ermöglicht es einem Empfänger, immer zu erkennen, ob ein eingehendes Byte ein neuer Befehl oder ein Fortsetzungsbyte ist — ohne Start/Stop-Framing.
Der Bytewert 128 (1000 0000 binär) ist das kleinste mögliche Status-Byte. Werte 0–127 sind Data-Bytes. Werte 128–255 sind Status-Bytes.
Warum heißt es „Bit 7” — und nicht Bit 1 oder Bit 8?
Das ist eine häufige Verwirrungsquelle. Bits werden von rechts gezählt, beginnend mit 0 — genau wie Stellen im Dezimalsystem. Der Grund ist mathematisch: jede Position entspricht einer Zweierpotenz, und die kleinste Zweierpotenz ist 2⁰ = 1, nicht 2¹.
Position: 7 6 5 4 3 2 1 0
│ │ │ │ │ │ │ │
Stellenwert: 128 64 32 16 8 4 2 1
Beispiel: 0x96 = 150 dezimal
Bits: 1 0 0 1 0 1 1 0
128 + 0 + 0 + 16 + 0 + 4 + 2 + 0 = 150 ✓
Bit 7 (ganz links) ist das Most Significant Bit (MSB) — es hat mit dem Wert 128 den größten Einfluss auf die Gesamtzahl. Bit 0 (ganz rechts) ist das Least Significant Bit (LSB) mit dem Wert 1. Im MIDI-Protokoll ist Bit 7 der einzige Unterschied zwischen Status- und Datenbyte — ein einziges Bit entscheidet über die Rolle des gesamten Bytes.
MSB/LSB — zwei Ebenen, eine Erkennungsregel: MIDI-Dokumentation verwendet MSB und LSB auf zwei Ebenen. Bit-Ebene: „Bit 7 ist das MSB” — gemeint ist die Stelle innerhalb eines einzelnen Bytes. Byte-Ebene: „CC 7 ist der MSB-Controller” — gemeint ist ein ganzes MIDI-Byte, wenn ein Wert über zwei Bytes verteilt wird (z.B. 14-Bit Pitch Bend). Die Ebene erkennst du am Begleitwort: steht Bit davor → Bit-Ebene. Steht Byte, Controller oder Data davor → Byte-Ebene.
Anatomie des Status-Bytes
Das Status-Byte kodiert zwei Dinge in seinen zwei Nibbles:
Das obere Nibble (Bits 7–4) kodiert den Nachrichtentyp. Das untere Nibble (Bits 3–0) kodiert den MIDI-Kanal (0–15, in Software als 1–16 angezeigt). Die Bit-Nummerierung zählt von rechts, beginnend bei 0 — Bit 0 ist also das niederwertigste (rechteste) Bit.
Beispiel: 0x92
0x92 = 1001 0010
──── ────
Oben: 1001 = 9 → Nachrichtentyp: Note On (0x9n)
Unten: 0010 = 2 → Kanal: 2 (in Logic als Kanal 3 angezeigt)
Logic-Tipp: Fenster → MIDI-Monitor (oder das MIDI-Monitor-Objekt in der Environment) öffnen, um rohe MIDI-Nachrichten in Echtzeit zu beobachten. Jedes Status-Byte, jeder CC-Wert — live beim Eintreffen. Unverzichtbar zum Debuggen von Controllern und Hardware.
Wer einen DAW-unabhängigen Blick auf seine MIDI-Daten braucht: Der selbstentwickelte MidiSpy ist ein browserbasierter MIDI-Monitor als einzelne HTML-Datei — keine Installation, kein Server, keine Internetverbindung. Einfach öffnen, MIDI-Gerät verbinden, Nachrichten beobachten.
Nachrichtentypen im Überblick
Bevor wir in die einzelnen Nachrichten einsteigen, eine kurze Orientierung — damit du weißt, wo Note On im Gesamtbild steht.
Jede MIDI-Nachricht besteht immer aus einem Status-Byte gefolgt von null bis zwei Data-Bytes. Das hast du im vorigen Abschnitt gesehen. Was sich ändert, ist der Inhalt dieser Bytes — also was der Befehl bedeutet und wen er anspricht.
MIDI unterscheidet dabei zwei grundlegende Adressierungsarten:
Kanal-Nachrichten richten sich an einen bestimmten MIDI-Kanal. Du kannst dir das vorstellen wie ein Mischpult mit 16 Kanälen: Eine Kanal-Nachricht sagt nicht nur “spiel eine Note”, sondern “spiel eine Note auf Kanal 3”. Nur das Instrument, das auf Kanal 3 hört, reagiert darauf. Note On, Note Off, Control Change und Pitch Bend sind alle Kanal-Nachrichten.
System-Nachrichten dagegen haben keine Kanal-Adresse — sie gelten für alle Geräte gleichzeitig. Tempo-Synchronisation (MIDI Clock) oder das Anhalten aller Geräte (Stop) macht keinen Sinn pro Kanal, also gibt es dafür System-Nachrichten.
Diese Unterscheidung — Kanal vs. System — beschreibt, wen eine Nachricht anspricht. Sie hat nichts damit zu tun, wie die Nachricht aufgebaut ist. Status-Byte und Data-Bytes sind die Struktur jeder Nachricht; Kanal vs. System ist die Adressierung.
| Typ | Hex | Zweck | Bytes |
|---|---|---|---|
| Note Off | 0x8n | Taste losgelassen | 3 |
| Note On | 0x9n | Taste gedrückt | 3 |
| Control Change | 0xBn | Regler, Pedale | 3 |
| Program Change | 0xCn | Klang wechseln | 2 |
| Pitch Bend | 0xEn | Tonhöhenänderung | 3 |
| MIDI Clock | 0xF8 | Tempo-Sync | 1 |
| System Exclusive | 0xF0 | Herstellerdaten | variabel |
Das n in den Hex-Werten steht für den Kanal (0–15). System-Nachrichten erkennst du am oberen Nibble F (1111 in Binär). Das untere Nibble kodiert dann nicht mehr den Kanal, sondern den genauen Typ:
Kanal-Nachricht: 0x9n
│└── Kanal (0–15)
└─── Nachrichtentyp (Note On)
System-Nachricht: 0xF8
│└── was genau? (8 = MIDI Clock)
└─── immer F → "das ist eine System-Nachricht"
Kein n mehr im unteren Nibble — der Platz gehört dem Typ, nicht dem Kanal. Jetzt schauen wir uns den wichtigsten Typ im Detail an: Note On.
Note On — eine Taste wird gedrückt
Wenn du eine Taste auf deinem Keyboard drückst, sendet Logic eine Note-On-Nachricht. Diese Nachricht besteht aus genau drei Bytes — nicht mehr, nicht weniger.
Byte 1: Status-Byte → Was passiert, auf welchem Kanal?
Byte 2: Data-Byte 1 → Welche Note?
Byte 3: Data-Byte 2 → Wie laut?
Byte 1: Das Status-Byte
Das Status-Byte kombiniert zwei Informationen in einem Byte. Das obere Nibble (Bits 7–4) kodiert den Nachrichtentyp, das untere Nibble (Bits 3–0) den MIDI-Kanal.
Für Note On ist das obere Nibble immer 9. Das bedeutet:
Kanal 1 → 0x90 (1001 0000)
Kanal 2 → 0x91 (1001 0001)
Kanal 3 → 0x92 (1001 0010)
...
Kanal 16 → 0x9F (1001 1111)
Ein einziges Byte sagt also bereits: “Note On, Kanal 1.” Bit 7 ist immer 1 — das ist das Erkennungszeichen jedes Status-Bytes.
Byte 2: Die Notennummer
Das zweite Byte bestimmt, welche Note gespielt wird. Der Bereich ist 0–127 (128 Werte, also 7 Bit). Die wichtigsten Ankerpunkte:
| Note | MIDI-Nummer | Hex |
|---|---|---|
| C (tiefste MIDI-Note) | 0 | 0x00 |
| Mittleres C (C3 in Logic) | 60 | 0x3C |
| A4 — Kammerton 440 Hz | 69 | 0x45 |
| G9 (höchste MIDI-Note) | 127 | 0x7F |
Hinweis: Logic zeigt mittleres C als C3, andere DAWs als C4. Das zugrundeliegende Byte ist in beiden Fällen 60 — nur die Anzeige unterscheidet sich.
Byte 3: Die Velocity
Das dritte Byte bestimmt die Anschlagstärke — wie fest die Taste gedrückt wurde. Auch hier: 0–127.
| Velocity | Bedeutung |
|---|---|
| 0 | Wird als Note Off behandelt |
| 1–63 | Piano bis Mezzoforte |
| 64 | Ungefähre Mitte |
| 65–127 | Mezzoforte bis Fortissimo |
| 127 | Maximal |
Die MIDI-Spec legt nicht fest, wie Velocity in Lautstärke oder Klangfarbe übersetzt wird — das entscheidet das Instrument selbst. Deshalb klingt Velocity 100 auf einem Steinway-Sample anders als auf einem Synthesizer.
Vollständiges Beispiel
Mittleres C, Kanal 1, Velocity 100:
90 3C 64
│ │ └── Velocity: 100 (dezimal) = 0x64
│ └───── Notennummer: 60 (dezimal) = 0x3C = mittleres C
└──────── Status: Note On, Kanal 1 = 0x90
Und wenn die Taste losgelassen wird, folgt das Note Off — gleiche Struktur, oberes Nibble 8 statt 9:
80 3C 40
│ │ └── Release-Velocity: 64 (wird meist ignoriert)
│ └───── Notennummer: 60 (mittleres C)
└──────── Status: Note Off, Kanal 1 = 0x80
Praktische Abkürzung: Viele Geräte senden statt Note Off einfach ein Note On mit Velocity 0.
90 3C 00hat exakt dieselbe Wirkung wie80 3C 40— und spart das Wechseln des Status-Bytes.
Velocity und die 7-Bit-Auflösung
Datenbytes haben maximal 7 Bit — also 128 Werte (0–127). Velocity 0 = Taste wird losgelassen, Velocity 127 = maximal kraftvoller Anschlag. Damalige Synthesizer konnten mit mehr Werten nichts anfangen. Mit MIDI 2.0 gibt es hier Änderungen.
Die Beziehung zwischen MIDI-Velocity und wahrgenommener Lautstärke ist bei den meisten Synthesizern logarithmisch, nicht linear — weil unser Gehör logarithmisch funktioniert.
Control Change — Regler, Pedale, Modulationsräder
Control Change (CC) ist der universelle Übertragungsweg für alles, was kein Noten-An/Aus ist: Lautstärke, Panorama, Modulation, Sustain, Expression. Eine CC-Nachricht besteht immer aus drei Bytes.
Byte 1: Status-Byte → Control Change, auf welchem Kanal?
Byte 2: Controller-Nr → Welcher Regler?
Byte 3: Wert → Wie viel?
Das obere Nibble des Status-Bytes ist immer B (= 1011). Das untere Nibble ist der Kanal (0–15).
Aufbau
B0 07 64
│ │ └── Wert: 100
│ └───── Controller 7 = Channel Volume
└──────── Status: Control Change, Kanal 1 = 0xB0
Die wichtigsten Controller-Nummern
| CC# | Funktion | Typischer Einsatz |
|---|---|---|
0 | Bank Select MSB | Soundbank wechseln (zusammen mit CC#32) |
1 | Modulation Wheel | Vibrato, LFO-Tiefe |
7 | Channel Volume | Gesamtlautstärke des Kanals |
10 | Pan | Panorama (0 = links, 64 = Mitte, 127 = rechts) |
11 | Expression | Dynamisches Volumen innerhalb eines Parts |
64 | Sustain Pedal | 0–63 = off, 64–127 = on |
74 | Brightness / Filter Cutoff | Häufig für Filteröffnung belegt |
121 | Reset All Controllers | Alle Regler zurücksetzen |
123 | All Notes Off | Panic-Funktion |
Modulation vs. Expression: CC#1 (Modulation Wheel) steuert üblicherweise Vibrato oder LFO-Tiefe — eine Klangfarbenveränderung. CC#11 (Expression) ist eine dynamische Lautstärke innerhalb des Kanalvolumens (CC#7). Stell dir CC#7 als den Fader vor und CC#11 als die Phrasierung durch den Spieler.
Sustain Pedal gedrückt (Kanal 1):
B0 40 7F
│ │ └── Wert 127 = an
│ └───── Controller 64 = Sustain Pedal
└──────── Control Change, Kanal 1
Modulation Wheel auf halber Position (Kanal 2):
B1 01 40
│ │ └── Wert 64 = Mitte
│ └───── Controller 1 = Modulation Wheel
└──────── Control Change, Kanal 2
Logic-Tipp: In Logic lassen sich CC-Kurven direkt in der Piano Roll zeichnen (Bereich ganz unten, Selektor auf “Controller”). Dort siehst du die rohen Bytewerte — genau das, was über das Kabel läuft.
Program Change — Klang wechseln
Program Change wählt einen Sound (Patch) auf dem Zielgerät aus. Sie ist die einzige häufige MIDI-Nachricht, die mit nur zwei Bytes auskommt — kein zweites Datenbyte nötig.
Byte 1: Status-Byte → Program Change, auf welchem Kanal?
Byte 2: Programm-Nr → Welcher Sound? (0–127)
Das obere Nibble ist C (= 1100).
C0 18
│ └── Programm 24 (dezimal) = 0x18
└───── Status: Program Change, Kanal 1 = 0xC0
Warum nur 128 Sounds?
7-Bit-Data-Byte = 128 mögliche Werte. Das war 1983 ausreichend. Für Geräte mit mehr Patches gibt es Bank Select: CC#0 (MSB) und CC#32 (LSB) wählen zuerst die Bank, danach schaltet Program Change innerhalb dieser Bank. Zusammen adressieren sie 128 × 128 × 128 = über zwei Millionen Patches — theoretisch.
Bank wechseln und dann Programm 1 in Bank 2 laden (Kanal 1):
B0 00 02 ← Bank Select MSB: Bank 2
B0 20 00 ← Bank Select LSB: 0 (oft nicht benötigt)
C0 00 ← Program Change: Patch 1 (innerhalb der gewählten Bank)
Hinweis: MIDI-Programmnummern laufen intern von 0–127, werden aber auf Geräten und in Logic meistens als 1–128 angezeigt.
C0 00entspricht also Program 1 in der Anzeige — nicht Program 0.
Pitch Bend — warum hat das eine eigene Nachricht?
Warum hat Pitch Bend eine eigene Nachrichtenart mit dem Status-Byte-Präfix E (1110) und wird nicht in den Control Change Nachricht behandelt?
Auflösung. Ein normales Data-Byte hat 7 Bit = 128 Stufen. Beim Pitch Bend sind 128 Stufen nicht genug: Die Tonhöhenänderung klingt treppenartig und unnatürlich. Deshalb verwendet Pitch Bend zwei Data-Bytes für eine 14-Bit-Auflösung — 16.384 Stufen statt 128. Das ergibt eine weiche, kontinuierliche Kurve.
Byte 1: Status-Byte → Pitch Bend, auf welchem Kanal?
Byte 2: niedrigwertiges Byte → Feinstimmung (7 Bit)
Byte 3: höherwertiges Byte → Grobwert (7 Bit)
Hinweis zu MSB/LSB: In der MIDI-Dokumentation werden die beiden Data-Bytes von Pitch Bend oft als “LSB” und “MSB” bezeichnet — hier steht das nicht für Bit, sondern für Byte: das Least Significant Byte (niedrigwertiges Byte) und das Most Significant Byte (höherwertiges Byte). Diese Bedeutung gilt nur dort, wo zwei Bytes zu einem größeren Wert kombiniert werden — bei Pitch Bend und bei High-Resolution-CC-Paaren. Überall sonst in MIDI (Status-Byte, Bit-7-Regel etc.) meint MSB/LSB das einzelne Bit.
Der Neutralwert (keine Tonhöhenänderung) liegt exakt in der Mitte: dezimal 8192.
Pitch Bend: keine Änderung (Neutralposition), Kanal 1:
E0 00 40
│ │ └── hohes Byte: 64 (0x40) → obere Hälfte = Mitte
│ └───── niedriges Byte: 0 → keine Feinstimmung
└──────── Status: Pitch Bend, Kanal 1 = 0xE0
Pitch Bend: maximaler Aufwärtsbend, Kanal 1:
E0 7F 7F
│ │ └── hohes Byte: 127 → Maximum
│ └───── niedriges Byte: 127 → Maximum
└──────── Status: Pitch Bend, Kanal 1 = 0xE0
Pitch Bend: maximaler Abwärtsbend, Kanal 1:
E0 00 00
│ │ └── hohes Byte: 0 → Minimum
│ └───── niedriges Byte: 0 → Minimum
└──────── Status: Pitch Bend, Kanal 1 = 0xE0
14-Bit-Wert aus zwei Bytes zusammensetzen
Die beiden 7-Bit-Bytes werden zu einem 14-Bit-Wert kombiniert: das höherwertige Byte bildet die oberen 7 Bits, das niederwertige Byte die unteren 7 Bits.
hohes Byte = 0x40 = 100 0000 (7 Bit)
niedriges Byte = 0x00 = 000 0000 (7 Bit)
14-Bit-Wert: 100 0000 000 0000 = 8192 → Neutralposition
Warum das niedrigwertige Byte zuerst? Das ist eine Eigenheit der MIDI-Spec: Pitch Bend sendet das niedrigwertige Byte vor dem höherwertigen. Bei vielen anderen MIDI-Nachrichten ist das irrelevant (weil nur ein Data-Byte), aber hier ist die Reihenfolge entscheidend.
Logic-Tipp: Der Pitch-Bend-Bereich (wie viele Halbtöne ein Vollausschlag entspricht) ist kein Teil der MIDI-Nachricht — er wird im Empfänger-Instrument eingestellt. Standard ist ±2 Halbtöne, aber Synthesizer können auf ±12 oder mehr konfiguriert werden. In Logic: Smart Controls oder Instrument-Plugin-Parameter.
System Exclusive
SysEx ist der Fluchtweg im MIDI-Protokoll — eine Nachricht variabler Länge, die Herstellern erlaubt, beliebige Daten zu senden. Das Format: F0H (Start), Hersteller-ID, Geräte-ID, Nutzdaten, F7H (Ende).
SysEx-Struktur
| Byte | Wert | Bedeutung |
|---|---|---|
| 1 | F0H | SysEx Start |
| 2 | Hersteller-ID | 1 oder 3 Bytes |
| 3 | Geräte-ID | 0–127 oder 7FH (Broadcast) |
| 4…n | Daten | Beliebige 7-Bit-Werte |
| Letztes | F7H | SysEx Ende (EOX) |
Hersteller-IDs
| Hersteller | ID |
|---|---|
| Roland | 41H |
| Yamaha | 43H |
| Korg | 42H |
| Kawai | 40H |
Ältere Hersteller haben 1-Byte-IDs. Neuere (nach 1987) verwenden 3-Byte-IDs, die mit 00H beginnen.
Was Hersteller über SysEx übertragen, ist vollständig ihnen überlassen — die MIDI-Spec gibt nur das Rahmenformat vor. In der Praxis wird SysEx unter anderem verwendet für:
- Einzelne Sounds (Patches): Ein kompletter Synthesizer-Sound mit allen Parametern wird als SysEx-Dump übertragen — so kann man Presets zwischen Geräten kopieren oder in einer DAW archivieren.
- Soundbänke: Alle Presets eines Geräts auf einmal sichern und wiederherstellen, z. B. vor einem Live-Gig oder Firmware-Update.
- Kompletter Geräte-Dump: Systemeinstellungen, Tunings, Effektparameter — alles, was ein Gerät an Zustand hat, kann als SysEx gesichert werden.
- Editor-Kommunikation: Software-Editoren (z. B. für den Moog Sub 37) lesen und schreiben Parameter in Echtzeit über SysEx, ohne dass der Nutzer am Gerät selbst etwas bedienen muss.
Demnächst: Wie man SysEx in der Praxis für professionelles Soundmanagement einsetzt — Patches sichern, Bänke verwalten, Geräte-Dumps automatisieren — zeige ich in einem eigenen Video. Stay tuned.
Universal SysEx
| ID | Typ | Verwendung |
|---|---|---|
| 7DH | Nicht-kommerziell | Bildung, Tests, Prototypen |
| 7EH | Universal Non-Real-Time | Identity Request, GM System On, Sample Dump |
| 7FH | Universal Real-Time | Gerätesteuerung, MIDI Machine Control, MIDI Show Control |
Identity Request (Gerät zur Selbstidentifikation auffordern):
F0 7E 7F 06 01 F7
│ │ │ └─ Sub-ID 2: Identity Request
│ │ └──── Sub-ID 1: General Information
│ └──────── Geräte-ID: 7F = Broadcast (alle Geräte)
└─────────── Universal Non-Real-Time
GM System On (auf General MIDI zurücksetzen):
F0 7E 7F 09 01 F7
SysEx-Data-Bytes müssen alle unter 0x80 liegen (Bit 7 = 0). Wenn ein Hersteller 8-Bit-Daten übertragen muss, verwendet er ein Packing-Schema (z. B. 7 Datenbytes auf 8 SysEx-Bytes verteilt, wobei ein Bit aus jedem in einem zusätzlichen Byte gespeichert wird).
MIDI-Synchronisation
MIDI Clock
MIDI Clock hält mehrere Geräte auf denselben Takt synchronisiert. Die Clock-Nachricht ist ein einzelnes Byte — F8H — das 24 Mal pro Viertelnote gesendet wird. Bei 120 BPM sind das 48 Impulse pro Sekunde (24 × 2 pro Sekunde).
| Nachricht | Byte | Funktion |
|---|---|---|
| MIDI Clock | F8H | 24 Impulse pro Viertelnote |
| Start | FAH | Von Position 0 beginnen |
| Continue | FBH | Von aktueller Position fortsetzen |
| Stop | FCH | Transport pausieren |
| Song Position Pointer | F2H | Position in 16tel-Schritten setzen |
MIDI Clock trägt keine absolute Position — nur Tempo-Impulse. Song Position Pointer (F2H, 3 Bytes gesamt) teilt einem Slave mit, wo er sich positionieren soll, bevor er fortsetzt. Logic Pro kann als MIDI-Clock-Master oder -Slave über die Synchronisationseinstellungen fungieren.
MIDI Time Code (MTC)
MIDI Time Code kodiert SMPTE-Timecode (HH:MM:SS:FF) in MIDI-Nachrichten. Eine vollständige SMPTE-Adresse wird als 8 Quarter-Frame-Nachrichten übertragen, wobei jede ein Nibble der vollständigen Adresse trägt. Der Empfänger setzt den vollständigen Zeitstempel nach 8 Nachrichten zusammen (zwei vollständige Frames).
Bildwiederholraten: 24 fps (Film), 25 fps (europäisches Video), 29,97 fps (NTSC Drop-Frame), 30 fps (NTSC Non-Drop).
MTC Full Frame Message (absolute Positionsrücksetzung):
F0 7F 7F 01 01 HH MM SS FF F7
│ │ └──────── Sub-ID: Full Frame
│ └──────────── Sub-ID: MTC
└───────────────── Geräte-ID: 7F (Broadcast)
HH = Stunde | MM = Minute | SS = Sekunde | FF = Frame
MTC ist die richtige Wahl, wenn dein MIDI-Setup mit Video integriert wird oder du Frame-genaue Synchronisation brauchst. MIDI Clock ist richtig für rein musikalische Tempo-Synchronisation.
MIDI 2.0
Die MIDI Manufacturers Association ratifizierte MIDI 2.0 im Jahr 2020. Die wichtigsten Verbesserungen sind Auflösung und Bidirektionalität.
Der entscheidende Mechanismus ist MICI (MIDI Capability Inquiry) — ein bidirektionaler Handshake, der es Geräten ermöglicht, Fähigkeiten und Profil-Unterstützung auszuhandeln, bevor Daten ausgetauscht werden. MIDI 2.0 ist abwärtskompatibel: Ein MIDI-2.0-Gerät spricht MIDI 1.0 mit Geräten, die kein MICI aushandeln.
Logic Pro unterstützt MIDI 2.0 seit macOS 11 Big Sur und Logic Pro 10.7. Die Hardware-Realität ist konservativer. Mein Moog Sub 37 spricht MIDI 1.0 — wie nahezu alle Hardware, die vor 2023 produziert wurde. MIDI 1.0 vollständig zu verstehen bleibt die praktische Grundlage.
MIDI 1.0 Kurzreferenz
Status-Bytes (Kanal)
8nH Note Off 9nH Note On AnH Poly Aftertouch BnH Control Change CnH Program Change DnH Kl. Aftertouch EnH Pitch Bend
System-Nachrichten
F0H SysEx Start F2H Song Pos. Ptr F8H MIDI Clock FAH Start FBH Continue FCH Stop FEH Active Sensing FFH System Reset F7H SysEx Ende
Wichtige CCs
1 Modulation 7 Kanal-Lautstärke 10 Pan 11 Expression 64 Sustain 65 Portamento 91 Reverb Send 93 Chorus Send 120 All Sound Off 123 All Notes Off
Notenreferenz
C-2 = 0 (tiefste) C3 = 60 (mittleres C) A3 = 69 (440 Hz) G9 = 127 (höchste)Oktav-Offset variiert je nach DAW (Logic: C3=60, manche DAWs: C4=60)
Wichtigste Erkenntnisse
- MIDI überträgt Anweisungen, keinen Klang. Die Bytes teilen einem Instrument mit, was es spielen soll; das Instrument entscheidet, wie es klingt.
- Bit 7 ist alles. Das gesamte MIDI-Framing-System beruht auf der einzigen Regel, dass Status-Bytes Bit 7 = 1 haben und Data-Bytes Bit 7 = 0.
- Hex und Nibbles sind dasselbe. Ein Byte in zwei 4-Bit-Hälften aufteilen, jede in der Nibble-Tabelle nachschlagen, fertig. Kein Rechnen erforderlich.
- Kanal vs. System beschreibt die Adressierung, nicht die Struktur. Jede Nachricht hat Status- und Data-Bytes — ob sie an einen Kanal oder alle Geräte gerichtet ist, steht im oberen Nibble des Status-Bytes.
- MIDI 2.0 ist ratifiziert, Logic unterstützt es, aber deine Hardware wahrscheinlich nicht. Bei jedem Setup mit physischen Synthesizern, die vor 2023 hergestellt wurden, ist MIDI 1.0 das funktionierende Protokoll.
Quellen
Offizielle Spezifikationen
| Quelle | URL |
|---|---|
| MIDI Manufacturers Association (MMA) | midi.org |
| Complete MIDI 1.0 Detailed Specification | midi.org/specifications |
| MIDI 2.0 Specification | midi.org/midi-2-0 |
| Universal System Exclusive Messages | midi.org/specifications/midi1specs |
Praxisnahe Sekundärquellen
| Quelle | Schwerpunkt |
|---|---|
| Sound on Sound — „MIDI Basics” / „SOS Guide to MIDI” | Mehrteilige Serie, sehr praxisnah. Erklärt CC, NRPN, RPN, Synchronisation und SysEx aus Musikersicht. Ideal als Ergänzung zur trockenen MMA-Spec. |
| Apple Logic Pro Handbuch — Kapitel „MIDI-Umgebung” und „Controller-Zuweisungen” | Apples Implementierung von NRPN/RPN in Logic, Controller-Zuweisungen und MIDI-Monitor-Nutzung. Relevant für alle Logic-Workflows mit Hardware-Synthesizern. |
| MIDI Power! The Comprehensive Guide — Robert Guérin, Cengage Learning | Geht bis auf Byte-Ebene, deckt NRPN/RPN vollständig ab. Das Standardwerk für technische Tiefe — empfehlenswert wenn die MMA-Spec zu trocken ist. |
| Hersteller-Dokumentationen — Moog Sub 37 MIDI Spec | Jedes MIDI-Gerät liefert eine „MIDI Implementation Chart” — die zuverlässigste Quelle für gerätespezifisches Verhalten, besonders für NRPN-Adressen. |
Tipp: Jedes Stück MIDI-Hardware wird mit einem MIDI-Implementation-Chart geliefert. Es ist eine Tabelle aller Nachrichten, die das Gerät senden und empfangen kann, welche CCs es erkennt, das SysEx-Format, NRPN-Parameter. Lade das PDF für jede Hardware herunter, die du besitzt. Beim Moog Sub 37 habe ich den ±24-Halbton-Pitch-Bend-Bereich per RPN aus dem Implementation-Chart gelernt — in den Marketingmaterialien wird er nie erwähnt.