MIDI von Anfang an: Das MIDI-Datenformat

Atari und MIDI. Eine der erfolgreichsten Ehen der Computergeschichte. Und es sind auch die Musiker, die dem Atari die Treue halten. Und genau deshalb wollen wir dem Thema Atari & Musik auch in der st-computer in Zukunft wieder mehr Raum geben. Den Anfang macht geballte und im Lehramt erprobte Fachkompetenz.

Professor Dr. Herbert Walz berichtet im ersten Teil seines MIDI-Tutorials von der Anwendung von Atari-Software an der Fachhochschule München.

Warum wählte man eigentlich für die MIDI-Datenübertragung ein serielles Datenformat? Es liegt doch auf der Hand, dass Daten, die hintereinander übertragen werden, viel mehr Zeit benötigen als wenn sie parallel, also zu mehreren zur gleichen Zeit, übertragen würden. Das ist schon richtig, aber parallele Datenübertragung ist wegen des Übersprechens, das durch parasitäre Kapazitäten zwischen den parallelen Leitern verursacht wird, nur auf kurzen Leitungen möglich. Bei serieller Datenübertragung ist dies hingegen prinzipiell nichtmöglich. So werden lange Leitungen möglich, wie dies auf Bühnen oder in Studios erforderlich ist.

# MIDI-Frequenztabelle
Note Frequenz in Hz dezimal hex
c3 1046.5 84 54
h2 987.8 83 53
ais2 932.3 82 52
a2 880 81 51
gis2 830.6 80 50
92 784.0 79 4F
fis2 740 78 4E
f2 698.5 77 4D
e2 659.3 76 4C
dis2 622.3 75 4B
d2 587.3 74 4A
cis2 554.4 73 49
c2 523.3 72 48
h1 493.9 71 47
ais1 466.2 70 46
a1 440 69 45
gis1 415.3 68 44
gi 392 67 43
fis1 370 66 42
f1 349.2 65 41
ei 329.6 64 40
dis1 311.1 63 3F
d1 293.7 62 3E
cis1 277.2 61 3D
c1 261.6 60 3C
h 246.9 59 3D
ais 233.1 58 3A
a 220 57 39
gis 207.7 56 38
g 196 55 37
fis 185 54 36
f 174.6 53 35
e 164.8 52 34
dis 155.6 51 33
d 146.8 50 32
cis 138.6 49 31
c 130.8 48 30
H 123.5 47 2F
Ais 116.5 46 2E
A 110 45 2D
Gis 103.8 44 2C
G 98 43 2B
Fis 92.5 42 2A
F 87.3 41 29
E 82.4 40 28
Dis 77.8 39 27
D 73.4 38 26
Gis 69.3 37 25
G 65.4 36 24

Der MIDI-Standard wurde zu Zeiten von 8-Bit-Computern entwickelt. Es standen also für ein Datenwort nur acht Bit zur Verfügung. Wie später gezeigt werden wird, sind diese auch dringend nötig. Da man aber bei serieller Datenübertragung ein Start- und sicherheitshalber auch noch ein Stop-Bit benötigt, mussten diese zu den acht unbedingt benötigten Bits hinzugefügt werden. Dies wird aber von der Hardware erledigt, ln Wirklichkeit handelt es sich also um ein 10-Bit-Format. Die Software braucht aber nur acht Bit davon zu verarbeiten. Alle MIDI-Befehle passen somit in das 8-Bit-Datenformat, sind also in Bytes organisiert.

Auch die verhältnismäßig geringe Übertragungsrate von rund 31 kBaud ist ein Produkt der Entstehungszeit. Die nächst höhere, genormte Übertragungsrate von 38 kBaud war in der 8-Bit-Ära unerreichbar. So erhöhte man eben die Übertragungsrate auf einen Wert, der damals technisch möglich und doch so schnell war, dass der zeitliche Unterschied zwischen den nacheinander übertragenen Töne so gering wurde, dass er unhörbar blieb und die Töne scheinbar gleichzeitig erklangen. So ergab sich diese, nicht nur für heutige Verhältnisse langsame Übertragungsrate, sondern auch deren „krummer" Wert, der nicht in das Raster der üblichen seriellen Übertragungsraten passt.

MIDI-Frequenztabelle

Wenn das Datenformat festliegt, ist die nächste Überlegung, wie die Informationen in ihm untergebracht werden können. Für ein Musik-Datenformat ist die wohl wichtigste Frage, wie die Kodierung der Tonhöhen erfolgen kann. Hierfür gibt es zwei Möglichkeiten:

Dabei muss man sich immer wieder in Erinnerung rufen, dass MIDI in einer Zeit entwickelt wurde, als nur 8-Bit-Computer existierten. Mit derartigen Computern war nur realisierbar, was in das 8-Bit-Format „hinein passte“. Nun benötigt die Kodierung der Tonfrequenz mit der für empfindliche Musikerohren nötigen Genauigkeit Datenwörter im 16-Bit-Format.

Bei der Nummerierung der Töne ist davon auszugehen, dass das menschliche Hörvermögen maximal zehn Oktaven umfasst. Mit zwölf Halbtönen pro Oktave ergibt dies insgesamt 120 Töne. Um diese zu numerieren reichen sogar schon sieben Bit, die einen Bereich von 0 bis 127 ermöglichen. Also kam auf 8-Bit-Computern nur die Nummerierung der Töne in Frage. Man begann einfach beim tiefsten Ton mit Null. In der umseitigen MIDI-Frequenztabelle ist der Bereich der häufigsten Tonhöhen angegeben.

MIDI-Nachrichten

Wenn die Tonhöhen kodiert sind, ist die nächste Frage, was mit ihnen geschehen soll. Töne müssen zumindest ein- und ausgeschaltet werden. Das reicht aber bei weitem noch nicht. Für meine Lehrveranstaltung „Musik für Multimedia“ an der FH München und die Programmierung an meinem Musikprogramm MusicEdit musste ich mir im Laufe der Zeit einen Überblick über sämtliche MIDI-Nachrichten verschaffen.

Übrigens: Die Befehle oder Kommandos werden im MIDl-System Messages - also Nachrichten oder auch Events - genannt. Wie in der Übersicht zu erkennen ist, teilen sich die MIDI-Nachrichten in zwei große Gruppen auf, nämlich in Channel- und System-Messages. Während die System-Nachrichten für das gesamte System, also alle angeschlossenen MIDI-Geräte gelten, wirken die Kanal-Nachrichten nur auf den jeweils angegebenen Kanal. Wie sich später noch zeigen wird, gibt es 16 davon, und da auf ihnen nur jeweils ein Klang eingestellt werden kann, sind sie gleichbedeutend mit Instrumenten. Diese Bedeutung kann noch dadurch unterstrichen werden, dass man bestimmte MIDI-Geräte über einzelne MIDI-Kanäle anspricht, was bei Verwendung vieler MIDI-Geräte auch kaum anders zu lösen ist. Es sei denn, man verwendet MIDI-Erweiterungen. So gibt es MIDI-Karten, die 2 * 1 6 MIDI-Kanäle zur Verfügung stellen. Besonders elegant wird dieses Problem heute mit USB-/MIDI-Konvertern (Universal-Serial-Bus) gelöst, worauf später noch näher eingegangen wird.

Channel-Voice-Messages

Diese Nachrichten beeinflussen direkt die Stimmen im akustischen Sinne. Sie sind nicht mit den Kanälen identisch, sondern diesen zugeordnet, damit ein polyphones Instrument mehrere Töne gleichzeitig spielen kann. Vielfach gibt die Musiksoftware diese Zuordnung vor. Bei meinem MusicEdit z. B. sind jedem MIDI-Kanal fünf Stimmen zugeordnet, sodass insgesamt 80 Stimmen zur Verfügung stehen.

NOTE OFF und NOTE ON schalten einen Ton aus oder ein. Aus heutiger Sicht muss betont werden, dass es sich um Töne und nicht um Noten handelt. Heuzutage beherrschen ja nicht nur Notationsprogramme sondern auch gute Sequenzerprogramme Noten. Hier zeigt sich ein gravierender Mangel von MIDI: Es sind nur Musik- und leider keine Notengrafik-Informationen definiert. Dies wird sich noch deutlicher beim später zu behandelnden Standard-MIDI-File zeigen.

Aber auch ein grundlegender Vorteil ist mit diesen beiden Anweisungen verbunden. So führt das Einschalten eines Tones dazu, dass der MIDI-Tonerzeuger die Ausführung dieser Anweisung übernimmt und somit der Computer, der diese Nachricht geschickt hat, frei ist. Normalerweise müsste der Computer jetzt warten, bis er den eingeschalteten Ton wieder ausschalten und dafür andere Töne einschalten muss. Diese Wartezeit kann aber auch für andere Aufgaben genutzt werden. So zeichnet mein MusicEdit in dieser Zeit die Lesemarke oder blättert Partiturseiten um - ohne jeglichen Temposchwankungen versteht sich. Auf einem Milan könnte ich sogar im Vordergrund diesen Text schreiben und im Hintergrund Musik abspielen -auch ohne jeglichen Temposchwankungen versteht sich.

POLY KEY PRESSURE und CHANNEL PRESSURE sollen druckvolle Musik ermöglichen, einerseits für jede Taste, also jeden Ton, andererseits für einen Kanal, also ein Instrument.

CONTROL CHANGE ermöglicht die Ansteuerung von frei verfügbaren Steuerausgängen für beliebige Verwendung. Einige Verwendungsmöglichkeiten traten dabei so häufig auf, dass sie zu Quasi-Standards wurden, wie später noch genauer gezeigt werden wird. Die übrigen sind nach wie vor frei verfügbar und werden für Effekte und auch von Bands zur Lichtsteuerung ihrer Bühnen-Show benützt.

PROGRAM CHANGE soll den Wechsel von Klangprogrammen aus-drücken. Was als Programm im MIDI-Klangerzeuger gemeint ist, der selbst ein Spezialcomputer zur Tonerzeugung ist, darf nicht mit Musikprogrammen verwechselt werden. Entsprechend des General-MIDI-Standards stehen hier 128 Klänge zur Verfügung. Mit den Erweiterungen GS und XG soll diese begrenzte Anzahl von Klängen erweitert werden.

PITCH WHEEL CHANGE ermöglicht die feinstufige Änderung der Tonhöhe um Schleifer zu ermöglichen.

Channel-Mode-Messages

Hierbei handelt es sich um Nachrichten zur Beeinflussung der Funktionsweise von MIDI-Tonerzeugern. Ganz bewusst sind diese Nachrichten mit Kanal-Nummern kodiert, damit es möglich ist einzelne MIDI-Tonerzeuger gezielt in ihrem Funktionsmodus zu beeinflussen.

RESET ALL CONTROLLERS setzt alle Controller in einen definierten Anfangszustand zurück.

LOCAL CONTROL ermöglicht die Trennung der Tastatur eines Synthesizers von seiner Tonerzeugung. So lässt sich die Tastatur ein- und ausschalten.

ALL NOTES OFF ist ein probates Mittel um alle momentan klingenden Töne abzuschalten. Bei meinem MusicEdit verwende ich diese Nachricht, wenn die Wiedergabe mitten im Musikstück abgebrochen werden soll, denn in diesem Falle ist es sehr wahrscheinlich, dass der Abbruch in gerade klingenden Tönen erfolgen soll. Diese Nachricht kann auch gut für den sogenannter „Panikschalter" verwendet werden, der meist das letzte Mittel gegen Tonhänger ist.

ONMIN OFF, OMNI ON, MONO ON und POLY ON sind durch die heutzutage übliche dynamische Stimmenverteilung weitgehend überflüssig geworden. Man verwendet meist ständig POLY ON und verläßt sich darauf, dass der heute meist üppige Stimmenvorrat beliebig je nach Bedarf auf die Kanäle verteilt wird und so in jedem Falle ausreicht.

System-Exclusive-Messages...

zeichnen sich gegenüber allen übrigen Nachrichten durch beliebige Anzahl von Bytes aus. Um dabei Anfang und Ende eindeutig zu kennzeichnen, beginnen sie immer mit hexadezimal f0 und enden mit hex. f7, abgekürzt EOX (End Of Exclusive). Dieses flexible Nachrichtenformat wird für umfangreiche Messages, wie etwa Sound-Dumps gebraucht, wie man das Auslesen aller Daten eines bestimmten Klanges nennt. Auch für den sogenannte „General-MIDT-Setup eignet sich diese Nachrichtenart vorzüglich. Ich finde es immer wieder lästig, wenn Musikprogramme dies nicht vor dem Start eines Musikstückes automatisch erledigen. Es bleibt dann dem Anwender überlassen zu wissen, welche der vielen Tasten er drücken muss um sein MIDI-Soundmodul in den General-MIDI-Modus zu schalten. Gelingt dies nicht, stimmen die Klänge nicht. Mein MusicEdit nimmt dem Anwender diese lästige Aufgabe ab und sendet vor jeder Wiedergabe eines Musikstücks diese Nachricht. Da diese Nachricht den Sampler Yamaha A3000 in der ersten Version seines Betriebssystems verwirrte, habe ich sie abschaltbar gestaltet. In der überarbeiteten Version des Betriebssystems war dies schließlich nicht mehr der Fall. So muss es auch sein, denn eine reguläre MIDI-Nachricht muss entweder korrekt umgesetzt oder aber ignoriert werden, wenn sie ein MIDI-Gerät nicht unterstützt.

System-Common-Messages

MIDI TIME-CODE QUARTER FRAME ist ein Zeitcode im SMPTE-Format, wie er zur Synchronisation verschiedener Geräte benutzt wird.

SONG POSITION POINTER gibt die aktuelle Position in einem Musikstück an. Mit ihm kann man an eine bestimmte Stelle in einem Musikstück springen, diese Stelle beliebig oft wiederholen usw.

SONG SELECT ermöglicht die Auswahl eines Musikstückes, wenn mehrere Musikstücke im Speicher eines Computers gehalten werden. Dies ist wichtig um Musikstücke ohne lange Ladezeiten starten zu können

TUNE REQUEST fordert alle angeschlossenen MIDI-Tonerzeuger auf, sich neu zu stimmen. Dies ist insbesondere bei analogen Tonerzeugern öfters vonnöten, weil diese sich verhältnismäßig leicht verstimmen. Aber auch bei digitalen Tonerzeugern ist diese Nachricht ersetzbar, wenn deren Tonhöhe geändert wurde.

END OF EXCLUSIVE ist eigentlich eine System-Common-Message. Ihre Verwendung wurde bei den System-Exclusiv-Nachrichten bereits beschrieben.

System-Real-Time-Messages

Diese sogenannten „Echtzeitnachrichten" haben absoluten Vorrang vor allen anderen Nachrichten. Sie bestehen nur aus einem Byte und sind daher besonders schnell zu verarbeiten. Sie können sogar in Nachrichten, die aus mehreren Bytes bestehen, eingeschoben werden.

TIMING CLOCK ist ein Zeittakt-Signal, das von MIDI-Geräten erzeugt, gesendet und empfangen werden kann. Es dient zur Bestimmung des Tempos von Sequenzern und Drum-Computern. Um eine hohe Genauigkeit zu erreichen werden 24 Clock-Impulse pro Viertelnote gesendet, also 96 Clocks pro Takt.

START bewirkt, dass das mit SONG SELECT gewählte Musikstück von Anfang an wiedergegeben wird. Da diese Nachricht auf alle angeschlossenen MIDI-Geräte wirkt, werden auch diese synchron gestartet.

CONTINUE ermöglicht die Fortsetzung der Wiedergabe an der Stelle, an der gerade der SONG POSITION POINTER steht. Auch diese Nachricht wirkt auf alle angeschlossenen MIDI-Geräte, sodass auch diese synchron die Wiedergabe fortsetzen.

STOP führt dazu, dass die Wiedergabe gestoppt wird und zwar exakt synchron für den gesamten MIDI-Verbund. Die Wiedergabe kann dann entweder an dieser Stelle mit CONTINUE fortgesetzt oder mit START vom Anfang an neu begonnen werden.

ACTIVE SENSING dient zur Funktionskontrolle, ob Geräte im MIDI-Verbund abgeschaltet oder ob Verbindungen unterbrochen wurden. Es wird alle 0.3 Sekunden gesendet. Da nicht alle MIDI-Geräte in der Lage sind diese Nachricht zu senden, reagieren sie erst darauf, wenn sie dieses Byte mindestens einmal empfangen haben.

SYSTEM RESET bringt alle angeschlossenen MIDI-Geräte in den Anfangszustand. Dies kann z. B. das letzte Mittel bei Notenhängern sein, wenn insbesondere nicht klar ist, auf welchem MIDI-Gerät der Ton hängt.

Anordnung in Hexadezimal-Darstellung

In dieser Darstellungsweise erkennt man die Ordnung der MIDI-Nachrichten am deutlichsten. Wie eingangs erwähnt, reichen für die Kodierung der Tonhöhe 7 Bit. Also hat man auch alle anderen Daten für den Wertebereich 0 bis 127 vorgesehen. Somit ist das achte Bit noch frei und kann als Status-Bit verwendet werden. Weil die meisten MIDI-Nachrichten nur maximal 2 Daten-Bytes haben, genügt das Status-Byte zur Unterscheidung der einzelnen Nachrichten, die ja alle hintereinander kommen. Die einzige Ausnahme sind - wie schon erwähnt - die System-Exclusiv-Nachrichten mit beliebig vielen Daten-Bytes. Diese haben dann folgerichtig ein Start-und ein Stop-Bit um die nötige Übertragungssicherheit zu erreichen.

Somit ist bei allen Status-Bytes das Bit Nr. 7 (das erste Bit hat die Nr. 0) gesetzt. Sie beginnen also bei hex 80. Nun ist der Wertebereich von 80 bis 8f noch frei und kann von 0 bis f mit 16 MIDI-Kanälen belegt werden. Wenn man bedenkt, dass ein großes Orchester ziemlich genau maximal 16 Instrumentengruppen umfasst, sind 16 MIDI-Kanäle eigentlich richtig gewählt. Es gibt aber Anforderungen bei umfangreichen MIDI-Anlagen, die mehr als 16 MIDI-Kanäle wünschenswert erscheinen lassen. Wie schon erwähnt, schaffen hier spezielle Steckkarten und insbesondere der USB Abhilfe.

Die Channel-Voice-Messages liegen mit ihren Status-Bytes im Bereich von 80 bis ef. Ihnen folgen ein oder zwei Daten-Bytes im Bereich von 0 bis 7f.

Die Channel-Mode-Messages liegen mit ihren Status-Bytes von bO bis bf zwar in obigem Bereich, sind aber von ihrer Funktion her eine eigene Gruppe. Wie noch näher gezeigt werden wird, werden sie mit Controller-Nachrichten realisiert, die eben mit bO beginnen. Ihr erstes Daten-Byte ist auf den Bereich 79 bis 7f beschränkt. Das zweite Daten-Byte ist 0/7f für „aus/ein" oder ist überflüssig und wird ignoriert.

Die System-Exclusive-Messages folgen nach ef mit ihrem Status-Byte von f0, das auch gleichzeitig System-Exclusive-Start bedeutet. Dann folgen beliebig viele Daten-Bytes im Bereich von 0 bis 7f, und dann schließlich End-of-Exclusive mit f7, das aber bereits zu den System-Common-Messages gehört.

Die System-Common-Messages folgen nach f0 mit ihren Status-Bytes von f1 bis f7, wobei f7 - wie schon erwähnt - EOX ist. Danach folgen ein oder zwei Daten-Bytes im Bereich von 0 bis 7f.

Die Real-Time-Messages folgen nach f7 mit ihren Status-Bytes im Bereich von f8 bis ff. Sie haben keinerlei Daten-Bytes.

Der Running-Modus

Der Running-Modus stellt eine Besonderheit der Channel-Messages dar und ist ein typisches Produkt der 8-Bit-Ära, als man aus Leistungsmangel mit jedem Byte geizen musste. Wenn z. B. ein Akkord eingeschaltet wird, werden mehrere Töne eingeschaltet. Ihre Note-On-Nachrichten haben alle dasselbe Status-Byte. Es kann also auch weggelassen werden. Es gilt die Regel: Solange kein anderes Status-Byte kommt gilt der vorhandene Status weiter.

Mit USB in die MIDI-Zukunft

Da der Universal-Serial-Bus sehr viel mehr als 16 Geräte unterstützt, ist es kein Problem 216 oder 316 MIDI-Kanäle zur Verfügung zu stellen. So ganz nebenbei wird dabei auch das bei umfangreichen MIDI-Anlagen auftretende Geschwindigkeitsproblem gelöst. Man überlässt dem um ein Vielfaches schnelleren USB-Bus den größten Teil des Datentransfers und setzt erst unmittelbar vor den MIDI-Geräten auf das MIDI-Format um. Für ein einziges Gerät ist MIDI allemal schnell genug. Es gibt auch bereits die ersten MIDI-Geräte, die neben den üblichen MIDI-Eingängen schon einen USB-Eingang besitzen.

Literatur:

Die große Welt der MIDI-Daten, Dr. H. J. Schäfer, Heim Verlag, ISBN: 3-923250-72-X
Maximum MIDI - Music Applications in C++, Paul Messick, Manning Puclications Co., ISBN: 1-884777-44-9
MIDI Programmers Handbook, Steve De Furia & Joe Scacciaferro, M & T Publishing Inc., ISBN: 1-55851-068-0.
Taschenbuch Multimedia, Prof. Dr. Peter A. Henning, Fachbuchverlag Leipzig, ISBN: 3-446-21274-4.

Prof. Herbert Walz, Anton-Köck-Str. 8a, D-82049 Pullach


Herbert Walz
Aus: ST-Computer 01 / 2001, Seite 32

Links

Copyright-Bestimmungen: siehe Über diese Seite