![]() |
|
||||||||||||||||||
|
|||||||||||||||||||
|
|||||||||||||||||||
|
||
|
TFT Monitor bei
Mercateo kaufen.
Neues Netbook? Ein Preisvergleich lohnt sich. Bei uns finden sie Notebooks, PDAs und Drucker mit Testberichten und Tipps. Diamant Buchhaltungssoftware – transparent und detailliert auch für die Konzernbuchhaltung. Günstige Shareware Programme als direkte Downloads im Software Portal. Bis zu 70% sparen durch Preisvergleich. |
||
|
Die ersten Synthesizer waren noch echte Analogmonster: Zum einen waren sie nur monophon, d. h. sie konnten nur einen Ton gleichzeitig spielen, und zum anderen waren sie wirklich noch analog - und zwar mit dem Prinzip: 1 Volt entspricht einer Oktave, also 1/12 Volt = 1 Halbtonschritt. Das Drücken mehrerer Tasten führte in der Tat zu nichts. Technisch gesehen bedeutete das, dass nur die oberste oder unterste Taste aktiv war (unter Strom stand). Wer also seine Kaffeetasse ganz rechts auf die Tastatur stellte und virtuos über die Tastatur fegte, erzeugte dennoch nur so aufmunternde Musik wie sämtliche gregorianische und tibetanische Chöre zusammen. Schließlich wurden die ersten Synthesizer zur Akkordarbeit überredet, indem man digital ständig die einzelnen Tasten nach dem Status "gedrückt" oder "nicht gedrückt" abfragte. So war 6-, 8- oder sogar 12-stimmige Polyphonie - je nach Anzahl der eingebauten Oszillatoren - möglich, wenn auch die Klangerzeugung selbst noch analog war. Wer selbst einmal in diese Zeit der Synthesizer hineinhören will, dem empfehle ich [1].
Das Prinzip der Analogsynthesizer mit digitaler Tastatur war die Geburtsstunde des MIDI-Paradigmas: Es sollte ein Standard geschaffen werden, der nicht die Klangerzeugung selbst, sondern nur deren Steuerung - also welche Tonhöhe, wie laut etc. - beschreiben sollte. 1983 kamen die ersten MIDI-Synthesizer auf den Markt. Inzwischen gibt es MIDI-Gitarren, MIDI-Schlagzeuge, ja sogar MIDI-Saxophone. Auch Computern - wie dem Atari ST - wurde die MIDI-Schnittstelle direkt eingebaut, deren Übertragungsgeschwindigkeit (um ungewünschte Zeitverzögerungen zu vermeiden) mit 31,25 kBaud im Vergleich zu den damals üblichen 19,2 kBaud recht hoch angesetzt war. Ganze Netzwerke wurden mit dieser Schnittstelle aufgebaut, und auch die Netzwerkspiele wurden mit der MIDI-Schnittstelle geboren [2]. Wenn Ihnen also heute einer dieser Gesellen begegnet, die sich immer und überall, wo sie eine Klaviatur sehen, unauffällig auf die Tastatur zuschleichen, um dort den Flohwalzer reinzuhacken, können sie ihm das mit ihrem MIDI-Equipment versalzen: Legen Sie ihm einfach Regentropfen oder Meeresrauschen auf die Klangausgabe - das sollte seinem Taktgefühl Heilung verschaffen.
Wie wir bereits gelernt haben, hat ein MIDI-Befehl nichts mit dem Klang selbst zu tun, sondern übermittelt nur die Information, welcher Ton wie laut gespielt werden soll. Eine gute Vorstellung von dem, was bei MIDI passiert, ist der Vergleich mit einem Klavier: Die MIDI-Signale entsprechen hier der Mechanik, die den Hammer mit einer durch den Pianisten gesteuerten Anschlagstärke schlagen lassen. Die durch den Hammer getroffene Saite im Klavierkasten hat mit MIDI selbst nichts mehr zu tun, sie gehört schon zur Klangerzeugung und könnte genau so gut vom Instrumentenbauer als eine Reihe von Bambusröhren geschaffen worden sein. Der "MIDI-Befehl", repräsentiert durch das Hauen eines bestimmten Hammers mit einer bestimmten Stärke, ist vollkommen unabhängig von dem, was der Hammer trifft. Natürlich gibt es nicht nur MIDI-Befehle zum Steuern der Klangerzeugung, es wurden auch solche in den Standard mit aufgenommen, die das Arbeiten mit einem Sequencer oder einem Synthesizer ermöglichen - doch davon später.
Der MIDI-Standard wurde direkt derart gestaltet, dass er nicht nur Polyphonie (also mehrere Klänge gleichzeitig - Akkorde) zulässt, sondern auch unterschiedliche Kanäle ansprechen kann. Diese Kanäle sind logisch, werden also nicht über andere Kabel oder Frequenzen übermittelt, sondern liegen in der binären Übertragungsstruktur verborgen. Mit Hilfe dieser Kanäle können bis zu 16 verschiedene Instrumente gleichzeitig gesteuert werden. Die Kodierung des MIDI-Kanals in den MIDI-Befehlen ermöglicht die erste große Einteilung der MIDI-Befehle in zwei Gruppen, nämlich diejenigen, die einen bestimmten Kanal ansprechen und diejenigen, die dies nicht tun. Die Ersteren heißen daher auch Channel-Nachrichten (engl. Kanal), die anderen Befehle werden System-Nachrichten genannt. Zum ersten Verständnis der MIDI-Befehle ist nun noch wichtig zu wissen, dass jeder MIDI-Befehl mit einem sogenannten Status-Byte eingeleitet wird, in welchem das erste Bit gesetzt ist. Auf ein Status-Byte folgen dann je nach MIDI-Befehl keine, ein, zwei oder mehrere Daten-Bytes, die den Befehl näher spezifizieren, in denen das erste Bit nicht gesetzt sein darf (sonst würden die Daten als Status-Byte missinterpretiert).
| Tabelle 1: Status-Byte der MIDI-Befehle | ||||
| 1. Halb-Byte | 2. Halb-Byte | 1. Halb-Byte | 2. Halb-Byte | |
| (0x9 bis 0xE) | (der Kanal 1-16) | (konstant 0xF) | (Befehl) | |
| 1000 cccc | 1111ssss | |||
| bis | ||||
| 1110 cccc | ||||
Das cccc in Tabelle 1 gibt die 4-Bit-Verschlüsselung des MIDI-Kanals an; in diesem Halb-Byte (auch Nibble) sind also die Werte von 0 bis 15 (hexadezimal 0x0 bis 0xF) codierbar, die die Kanäle 1 bis 16 referenzieren. Es ist übrigens Standard, die Zählung der MIDI-Kanäle bei 1 zu beginnen, wenn man nicht über das Kanal-Nibble spricht. Wer den MIDI-Kanal 0 in seinen Sprachgebrauch aufnimmt, braucht sich also irgendwann nicht über das Gefühl zu wundern, das einen befällt, wenn man nach vielen Jahren plötzlich bemerkt, dass man einen Songtext an einer Stelle schon immer falsch gesungen hat. Weiter haben sich einige Standards eingebürgert, wie z. B. die Reservierung von MIDI-Kanal 10 (Kanal-Nibble also hexadezimal 0x9) für das Schlagzeug.
Die Channel-Nachrichten selbst unterteilen sich noch einmal in Voice- und Mode-Nachrichten. Die Mode-Nachrichten beginnen mit dem Status-Byte 1011cccc, und sie alle zu erklären, führte hier doch etwas zu weit. Stellvertretend für die Mode-Nachrichten sei hier der Befehl ALL_NOTES_OFF erklärt, der alle Töne auf einem Kanal verstummen lässt. Er beginnt wie bereits erläutert mit dem Status-Byte 1011cccc, gefolgt von zwei Daten-Bytes (welche wie oben erwähnt nun mit einem 0-Bit beginnen müssen, da sie sonst für Status-Bytes gehalten werden). Die beiden Bytes sind 01111011 und 00000000. Wer also das Schlagzeug zum Schweigen bringen will, sendet die Bytefolge 10111001, 01111011, 0000000 (beachte den Kanal 1001=0x9, also Kanal 10 im zweiten Halb-Byte des Status-Bytes zur Ansteuerung des Standardschlagzeugkanals).
Das wirkliche Herzstück der MIDI-Befehle sind aber die Channel-Voice-Nachrichten, denn sie machen die Musik! Einen Überblick gibt Tabelle 2.
| Tabelle 2: Channel-Voice-Nachrichten | ||||
| 1. Byte | 2. Byte | 3. Byte | Bedeutung | |
| Status-Byte | Tonhöhe | Laut-/Druckstärke | ||
| 1000cccc | 0ttttttt | ovvvvvvv | NOTE_OFF | |
| 1001cccc | 0ttttttt | ovvvvvvv | NOTE_ON | |
| 1010cccc | 0ttttttt | ovvvvvvv | AFTER TOUCH (Ton) | |
| Status-Byte | Kontroll-Byte | Wert | ||
| 1011cccc | 0ccccccc | ovvvvvvv | CONTROL CHANGE | |
| 1100cccc | 0ppppppp | - | PROGRAM CHANGE | |
| 1100cccc | 0ppppppp | - | PROGRAM CHANGE | |
| 1101cccc | 0vvvvvvv | - | AFTER TOUCH (Channel) | |
| 1110cccc | 0vvvvvvv | 0vvvvvvv | PITCH BENDING | |
Wirklich wichtig sind die MIDI-Befehle NOTE_ON und NOTE_OFF: Sie sind die Befehle, die dem Synthesizer "Spiele Ton xy!" und "Spiele Ton xy nicht mehr!" sagen. In der Tabelle lässt sich ablesen, dass auf NOTE_ON und NOTE_OFF noch zwei Daten-Bytes folgen: Das erste Byte beschreibt die Tonhöhe, das zweite Byte die Lautstärke, mit der der Ton gespielt werden soll. Dabei ist der Wert 01001001 (dezimal 69) für 0ttttttt gerade der Kammerton a. Die anderen Töne sind nach Halbtonschritten darunter oder darüber angeordnet, indem der Wert für die Tonhöhe herauf- und herabgezählt wird (vgl. auch die Klaviatur in Abbildung 1).
| Ton | 0ttttttt |
| E8 | 127 |
| etc... | |
| E2 | 76 |
| D#2 | 75 |
| D2 | 74 |
| C#2 | 73 |
| C2 | 72 |
| H1 | 71 |
| A#1 | 70 |
| A1 | 69 |
| G#1 | 68 |
| G1 | 67 |
| F#1 | 66 |
| F1 | 65 |
| E1 | 64 |
| D#1 | 63 |
| D1 | 62 |
| C#1 | 61 |
| C1 | 60 |
| H0 | 59 |
| A#0 | 58 |
| A0 | 57 |
| G#0 | 56 |
| G0 | 55 |
| F#0 | 54 |
| F0 | 53 |
| E0 | 52 |
| D#0 | 51 |
| D0 | 50 |
| C#0 | 49 |
| C0 | 48 |
| etc... | |
| -C2 | 0 |
Es ist hier noch einmal wichtig festzustellen, dass bei MIDI-Befehlen keine Töne oder Frequenzen übermittelt werden, sondern wirklich nur eine im MIDI-Standard festgelegte Zahl für einen Ton. Die Klangerzeugung wird vollkommen dem Empfängergerät überlassen. Die anderen Voice-Nachrichten sind auch schnell erklärt:
Der Vollständigkeit halber finden Sie in Tabelle 3 noch die System-Nachrichten aufgelistet, bei denen sich auch wieder ein ganz wichtiger Befehl befindet. Die Namen der Befehle SONG POSITION POINTER, SONG SELECT, START, CONTINUE und STOP sind selbstsprechend. Der MIDI-Standard hat hier die Arbeit mit einem Sequencer direkt mit berücksichtigt. Der Befehl TUNE REQUEST war für das gemeinsame Stimmen mit Analog-Synthesizern gedacht und ist nicht mehr ganz auf der Schwelle der Zeit; er ist nur noch selten zu finden. Interessant ist die System-Nachricht ACTIVE SENSING, welche in einem Abstand von 300 ms immer dann automatisch gesendet wird, wenn sonst keine MIDI-Daten übertragen werden; so weiß jedes angeschlossene Gerät stets, ob die MIDI-Leitung noch steht - wie schnell ist bei aufwendigerem Equipment mal ein Stecker in irgendeiner schlecht zugänglichen Ecke locker. SYSTEM RESET befiehlt allen angeschlossenen Geräten, einen Kaltstart zu simulieren. Außerdem gibt es noch die SYSTEM-EXCLUSIVE-Daten. Sie werden mit dem Status-Byte 11111111 eingeleitet, worauf die gesamten Sound-Daten aus dem Synthesizer ausgelesen oder eingefügt werden können. Hier können auch die Editor-Programme für Synthesizer aufsetzen. Der wichtigste Befehl ist aber der TIMING-CLOCK-Befehl, der alle sendenden MIDI-Einheiten synchronisert. So werden normalerweise pro definiertem Grundschlag (meist eine Viertelnote) 24 TIMING-CLOCK-Signale gesendet. In einem 4/4-Takt bedeutet dies also, dass der Takt nach 96 TIMING CLOCKs vollendet wird. Das Senden der TIMING-CLOCK-Signale ist - im Gegensatz zum ACTIVE SENDING - zeitabhängig: Wird das Metronom auf 60 Schläge pro Sekunde eingestellt, also eine Viertelnote pro Sekunde, so werden auch 24 TIMING CLOCKs pro Sekunde gesendet. Eine Reihe von Achtelnoten wird entsprechend nach je 12 TIMING CLOCKs gesendet, Sechzehntelnoten nach sechs usw. Für die genaue MIDI-Referenz aller Befehle und ihrer Daten-Bytes sei auf den Standard verwiesen, der sich auch auf der CD befindet (midi.ps.gz).
| Tabelle 3: System-Nachrichten | |||
| Status-Byte | Daten-Byte(s) | Bedeutung | |
| Common-Nachrichten | |||
| 11110001 | - | nicht defniert | |
| 11110010 | 0lllllll 0hhhhhhh | SONG POSITION POINTER | |
| 11110011 | 0sssssss | SONG SELECT | |
| 11110100 | - | nicht definiert | |
| 11110101 | - | nicht definiert | |
| 11110110 | keins | TUNE REQUEST | |
| Real-Time-Nachrichten | |||
| 11111000 | keins | TIMING CLOCK | |
| 11111001 | - | nicht definiert | |
| 11111010 | keins | START | |
| 11111011 | keins | CONTINUE | |
| 11111100 | keins | STOP | |
| 11111101 | - | nicht definiert | |
| 11111110 | keins | ACTIVE SENSING | |
| 11111111 | keins | SYSTEM RESET | |
| System-Exclusive-Nachrichten | |||
| 11110000 | jede Menge | SYSTEM EXCLUSIVE | |
| 11110111 | keins | EOX = END OF SYSTEM EXCLUSIVE | |
Der zukunftsweisende MIDI-Standard wurde bereits in zahlreichen Sequencer-Programmen implementiert, aber das vielversprechendste Projekt ist sicherlich die C++-Bibliothek tse3, auf der auch der Linux-Sequencer anthem basiert [4]. Sie weist nicht nur eine sehr saubere Dokumentation für den Programmierer auf, die Bibliothek vereint auch gerade die beiden unterschiedlichen Funktionalitätsebenen, die bei der Arbeit mit Sequencern so wichtig sind, in einer ganzen Reihe von Klassen und APIs. So wird natürlich die Sequencer-Ebene mit entsprechender Funktionalität, aber auch die MIDI-Ebene mit vielen Zugriffsmöglichkeiten unterstützt. Der interessierte Programmierer findet entweder das Paket tse3 schon auf seiner Distribution, sonst sei auf [3] verwiesen - die aktuellen Quellen der Bibliothek (Version 0.1.2) finden sich auf der Heft-CD. Als besonderes Schmankerl bietet tse3 noch ein eigenes MIDI-Dateiformat an: TSE3MDL (für TSE3 Music Description Language). tse3 unterstützt dabei aber auch den normalen MIDI-Datei-Standard voll. Nun hat sich zwar der MIDI durchgesetzt, aber während MIDI-Dateien nur eine gigantische Byte-Wüste darstellen, ist das TSE3MDL-Format klar lesbar und daher auch leicht editierbar. Diesen Vorteil kann man mit dem im tse3-Paket befindlichen Programm tse3play nutzen: Das Programm beherrscht die Umwandlung von MIDI-Dateien in das TSE3MDL-Format, und auf diese Weise kann man wunderbar durch die Information browsen, die in einer Standard-MIDI-Datei steckt, ohne sich jedes Bit und Byte ansehen zu müssen.
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... (hge)
| 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. |
| Der Autor |
|
Volker Schmitt ist Mathematiker, Mathematiker und Mathematiker und arbeitet bei einer großen Versicherung. Als frischgebackener Vater versucht er sich im Einhand-Artikel-Tippen-andere-Hand-Babyschaukeln und empfiehlt seiner Frau zur Bäuerchenreduzierung das Stillen mit blasenfreier Betankung. |
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.
Druckerfreundliche Version |
Feedback zu dieser Seite
|
Datenschutz |
© 2010 Linux New Media AG
[Linux-Magazin]
[LinuxUser]
[EasyLinux]
[Linux-Community]
[Ubuntu User]
[Linux Technical Review]
[Linux Magazine]
[Linux Pro Magazine]
[Ubuntu User]
[EasyLinux Poland]
[Linux Magazine Poland]
[Linux Magazine Brasil]
[EasyLinux Brasil]
[Linux Magazine Spain]