Montanasoft

Der Aufbau von Midi-Dateien

Midi-Header
Track-Header 1 (Spurkopf 1)
Track 1 (Spurdaten Spur 1)
Track-Header 2 (Spurkopf 2)
Track 2 (Spurdaten Spur 2)
Track-Header n (Spurkopf n)
Track n (Spurdaten Spur n)
Einspurige Midi-Dateien enthalten nur für eine Spur Spurkopf und Spurdaten.

Der Midi-Header (Midi-Kopf)
Die ersten 14 Bytes einer Midi-Datei enthalten den Midi-Header. Dieser ist wie folgt aufgebaut (die Daten liegen im Big-Endian-Format vor):

Bytes Daten-Typ Daten Bedeutung
1 - 4 CHAR MThd Kennung Midi-Header
5 - 8 DWORD 00 00 00 06 Größe des Midi-Headers in Byte
9 - 10 WORD
00 00
00 01
00 02
Midi-Format
einspurig
mehrspurig synchron
mehrspurig asynchron
11 - 12 WORD aa bb Anzahl der Spuren
13 - 14 WORD aa bb Deltawert für eine Viertelnote (PPQN)

Der Track-Header (Spur-Kopf)
Ein Spurkopf beinhaltet 8 Bytes: (die Daten liegen im Big-Endian-Format vor)
Bytes Daten-Typ Daten Bedeutung
1 - 4 CHAR MTrk Kennung Midi-Track
5 - 8 DWORD aa bb cc dd Spurgröße der Spur excl. Spurkopf

Die Tracks (Spur-Daten)
Die Spur-Daten liegen in Midi-Dateien als Bytefolgen vor. Sie haben lediglich Steuer-Funktion, sind also keine Klang-Daten. Diese Steuerdaten werden in Form von Messages an das Midi-Gerät gesendet. Das erste Byte dieser Messages wird Status-Byte genannt. Dieses beinhaltet den Typ der Message; bei Channel-Messages wird dieses Byte bei der Auswertung in zwei Halb-Bytes (Nibbles) geteilt, wobei das höherwertige Halb-Byte die Message und das niederwertige Halb-Byte den Midi-Kanal repräsentiert. Jeder Message ist ein Deltawert vorangestellt der festlegt, wie lange 'gewartet' werden soll, bis die Message ausgeführt wird. Der Deltawert ist NULL, wenn die Message sofort ausgeführt werden soll.
Es ist theoretisch möglich, dass eine Spur keine Daten enthält, was natürlich wenig sinnvoll ist. Eine Message steht jedoch auf jeden Fall in der Spur: die Spurende-Message.
In den Spuren steht also jeweils ein Deltawert gefolgt von einer Message.

Beispiel für eine Midi-Datei, in der vier Viertelnoten gespielt werden:
    
4D 54 68 64 00 00 00 06 00 00 00 01 01 80 ;Midi-Kopf
4D 54 72 6B 00 00 00 28 ;Spurkopf
;Spurdaten....
(00) (90 30 4E) ;Note an
(83 00) (90 30 00) ;Note aus
(00) (90 30 4E) ;Note an
(83 00) (90 30 00); Note aus
(00) (90 30 4E) ;Note an 
(83 00) (90 30 00) ;Note aus
(00) (90 30 4E) ;Note an
(83 00) (90 30 00) ;Note aus
(00) (FF 2F 00) ;Spurende-Message
    
    
(Die Klammern dienen der Abgrenzung Deltawert-Message. Sie stehen wie die Kommentare selbstverständlich nicht in der Midi-Datei!)