Pro-C-Dur
Volkers Editorial
Zeig's mir noch einmal, Sam!
Dieses Browsen in der MIDI-Standard-Datei sei an einem Beispiel gezeigt; danach können Sie es an Ihren eigenen MIDI-Dateien einmal selbst ausprobieren. Zuvor muss jedoch noch etwas über das TSE3MDL-Format gesagt werden: Dieses Dateiformat ist objektorientiert aufgebaut und daher in sogenannten chunks organisiert. Chunks sind alle sehr einfach aufgebaut - ein chunk besteht aus einem Titel, einer öffnende Klammer, Daten (und das können wieder andere chunks sein!) und schließlich einer schließenden Klammer. Chunks enthalten u. a. Zeit-Signale, Tracks, Phrasen, Midi-Filer, Midi-Parameter etc. Eine Liste findet man unter [5] (oder in TSE3MDL.html auf der CD).
Für uns ganz wichtig ist der Phrase-chunk, der viele der MIDI-Befehle und auch die NOTE_ON- und NOTE_OFF-Informationen enthält. Dabei wird ein MIDI-Befehl in der TSE3MDL-Schreibweise in die Form TIME:STATUS/DATA1/DATA2/CHANNEL/PORT gebracht, wobei alle Einträge klar lesbare Zahlen (dezimal) sind. Außerdem hat der NOTE_ON-Befehl noch die Zusatzeigenschaft, dass ihm direkt die NOTE_OFF-Information angehängt wird (so erspart man sich das lange Suchen, wann der Ton denn endlich aufhört), und zwar als Anhängsel in der Form -OFFTIME:OFFSTATUS/OFFDATA1/OFFDATA2/OFFCHANNEL/OFFPORT. Doch nun zum Beispiel: Dafür habe ich mir bei [6] die MIDI-Datei r-pf01.mid für das Preludium zum "Wohltemperierten Klavier" in C-Dur von J. S. Bach (Abbildung 2) heruntergeladen. Um zu sehen, was in dieser Datei steht, erzeugen wir aus ihr mit
tse3play --noplay --out-tse3mdl jsb.tse3 r-pf01.mid
die Datei jsb.tse3 im TSE3MDL-Format (wer --noplay weglässt, kann bei der Übersetzung sogar zuhören und bekommt auch noch die MIDI-Kanalausgaben in Farbe präsentiert - es lohnt sich!). Alle Optionen des Programms tse3play erhält man über Angabe der Option -h. In unserem Beispiel findet sich nun im ersten Events-chunk die NOTE_ON-/NOTE_OFF-Information, für die wir uns interessieren:
Phrase
{
Title:Imported Phrase
…
Events
{
…
780:9/60/76/3/0-1074:8/60/1/3/0
822:9/64/114/2/0-1056:8/64/1/2/0
861:9/67/114/2/0-898:8/67/1/2/0
899:9/72/119/1/0-934:8/72/1/1/0
937:9/76/119/1/0-973:8/76/1/1/0
978:9/67/127/2/0-1015:8/67/1/2/0
1015:9/72/119/1/0-1052:8/72/1/1/0
1055:9/76/119/1/0-1092:8/76/1/1/0
…
}
}In Tabelle 4 sind die Informationen der TSE3MDL-Datei direkt neben die entsprechenden MIDI-Befehle gesetzt. Die Beziehung der Daten-Bytes ist sofort klar; es handelt sich links um die Dezimal- und rechts um die Bit-Schreibweise. Der Zusammenhang von Status-Byte, Status-Nibble und Kanal-Nibble ist auch leicht zu sehen. Stellt man die vier Bytes des Status den vier Bytes des Kanals vorneweg, so muss man sie mit 16 multiplizieren, und man erhält den einfachen arithmetischen Zusammenhang Status-Byte = Status-Nibble*16 + Kanal-Nibble.
Tabelle 4: Vergleich TSE3MDL - MIDI-Befehle
| TSE3MDL-Event |
| MIDI-Befehle | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Status-Nibble | Ton | Lautstärke | Kanal | Status-Nibble | Ton | Data2 | Kanal | Note | ||||||
| NOTE_ON NOTE_OFF | ||||||||||||||
| NOTE_ON | Nibble | NOTE_OFF | Nibble | Status-Byte | Ton | Lautstärke | Status-Byte | Ton | Tonabfall | |||||
| 9 | 60 | 76 | 3 | 8 | 60 | 1 | 3 | c1 | 10010011 | 00111100 | 01001100 | 10000011 | 00111100 | 00000001 |
| 9 | 64 | 114 | 2 | 8 | 64 | 1 | 2 | e1 | 10010010 | 01000000 | 01110010 | 10000010 | 01000000 | 00000001 |
| 9 | 67 | 114 | 2 | 8 | 67 | 1 | 2 | g1 | 10010010 | 01000011 | 01110010 | 10000010 | 01000011 | 00000001 |
| 9 | 72 | 119 | 1 | 8 | 72 | 1 | 1 | c2 | 10010001 | 01001000 | 01110111 | 10000001 | 01001000 | 00000001 |
| 9 | 76 | 119 | 1 | 8 | 76 | 1 | 1 | e2 | 10010001 | 01001100 | 01110111 | 10000001 | 01001100 | 00000001 |
| 9 | 67 | 127 | 2 | 8 | 67 | 1 | 2 | g1 | 10010010 | 01000011 | 01111111 | 10000010 | 01000011 | 00000001 |
| 9 | 72 | 119 | 1 | 8 | 72 | 1 | 1 | c2 | 10010001 | 01001000 | 01110111 | 10000001 | 01001000 | 00000001 |
| 9 | 76 | 119 | 1 | 8 | 76 | 1 | 1 | e2 | 10010001 | 01001100 | 01110111 | 10000001 | 01001100 | 00000001 |
Wer genau hinguckt, sieht die unterschiedlichen Lautstärken in den MIDI-Befehlen. Das ist ein guter Hinweis darauf, dass das Stück mit einem Instrument eingespielt wurde und nicht die Noten per Maus-Click auf einem Computer eingegeben wurden. Und nun legt mal alle los! An die Tasten und in guter alter Casablanca-Manier: And can't you remember it? A bit is just a bit…
Glossar
Instrumentenbauer
Landwirt, der seinen Stall mit einer Tongabel ausmistet, um sich klassisch mit Roggen-Roll zu ernähren.
Sequencer
Gewissermaßen ein Tonbandgerät, das jedoch keine Klänge, sondern nur die MIDI-Befehle aufzeichnet. Dadurch kann der Klang später ausgetauscht werden.
Nibble
Ein Halb-Byte, also die ersten oder die letzten vier Bits in einem Byte. An den ersten vier Bits des Status-Bytes lässt sich der Befehl erkennen, daher nennt man diese ersten vier Bits auch Status-Nibble.
Kammerton
Der für alle Musikinstrumente gültige Stimmton, das eingestrichene a (auch A1 oder a1), der im Jahr 1939 international auf 440 Hz festgelegt wurde.
Presets
Klangeinstellungen, die auf einem Synthesizer für eine bestimmte Klangerzeugung eingestellt sind. In der Regel sind dies 128 Einträge (daher auch die Werte 0-127 für das Byte 0ppppppp); die Zählung ist aber stark herstellerabhängig.
Editor-Programme
Programme, die die vielen (oft über hundert) Parameter, die ein Synthesizer für einen Preset gespeichert hat, graphisch aufarbeiten und so dem Sound-Entwickler die Arbeit wesentlich erleichtern. Damals gab es auf dem Atari für so ziemlich jeden Synthesizer auch ein Editor-Program. Warum gibt es die nicht mehr für Linux? Das ist also ein offener Aufruf an alle MIDI-Programmierer: Schreibt Editor-Software für Synthesizer. Das ist noch ein echtes Nischensegment.
Infos
[1] Das Album "The Aura Will Prevail" von George Duke (der auch lange Pianist bei Frank Zappa war), einem der größten Pioniere in der Synthesizer-Welt, wurde u. a. noch mit Analog-Synthesizern erarbeitet.
[2] LinuxUser berichtete in Ausgabe 02/2002 vom wiedergeborenen Spieleklassiker iMaze, der 1987 über die MIDI-Schnittstelle netzwerkfähig gemacht wurde.
[3] http://TSE3.sourceforge.net
[4] http://anthem.sourceforge.net



