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 Herbert Walz berichtet im fĂŒnften Teil seines MIDI-Tutorials von der Anwendung von Detailkenntnissen in der Praxis der Notation.
Um mit Standard-MIDI-Files besser arbeiten zu können ist es ganz hilfreich, wenigstens das Grundlegende dieses Musikformats zu verstehen. Auch wird man eher bereit sein auf Schwierigkeiten einzugehen, die sich beim Konvertieren hier und dort einstellen mögen. Als Notenbeispiel soll wiederum die - bereits im vorherigen Beitrag verwendete - einfache Kadenz dienen (Bild 1).
Dieses einfache Notenbeispiel wurde in ein Standard-MIDI-File gewandelt. Die Ansicht von dessen Innenleben wurde mit dem Disketten- und Festplattentool DISKUS von Dr. Uwe Seimet erstellt. Von demselben Autor stammt auch der Treiber fĂŒr Festplatten und sonstige Laufwerke HDDRIVER, mit dem heute wohl die meisten Ataris und dazu kompatible Rechner arbeiten dĂŒrften.
In der Hexadezimal-Darstellung des Diskmonitors (Bild 1) stehen in der Spalte ganz links jeweils die Nummern des ersten Bytes in der Zeile. In der ersten Zeile ist das natĂŒrlich die 0. Im mittleren Teil der Darstellung stehen die einzelnen Bytes. Ein Byte hat bekanntlich 8 Bit. In Hexadezimal-Darstellung lĂ€sst sich mit einer Stelle der Zahlenbereich von 0 bis 15 darstellen. FĂŒr ein Byte benötigt man also zwei Stellen in hexadezimaler Darstellung. Diese Zweiergruppen sehen Sie im mittleren Teil der Darstellung. Ganz rechts erkennen Sie dieselben Daten in ASCII, was auch kaum mehr Klarheit schafft. Lediglich die ersten vier Zeichen âMThd" sind deutlich zu erkennen. Bei ihnen wird spĂ€ter die ErklĂ€rung der Bedeutung des vorliegenden Datenwirrwarrs beginnen. ZunĂ€chst sei noch darauf hingewiesen, dass man im Diskmonitor auch noch den Cursor setzen kann. Setzt man ihn im mittleren Teil, werden die zugehörigen Daten im rechten Bereich markiert und umgekehrt. So wird die Zuordnung der Daten wesentlich erleichtert.
Bild 1: Einfache Kadenz mit MusicEdit dargestellt
Etwas gewöhnungsbedĂŒrftig ist die Handhabung des Wertes â00". Dieser wird als Leerstelle dargestellt, genauso wie die wirkliche Leerstelle â20". Aber dafĂŒr sieht die ASCII-Darstellung etwas ĂŒbersichtlicher aus. In einem Debugger wĂ€re â00" in der Hexadezimal-Darstellung auch als â0" in der ASCII-Darstellung zu sehen. Den Diskettenmonitor habe ich dem Debugger vor allem deshalb vorgezogen, weil sich von ihm problemlos Screen-Shots herstellen lassen. Der Pure-Debugger hingegen lĂ€sst keine Accessories zu. Diese werden aber gebraucht um die benötigten Bilder vom Bildschirm anfertigen zu können.
Nachdem also das Werkzeug vorhanden ist um das Innenleben von Standard-MIDI-Files zu ergrĂŒnden, muss noch die Anordnung der Daten geklĂ€rt werden um diese mit vertretbarem Aufwand analysieren zu können. Dabei zeigt es sich, dass es drei verschiedene Typen von Standard-MIDI-Files gibt:
Format 0: 1 Track
Das einfachste Formal
Format 1: Viele Tracks.
Das wohl am meisten verbreitete Format
Format2: EnthÀlt mehrere Standard-MIDI-Files vom Format 1.
Sehr komplex, bisher nicht benutzt
Das Format 0 soll als das einfachste der drei Formate zunĂ€chst analysiert werden. Dazu habe ich fĂŒr mein Musikprogramm MusicEdit eine entsprechende Analysefunktion geschrieben (Bild 3). Diese wird aber nur in die Entwicklungsversion eingebunden. FĂŒr Musiker ist sie nicht von Interesse und wĂŒrde das Programm nur unnötig aufblĂ€hen.
Das Standard-MIDI-File-Format ist ein sogenanntes âChunk-Format", also ein Block-Format. Es besteht aus mehreren Blöcken, an deren Anfang ihre Bezeichnung und danach ihre LĂ€nge steht. Aus ihrer Bezeichnung ergibt sich ihre Bedeutung. Die LĂ€ngenangabe dient der Kontrolle. Eine zusĂ€tzliche Erleichterung der Auswertung sind die mit doppelten Linien gekennzeichneten Zeilen. In ihnen wird die von der Analyseroutine ermittelte LĂ€nge ausgegeben, damit man diese nicht durch NachzĂ€hlen selbst ermitteln muĂ, was bei gröĂeren Standard-MIDI-Files sehr zeitraubend wĂ€re. Vorausgeschickt sei, dass in der Programmiersprache C/C++ âOx" die Kennung fĂŒr eine hexadezimale Zahl ist. Danach kommen die beiden Hexadezimal-Steilen die je vier - also insgesamt acht - Bit darstellen, was einem Byte entspricht.
1. Zeile: Der erste Block beginnt mit der Zeile, in welcher âMThd" steht. Dies bedeutet âMIDI-Track-Header". Dieser Block wird meist nur kurz âHeader-Block" genannt. Header bedeutet etwa Dateikopf. Links von MThd stehen vier Bit, die jeweils den ASCII-Code der vier Zeichen âMThd" im Hexadezimal-Format darstellen.
2.Zeile: In ihr steht die Anzahl der nachfolgenden Bytes in diesem Block. Das sind gerade einmal sechs an der Zahl, und zwar immer. Dazu wĂŒrde das eine Byte ausreichen, das den Wert sechs tatsĂ€chlich enthĂ€lt. Der Grund fĂŒr die vier Stellen dĂŒrfte sein, dass Bezeichnung und LĂ€nge bei allen Blöcken gleich behandelt werden sollen. Schon der nĂ€chste Block kann nahezu beliebig lang sein. In diesem Fall werden die vier Stellen fĂŒr die LĂ€ngenbezeichnung auch wirklich benötigt.
3. Zeile: In ihr steht das Format. Dazu stehen zwei Byte zur VerfĂŒgung, obwohl auch hier ein einziges reichen wĂŒrde. Im rechten von beiden steht ebenfalls eine Null, also handelt es sich um das Format 0.
4. Zeile: In ihr steht die Anzahl der nachfolgenden Tracks (was so viel wie âSpuren" bedeutet). Bei einem Standard-MIDI-File vom Format 0 steht dort immer eine 1, weil es ja nur einen Trackblock haben kann.
5. Zeile: In ihr stehen die SchlÀge pro Viertelnote, also die zeitliche Auflösung. In unserem Beispiel sind dies mit c = 12, also 12 *16 = 192.
Bild 2: Ein Standard-MIDI-File im Diskmonitor von MusicEdit
Versucht man in der Darstellung des Diskmonitors die Inhalte der Zeilen 1 bis 5 aufzufinden, wird dies dadurch sehr erschwert, dass die Byte-Gruppen lĂŒckenlos aufeinander folgen. Sie sind nicht so hilfreich in einzelne Zeilen aufgegliedert, wie dies in der Analyse-Routine von MusicEdit der Fall ist. Gelingt die Darstellung, stöĂt man in der ASCII-Darstellung am rechten Rand auf die Buchstabengruppe MTrk. Diese ist zwar durch den Zeilenumbruch getrennt, was jedoch in den Originaldaten ohne Belang ist, weil es dort keine LĂŒcken oder ZeilenumbrĂŒche gibt.
Der Track-Block MTrk
1. Zeile: Der zweite Block beginnt mit der Zeile, in der âMTrk" steht. Dies bedeutet âMIDI-Track-Block", kurz âTrack-Block" genannt. Links von MTrk stehen, wie beim vorherigen Block, die vier Bytes, welche die ASCII-Codes der vier Zeichen im hexadezimalen Format darstellen.
2. Zeile: In ihr steht die Anzahl der nachfolgenden Bytes in diesem Block. Von den vier Bytes, die diesen Wert reprĂ€sentieren, enthĂ€lt jenes ganz rechts 0x58, also 516 + 81 =88. Hier erkennt man sehr deutlich, dass bei gröĂerer Track-LĂ€nge die vier vorgesehenen Bytes durchaus benötigt werden.
3. Zeile: In ihr steht das erste Mal die sogenannte âDelta-Time", also der Zeitunterschied bis zum nĂ€chsten MIDI-Ereignis. Wenn die Delta-Time Null ist, bedeutet dies keinen Zeitunterschied, die Ereignisse passieren also gleichzeitig. Die Abfolge Delta-Time/Event muss immer eingehalten werden. Zur Anwendung kommt hier ein Format mit variabler LĂ€nge, damit man bei Zeiten, die in ein Byte passen, nur dieses eine Byte und bei lĂ€ngeren Zeiten so viele Bytes wie benötigt verwenden kann. Vor dem Wert der Delta-Time fĂŒgt die Analyse-Routine jeweils die Nummer des betreffenden Bytes hinzu, beginnend mit 0.
Die Nr. am Anfang der Delta-Time-Zeilen wird von der Analyseroutine hinzugefĂŒgt um lĂ€stiges NachzĂ€hlen zu ersparen. Es ist die Nummer des ersten Bytes in dieser Zeile. Diese bzw. die um eins höhere Nummer des ersten Bytes in der folgenden Zeile, soll bei den folgenden Zeilen verwendet werden.
4. Zelle oder 23. Byte: Dort steht das Kommando âPROGRAM CHANGE", das den Klang Nr. 74 auf MIDI-Kanal 1 einschaltet.
In den folgenden Zeilen werden auf den KanÀlen 2 und 3 noch die KlÀnge 58 und 59 eingeschaltet.
32. Byte: In dieser Zeile steht zum erstenmal ein sogenannter âMeta-Event". Dies sind Ereignisse, die sich von den ĂŒblichen unterscheiden, weil sie nicht direkt musikalische Aktionen auslösen, sondern allgemeine Daten des betreffenden MusikstĂŒcks enthalten. In dieser Zeile ist es das Tempo, aus dem man die Metronomzahl 60 errechnen kann.
39. Byte: In dieser Zeile steht das Meta-Event âTIME SIGNATUREâ. Daraus lĂ€sst sich der Takt (hier 4/4) und die Anzahl 1/32 pro Viertelnote, also 8 (was auch sonst?) ermitteln.
47. Byte: In dieser Zeile steht das Meta-Event âKEY SIGNATURE". Daraus lassen sich die Tonartvorzeichen (hier 2#) ermitteln.
53. Byte: In dieser Zeile steht das erste Kommando âNOTE ON". Damit wird auf Kanal 3 der Ton d mit der Dynamik mp eingeschaltet.
In den folgenden Zeilen werden die ĂŒbrigen Töne des Anfangsakkords eingeschaltet.
64. Byte: In dieser Zeile steht die erste Delta-Time, die gröĂer Null, nĂ€mlich 192, ist. Diese Zeit braucht zum erstenmal zwei Byte. Dies entspricht bei dem hier eingestellten Tempo einer Viertelnote. Da bis zu dieser Stelle im Standard-MIDI-File alle drei Töne des ersten Akkords eingeschaltet sind, wird dieser Akkord fĂŒr eine Viertelnote ausgehalten.
66. Byte: In dieser Zeile steht zum erstenmal das Kommando âNOTE OFF". Der Ton al auf Kanal wird abgeschaltet um spĂ€ter durch einen anderen ersetzt zu werden.
So geht es nun weiter bis zum Ende des Standard-MIDI-Files. Dort steht das Meta-Event âEND OF TRACK". Es besteht aus den drei Bytes FF 2F 00. Es ist aus PlatzgrĂŒnden in der Analyse-Darstellung nicht enthalten. Aber in der Darstellung des Diskmonitors kann man es am unteren Bildrand in der hexadezimalen Darstellung in der Bildmitte deutlich erkennen. Die drei nachfolgenden Bytes gehören nicht mehr zum Standard-MIDI-File. Die vorherigen Daten werden nur ĂŒberschrieben. An den Stellen, an denen dies nicht geschehen ist, bleiben die alten Daten stehen. All dies erschwert die Analyse von Standard-MIDI-Files ungemein.
Bild 3: Analyse des Standard-MIDI-Files des Beispiels
Bild 4: Wiedergabe-Dialog fĂŒr Standard-MIDI-Files bei MusicEdit
Standard-MIDI-Files laden und wiedergeben
Der zum Laden von Standard-MIDI-Files vorgesehene MenĂŒ-Eintrag befindet sich in der Regel im Menu Datei und heiĂt âLaden von Standard-MIDI-Files" oder auch âImport von Standard-MIDI-Filesâ. Bei MusicEdit erscheint nach dem Laden eines Standard-MIDI-Files der Dialog âStandard-MIDI-File wiedergebenâ (Bild 4).
Es gibt hier zwei unterschiedliche Verfahren. Bei manchen Musikprogrammen werden die Standard-MIDI-Files gleich wĂ€hrend des Ladens in ein wiedergebbares Format gewandelt. Dies verursacht nur eine kaum merkliche VerlĂ€ngerung der Ladenzeiten. MusicEdit verwendet ein anderes Verfahren, bei dem die Standard-MIDI-Files 1:1 geladen und dann wĂ€hrend der Wiedergabe fortlaufend gewandelt werden. Dieses Verfahren ist besonders schnell, setzt aber eine entsprechende Rechenleistung und -geschwindigkeitsoptimierte Software voraus. Schon auf TT und Falcon ist dies möglich. Auf einem Milan geschieht dies mit derartigen Geschwindigkeitsreserven, dass der Vorgang auch im Hintergrund möglich wĂ€re, wenn im Vordergrund z. B. ein Text geschrieben wird. Voraussetzung ist natĂŒrlich ein Multitasking-Betriebssystem wie N.AES oder das besonders schnelle MagiC. Ob diese Anwendung sonderlich sinnvoll ist, sei dahingestellt. Sie demonstriert aber vortrefflich die besondere StĂ€rke des Atari und dazu kompatiblen Maschinen bei MIDI-Anwendungen.
Mit dem Menu-Eintrag âMIDI-File umwandelnâ kann bei MusicEdit der Dialog âStandard-MIDI-File in Noten wandelnâ aufgerufen werden (Bild 5). Er enthĂ€lt nahe dem oberen Rand den Titel des Standard-MIDI-Files und am linken Rand die Nummern der MIDl-KanĂ€le. Desweiteren werden in der linken HĂ€lfte die aus dem Standard-MIDI-File gelesenen Analysedaten dargestellt: KlĂ€nge, Töne/Kanal, Format, Anzahl der Spuren, Metronomzahl, Tonart und Takt.
Die rechte HĂ€lfte enthĂ€lt ErgĂ€nzungsdaten, die zunĂ€chst als Vorschlagswerte aus den Analysedaten durch logische VerknĂŒpfungen gewonnen wurden. Sie können jedoch auch durch Daten ĂŒberschrieben werden, die aus eigenen Ăberlegungen hervorgehen. So ist es z. B. naheliegend, dass jeder Klang, also jedes Instrument, in einer eigenen Notenzeile notiert wird. Es werden aber auch manchmal zwei Instrumente pro Notenzeile notiert, eines mit dem Hals nach oben, das andere mit dem Hals nach unten. Bei dem hier zugrunde liegenden einfachen Beispiel ist jedes Instrument nur einstimmig. Die vorgeschlagene eine Stimme pro Notenzeile kann also beibehalten werden.
Bild 5: Dialog zum Wandeln von Standard-MIDI-Files in Noten bei MusicEdit
Der Vorschlagswert, den man ebenfalls nach eigenem GutdĂŒnken abĂ€ndern kann, betrĂ€gt vier Takte pro Notenzeile. Als minimale Tondauer wird 1/32 vorgeschlagen. Dies bedeutet, dass alle kĂŒrzeren Tondauern der sogenannten âQuantisierung" zum Opfer fallen. Bei der Umwandlung wird Tönen mit dem Vorzeichen â#" der Vorrang eingerĂ€umt. Man kann jedoch durch Anklicken des b-Knopfes den b-Vorzeichen den Vorrang einrĂ€umen. Ein Notensystem muss jeweils zunĂ€chst neu erstellt werden. Da aber bei einem unbekannten MusikstĂŒck meist mehrere Versuche erforderlich sind, bis die Noten in einem passenden Notensystem angeordnet sind, ist es ratsam dieses, sobald es gefunden ist, als Vorlage zu sichern um es bei weiteren Versuchen mit dem Button âLaden" einfach wieder komplett laden zu können. Mit âLöschen" kann schlieĂlich ein Standard-MIDI-File gezielt gelöscht und der dafĂŒr reservierte Speicher freigegeben werden.
Unschwer ist zu erkennen, dass die Umwandlung von Standard-MIDI-Files in Noten nicht zuletzt deshalb eine derart komplexe Aufgabe ist, weil nur Musik-und nicht Notendaten zur Verarbeitung vorgesehen sind. Aber dennoch haben moderne Musikprogramme diese Aufgabe in derart ĂŒberzeugender Weise gelöst, dass gegenwĂ€rtig keine Anzeichen erkennbar sind die Weiterentwicklung in Richtung zu einem Musik-Datenformat, das auch Notengrafik einschlieĂt, voranzutreiben.
Ausblick
Gerade das Standard-MIDI-File-Format kann dazu beitragen, dass Ataris und dazu kompatible Rechner Anschluss an die Welt der Standard-Computer halten. Aus diesem Grunde werde ich keine MĂŒhen scheuen mein MusicEdit weiterzuentwickeln. Dabei fĂ€llt mir allerdings auf, dass es zunehmend schwerer wird, passende Beispiele bei anderen Musikprogrammen zu finden. Wenn ich dann fĂŒr die in diesem Workshop benötigten Beispiele mein MusicEdit heranziehe, liegt dies weniger daran, dass ich hier die Internas am besten kenne, sondern zunehmend am Fehlen geeigneter anderer Musikprogramme.
Dieser Entwicklung muss entgegen gewirkt werden. Neue Hardware wird schlieĂlich nur entwickelt, wenn es genĂŒgend Software dafĂŒr gibt. Mein Appell geht also an alle Leser hierbei mitzuhelfen. Kleinliche Kritik an der unbeabsichtigten Hervorhebung meines MusicEdit hilft nicht weiter, sondern nur tatkrĂ€ftiges Entwickeln attraktiver Musik-Software - vor allem fĂŒr die schon bestehenden und bereits angekĂŒndigten Atari-Kompatiblen. Ich wĂŒrde diese neu geschaffene Vielfalt an MIDI-Software gerne in kĂŒnftigen BeitrĂ€gen wiederspiegeln.