Hallo Martha,
ups, das wird aufwändiger…
MIDI Daten bestehen aus aneinander gereihter Ereignissen.
Ein Ereignis wird daher als Event bezeichnet.
Ein Event kann z.B. ein Programm-Change oder eine Note sein.
Ein MIDI-Instrument empfängt die gesendeten Daten nacheinander also sequenziell und kann auf bis zu 16 MIDI-Kanälen empfangen und dann abspielen.
Der Einfachheit halber schauen wir uns mal nur 2 Kanäle an:
Auf Kanal 1 soll ein Klavier spielen, auf Kanal 2 soll eine Gitarre spielen.
Damit der Synthesizer weiß, welcher Kanal welches Instrument spielen muss, wird für jeden Kanal als erstes ein Programm Change gesendet. In der Bedienungsanleitung des Instruments steht, welchen Wert der PrCh haben muss.
Auch wenn man denkt, dass die Noten gleichzeitig gesendet werden, geht das per MIDI nicht s.o.; also muss noch eine Zeitangabe angegeben werden, wann, was gesendet wird; das ist die Zahl am Anfang der Zeile meist in Millisekunden. In deinem MIDI-File stehen am Anfang auf der Position 0 (Zeit=0) mehrere Werte. Diese werden aber tatsächlich gaaaaanz kurz nacheinander gesendet. In meinem Beispiel setze ich die Daten mal nacheinander, dann ist das ganze ein wenig anschaulicher:
Das Klavier hat meist die Nr. 0, die Gitarre z.B. die Nr. 25
Dein MIDI-File beginnt dann so:
0 PrCh ch=1 p=0
10 PrCh ch2 p=25
Der Synthesizer kann aber noch mehr umsetzen z.B.:
- wie laut der Kanal sein soll (Volumen)
- das Panorama im Stereo-Bild (Pan)
- … es gibt auch wieder 127 Controller, wobei einige als Doppel ausgelegt sind und so mehrere Tausend Parameter mit jeweils 127 verschiedenen Werten eingegeben werden können.
Dazu werden sogenannte Controller gesendet:
Volumen ist z.B. Controller Nr. 7,
das Panorama (mehr rechts oder links) ich glaube das ist Controller Nr. 11
In der MIDI-Datei ist das so dargestellt:
1 Par ch=1 c=7 v=113
-> das heißt dann:
an zeitl. Position 1 wird auf Kanal 1 (ch=1) der Controller 7 (c=7) mit dem Wert 113 (veloicity v=113) gesendet.
Solange jetzt kein anderer Wert für diesen Controller gesendet wird, bleibt die Lautstärke so.
Daher ist es wichtig entweder am Anfang jeder MIDI-Datei ein Reset zu senden, der den Synthi in einen definierten Zustand versetzt. Spielt man nämlich eine schlecht programmierte MIDI-Datei ab, kann es sein, dass der Synthi die alten Werte von der vorherigen Datei noch hat.
Ich hoffe, das war einigermaßen verständlich… ist halt ein wenig kompliziert.
Jetzt noch zu deinen Fragen:
zu 1)
0 ist hier die zeitl. Position
zu 2)
c ist der Name des Controllers, v der Wert, den der Controller hat. Werte gehen von 0-127
Bei Controller Nr. 7 (Volumen) heist dann v=0, dass man nichts mehr hört, Lautstärke also 0, v=127 wäre dann voll aufgedreht. Was nun Controller Nr. 6 ist, ist genormt und steht eigentl. in jedem Synthi-Handbuch.
zu 3)
aus deinem Beispiel (Daten in deiner Datei ganz unten)
16388 On ch=10 n=71 v=64
20479 Off ch=10 n=71 v=0
16388 ist die zeitl. Position (ich glaube in mS Millisekunden)
Das heißt dann:
An Position 20479 (20,479 Sekunden) schaltet auf Kanal Nr. 10 die Note Nr. 71 mit einer Anschlagstärke von 64 ein,
An Position 16388 (16,388 Sekunden) schaltet auf Kanal Nr. 10 die Note Nr. 71 mit einer Ausschlagstärke von 0 aus.
Die Anschlagstärke kann man sich bei einem Klavier vorstellen, wie schnell die Taste gedrückt wird, drückt man langsam v=10, ist das Klavier leise, drückt man schnell v=127 ist das Klavier laut.
Bei sehr guten Synthesizern wird dabei auch der Klang verändert ein leiser Ton klingt ja bei einem Klavier auch etwas anders als ein lauter (hier verändert sich halt das Klangbild, weil die Saiten im Klavier vom Hammer härter oder weicher getroffen werden.
Die Ausschlagstärke bezeichnet jetzt die Geschwindigkeit, die die Tast losgelassen wird; hat bei einem Klavier keine Bedeutung, der Syntheziser könnte aber bei bestimmten Klangfarben hier auch das Klangbild verändern - ist bei guten Synthis programmierbar.
Die Noten werden durchnummeriert - ich weiß leider nicht, wo genau begonnen wird, n=0 ist auf jeden Fall ein C, welches genau weiß ich im Moment nicht, ist aber sehr tief. Wenn n=0 ein C ist, ist n=12, n=24, n=36… auch ein C; n=71 müsste dann ein H sein.
Noten müssen ein- und ausgeschaltet werden, sonst hängt der Ton.
Einige MIDI-Programme nehmen für die Position nicht die zeitl. Position, sonder verwenden ein eigenes Raster. Wie lange dann ein Ton erklingt, hängt dann vom gespielten Tempo ab - evtl. ist das in deinem Beispiel auch so, da ganz am Anfang ein Tempo gelistet ist.
Abschließend noch ein Lektüren Tip:
Von Roland gibt es einen MIDI-Guide, dieser hat damals mal 10,00 DM gekostet, ist ca. 50 Seiten dick und ganz leicht verständlich. Hier ist alles super erklärt, zus. gibt´s viele Beispiele und auch Tabellen, wo z.B. die Controller Namen erklärt sind.
Falls noch Fragen sind, bitte einfach melden;
viel Erfolg beim Programmieren
Gruß
Hans-Jürgen