Benutzerhandbuch
MIDI-Syntax
OnSong verwendet eine textbasierte Syntax zum Ausdrücken von MIDI-Befehlen. Während du die MIDI-Ereignisse im Metadaten-Editor verwenden kannst, kannst du MIDI-Befehle auch im Text ausdrücken.
Begrenzte Werte
In erster Linie können mehrere MIDI-Befehle durch verschiedene Zeichen getrennt werden, darunter: ein Tabulatorzeichen, Komma, Semikolon, vertikaler Strich oder neue Zeile. Das Komma ist das häufigste Trennzeichen. Zum Beispiel:
1.2:0@0, PC1.2:3@0, N67@1, START, SS8
Kanal
Jeder Eintrag kann ein @-Symbol enthalten. Der numerische Wert nach dem Symbol ist der Kanal, auf dem der Befehl gesendet werden soll. Da die Kanäle in MIDI bei null beginnen, wäre Kanal eins null (0), Kanal zwei eins (1) usw.
Wenn kein @-Symbol verwendet wird, wird der Befehl auf allen Kanälen gesendet oder empfangen.
Präfixe
Jeder Eintrag in der Liste enthält ein Präfix. Dieses Präfix bestimmt, welche Art von MIDI-Befehl gesendet werden soll. Diese umfassen:
- PC oder Kein Präfix ist ein Programmwechsel-Ereignis.
- N ist ein Noten-Ereignis
- CC ist ein Steuerungsänderungs-Ereignis.
- SS ist ein Lied-Auswahl-Ereignis.
- START ist ein Start-Befehl.
- STOP ist ein Stop-Befehl.
- CONTINUE ist ein Fortfahrts-Befehl.
- F0 leitet eine SysEx-Nachricht ein.
- WAIT implementiert eine Verzögerung.
Werte
Der Wert des Befehls erscheint direkt vor dem @-Symbol oder am Ende des Eintrags, wenn keines angegeben ist. Dies ist der Wert des Programmwechsels, der Steuerungsänderung, der Note oder der Lied-Auswahl basierend auf dem Präfix. Im Fall von SysEx-Einträgen wird der Hexadezimalwert des SysEx direkt nach dem F0-Präfix bereitgestellt, das als Header für alle SysEx-Befehle verwendet wird.
Unterwerte
In einigen Fällen werden zusätzliche Informationen im MIDI-Befehl als Unterwerte übermittelt. Zum Beispiel können MSB und LSB sowie die Geschwindigkeit von Steuerungswerten auf diese Weise gesendet werden. Dies wird durch die Hinzufügung eines Doppelpunkts im Wertteil ausgedrückt. Der Unterwert hat einen anderen Kontext je nach Art des gesendeten MIDI-Befehls:
- Programmwechsel hat Unterwerte, die sich mit dem MSB/LSB des Programmwechsels ausrichten. Diese Werte werden durch einen Punkt getrennt, wobei der MSB auf der linken Seite und der LSB auf der rechten Seite steht.
- Steuerungsänderung hat den Wert der mit diesem gesetzten Steuerung. Die Zahl kann zwischen 0 und 127 liegen. Wenn weggelassen, wird der Wert 127 verwendet.
- Noten-Ereignis hat einen Unterwert, der sich auf die Geschwindigkeit bezieht, mit der die Note gespielt werden soll. Dies kann auf einen numerischen Wert zwischen 0 und 127 gesetzt werden.
Beispiele
Beginnen wir mit einem einfachen Programmwechsel. In diesem Szenario verwenden wir Programmwechsel 8, der auch ein MSB von 4 und ein LSB von 2 auf Kanal 1 sendet. Das Beispiel beginnt mit der komplexesten Variation davon und entfernt die Bankauswahl und den Kanal, um breiter zu werden:
PC3.1:7@0, 3.1:7@0, 3:7@0, 3:7, 7@0, 7
Steuerungsänderungen sind ähnlich, außer dass die linke Seite der Syntax die Steuerungsänderungsnummer ist und die rechte Seite ein optionaler Wert. Wenn der Wert nicht angegeben ist, wird stattdessen 127 gesendet. Wir senden Steuerungsänderung 106 mit einem Wert von 64 auf Kanal 3.
CC105:63@2, CC105:63. CC105@2, CC105
Schauen wir uns nun die Noten-Ereignisse an. Wir möchten C4 auf Kanal 8 mit 75 % Geschwindigkeit spielen. Wir würden folgendes eingeben, da OnSong mit dem Zählen von MIDI C0 als 0 auf der MIDI-Notenskala beginnt:
N60:95@7, N60@7, N60:95, N60
Wiederum ist es wichtig zu bedenken, dass das MIDI-Statement umso breiter und weniger spezifisch wird, je mehr Werte aus der MIDI-Syntax entfernt werden. Beispielsweise sendet die letzte Version des Noten-Ereignisses C4 mit 100 % Geschwindigkeit auf allen Kanälen.
Verwende den WAIT-Befehl mit einer Zahl, um eine Verzögerung zwischen anderen MIDI-Ereignissen zu implementieren. Die Zahl kann ein ganzzahliger Wert sein. Du kannst Sekunden zum Warten als 1-10 oder als Millisekunden definieren. Das Folgende zeigt, wie man 2 Sekunden, 10 Sekunden und eine halbe Sekunde wartet.
WAIT2, WAIT10, WAIT500