MIDI-Nachrichten verstehen: Von Bits und Bytes zur Musik

Logic Pro MIDI MIDI Protocol +2 mehr
MidiSpy-Log mit farbcodierten MIDI-Bytes — Status-Bytes in Amber, Data-Bytes in Cyan, mehrere MIDI-Ports parallel sichtbar

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-Position76543210
Wert1286432168421
DezimalBinärBedeutung
00000 0000Null
10000 0001Eins
20000 0010Zwei (Stelle 2 gesetzt)
40000 0100Vier (Stelle 3 gesetzt)
80000 1000Acht (Stelle 4 gesetzt)
150000 1111Alle 4 Bits gesetzt = Maxmimum
1281000 0000
2551111 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. 9FH bedeutet: 9 = 1001 binär, F = 1111 binär → zusammen 1001 1111 binä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 = 011010010110.

BinärHexBinärHex
0000010008
0001110019
001021010A
001131011B
010041100C
010151101D
011061110E
011171111F

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.

SchreibweiseSystemDezimalwertMIDI-Bedeutung
150Dezimal150nicht leicht ablesbar
0x96Hexadezimal (C-Stil)150Note On, Kanal 7 (sofort sichtbar)
96HHexadezimal (MIDI-Notation)150in Roland/Yamaha-Handbüchern üblich
10010110Binär150exakt, 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.

Binär ↔ Hex Konverter

Presets:
Binär 0000 0000
Hex 0x00
Dezimal 0
Oberes Nibble (Bits 7–4) 0000 0
Unteres Nibble (Bits 3–0) 0000 0

Nibble-Referenz (Binär → Hex)

BinärHexDezBinärHexDez
000000100088
000111100199
0010221010A10
0011331011B11
0100441100C12
0101551101D13
0110661110E14
0111771111F15

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:

Anatomie des MIDI-Status-Bytes: oberes Nibble (Bits 7–4) kodiert den Nachrichtentyp, unteres Nibble (Bits 3–0) kodiert den MIDI-Kanal 1 0 0 1 n n n n Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Nachrichtentyp (Bits 7–4) MIDI-Kanal (Bits 3–0) Beispiel: 0x9n = Note On, n = Kanal (0–15)

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.

TypHexZweckBytes
Note Off0x8nTaste losgelassen3
Note On0x9nTaste gedrückt3
Control Change0xBnRegler, Pedale3
Program Change0xCnKlang wechseln2
Pitch Bend0xEnTonhöhenänderung3
MIDI Clock0xF8Tempo-Sync1
System Exclusive0xF0Herstellerdatenvariabel

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:

NoteMIDI-NummerHex
C (tiefste MIDI-Note)00x00
Mittleres C (C3 in Logic)600x3C
A4 — Kammerton 440 Hz690x45
G9 (höchste MIDI-Note)1270x7F

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.

VelocityBedeutung
0Wird als Note Off behandelt
1–63Piano bis Mezzoforte
64Ungefähre Mitte
65–127Mezzoforte bis Fortissimo
127Maximal

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 00 hat exakt dieselbe Wirkung wie 80 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#FunktionTypischer Einsatz
0Bank Select MSBSoundbank wechseln (zusammen mit CC#32)
1Modulation WheelVibrato, LFO-Tiefe
7Channel VolumeGesamtlautstärke des Kanals
10PanPanorama (0 = links, 64 = Mitte, 127 = rechts)
11ExpressionDynamisches Volumen innerhalb eines Parts
64Sustain Pedal0–63 = off, 64–127 = on
74Brightness / Filter CutoffHäufig für Filteröffnung belegt
121Reset All ControllersAlle Regler zurücksetzen
123All Notes OffPanic-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 00 entspricht 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

ByteWertBedeutung
1F0HSysEx Start
2Hersteller-ID1 oder 3 Bytes
3Geräte-ID0–127 oder 7FH (Broadcast)
4…nDatenBeliebige 7-Bit-Werte
LetztesF7HSysEx Ende (EOX)

Hersteller-IDs

HerstellerID
Roland41H
Yamaha43H
Korg42H
Kawai40H

Ä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

IDTypVerwendung
7DHNicht-kommerziellBildung, Tests, Prototypen
7EHUniversal Non-Real-TimeIdentity Request, GM System On, Sample Dump
7FHUniversal Real-TimeGerä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).

MIDI-Clock-Zeitlinie: Master sendet F8H-Impulse mit FAH Start, FCH Stop, FBH Continue; Slave reagiert entsprechend Master Slave FAH FCH FBH ▶ Spielt ■ Gestoppt ▶▶ Fortgesetzt F8H-Impulse (24 pro ♩) FAH = Start FCH = Stop FBH = Continue F8H = Clock-Impuls
NachrichtByteFunktion
MIDI ClockF8H24 Impulse pro Viertelnote
StartFAHVon Position 0 beginnen
ContinueFBHVon aktueller Position fortsetzen
StopFCHTransport pausieren
Song Position PointerF2HPosition 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.

MIDI 1.0 versus MIDI 2.0 Vergleich: Velocity, Controller, Pitch-Bend-Auflösung und Kanalanzahl MIDI 1.0 MIDI 2.0 Velocity 7-Bit → 128 Stufen Velocity 16-Bit → 65.536 Stufen Controller 7-Bit → 128 Stufen Controller 32-Bit → 4.294.967.296 Pitch Bend 14-Bit → 16.384 Stufen Pitch Bend 32-Bit → 4,3 Milliarden Kanäle 16 · kein Handshake Kanäle 256 · bidirektional (MICI)

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

QuelleURL
MIDI Manufacturers Association (MMA)midi.org
Complete MIDI 1.0 Detailed Specificationmidi.org/specifications
MIDI 2.0 Specificationmidi.org/midi-2-0
Universal System Exclusive Messagesmidi.org/specifications/midi1specs

Praxisnahe Sekundärquellen

QuelleSchwerpunkt
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 LearningGeht 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 SpecJedes 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.