Zurück | Projekt Licht-Harfe |
|
25.03.2010, aktualisiert 10.2017 |
Darüber hinaus erfolgt die Verbindung nicht mit RS232
( +/- 12V), sondern mit Stromschleifen.
Zur galvanischen Trennung
werden üblicherweise Optokoppler
verwendet.
In dieser Schaltung wird der CNX35 verwendet, es geht aber
so gut wie jeder.
Standardmäßig wird für jede Richtung ein eigenes Kabel mit 5-poligen
DIN Steckern eingesetzt, d.h. auf der Platine sollte man entsprechende
Kupplungen einbauen.
MIDI verwendet kurze Bytefolgen, um Signale auszutauschen. Das Signal lässt sich mit einem Sequenzer als Musikstück aufzeichnen, bearbeiten und wiedergeben.
Die folgenden Tabellen erfordern das Verständnis des Hexadezimalsystems. Ein Byte ist aus zwei Hexadezimalziffern (0–9 A–F) aufgebaut. Eine einzelne Hexadezimalziffer als Halbbyte wird auch Nibble genannt. Das Nibble n steht für die Kanalnummer (n = number), das Byte kk für die Note (k = key), das Byte vv für den Wert (v = value). Die Kanalnummer reicht von 0–15. In vielen Programmen wird bei der Darstellung der Kanalnummer die tatsächliche Kanalnummer um 1 erhöht dargestellt, also 1–16 statt 0–15.
Ein Statusbyte ist ein Byte, das einen Befehl im MIDI-Strom enthält. Auf einen Befehl folgt eine passende Anzahl Datenbytes. Um einen unterbrochenen Datenstrom jederzeit korrekt wieder aufzunehmen, fordert das MIDI-Protokoll die Fähigkeit, Statusbytes von Datenbytes zu unterscheiden. Dazu definiert MIDI, dass das erste Bit eines Statusbytes gesetzt (1) ist, das erste Bit eines Datenbytes dagegen ungesetzt (0). Daraus folgt, dass die Hexadezimaldarstellung von Statusbytes im Bereich 0x80–0xFF liegt, die von Datenbytes dagegen zwischen 0x00–0x7F. Außerdem gilt für Statusbytes, dass das zweite Nibble immer n ist, was für den MIDI-Kanal steht, auf dem der Befehl ausgeführt wird.
Kommt statt eines erwarteten Statusbyte ein Datenbyte, dann gilt das letzte Statusbyte als wiederholt und das aktuelle Datenbyte zählt zu dessen Daten.
Die Beispiele werden anhand von Tasten eines Tasteninstruments wie eines Keyboards erläutert, sind aber auf jedes MIDI-fähige Instrument übertragbar, z. B. auch eine MIDI-Gitarre.
Das Statusbyte ist immer das erste übertragene Byte einer zusammengehörigen MIDI-Nachricht. Das erste Bit des Statusbytes ist immer 1 (gesetzt).
Bytes (hexadezimal) | Folgebytes | Status | Erläuterung |
---|---|---|---|
0x8n kk vv | Note, Release velocity | Note Off | Beendet das Spielen der angegebenen Note, hat also die Bedeutung des Loslassens einer Taste. Wurde die Note vorher gar nicht gespielt, wird dieses Signal einfach ignoriert. |
0x9n kk vv | Note, Anschlagsdynamik | Note On | Beginnt das Spielen einer Note. Zusätzlich wird die Anschlagsdynamik (engl. Velocity) angegeben, die der Druckstärke auf die Taste in 127 Schritten von 1 (sehr schwach) bis 127 (sehr stark) entspricht. Der Wert 0 ist als Note Off-Befehl definiert. |
0xAn kk vv | Note, Dynamic | Polyphonic Aftertouch | Beschreibt das Ändern des Tastendrucks während die
Taste bereits
gedrückt ist, für jede Taste einzeln. Diese Daten sind neutral,
d. h.
sie müssen anderen Daten zugeordnet werden.
z. B.: Zuordnung zu Controller 11: Expression – Ausdruckstärke, womit nach dem Anschlag der Taste über den „Bodendruck“ auf die Taste der Klang eines Saxophones verändert werden kann, während der Ton klingt. |
0xBn cc vv | Controller, Wert | Control Change | Ändert den Zustand eines Controllers (siehe nächster Abschnitt) (cc = Controller) |
0xCn pp | Programmnummer | Program Change | Legt das für den angegebenen Kanal zu spielende Instrument fest (pp = Program Number) |
0xDn vv | Wert | Monophonic bzw. Channel Aftertouch | Beschreibt das Ändern des Tastendrucks während die
Tasten bereits gedrückt sind, für alle Tasten gemeinsam.
Genau wie bei Polyphonic Aftertouch sind diese Daten neutral. |
0xEn vv vv | Wert1, Wert2 | Pitch Bending | Einstellung des Pitchbend-Rades. Die zwei Datenbytes ergeben zusammen den 14 Bit breiten Wert zwischen 0 und 16384. Die Mittelstellung des Rades wird durch den Wert 8192 signalisiert. |
0xF0 xx… 0xF7 | Geräteabhängig | System (exclusive) Message | Steuermeldungen, häufig gerätespezifisch, Länge ebenfalls gerätespezifisch (xx = Datenbytes) |
Sinn und Zweck eines MIDI-Controllers ist es, dem Anwender eine möglichst gute Haptik bei der Beeinflussung seiner Musik zu vermitteln. Die Veränderungen der Musik sollen mit Händen oder Füßen erfühlt werden können. Dazu hat der Controller mechanisch bewegliche Elemente, die der Benutzer bedienen kann. Diese Bewegung wird in MIDI-Befehle übersetzt und an die Geräte sowie Klangerzeuger weitergegeben. Sie arbeiten somit ähnlich wie Gamecontroller, die allerdings im Gegensatz zu Midicontrollern ein proprietäres Protokoll nutzen. Der einzelne Midibefehl wird verwirrenderweise im Bereich der Midicontroller ebenfalls als Controller bezeichnet, was aber die ursprünglichere Verwendung darstellt.
Erst in neuerer Zeit nutzt man Controller auch derart, dass die Semantik der Midi-Befehle – in untenstehender Tabelle als Typ bezeichnet – ignoriert wird. Dem Befehl werden andere Funktionen zugeordnet als im Midi-Protokoll vorgesehen. Das ist häufig der Fall, wenn die Musikbearbeitung ausschließlich auf einem Computer durchgeführt wird. Insbesondere bei DJ-Programmen sind speziell angepasste Controller sehr verbreitet, wo beispielsweise mit dem Midisignal ein Dateibrowser zur Songauswahl sowie Funktionen wie Start, Stop oder in anderer Richtung eine Hardware LED im Controller bedient werden. Der semantisch mit der Tonhöhe belegte Midibefehl kann hier beispielsweise die Länge einer Wiederholungsschleife (Loops) darstellen. Gerade hier ist die Controllerhaptik wichtig, da sich mit der Maus am Computer die erforderliche Reaktionszeit und Feinfühligkeit zum Beispiel bei der Synchronisierung des Beats zweier Songs nicht erreichen lässt. Dem proprietären Charakter dieser Anwendungsart kann durch freie Belegbarbarkeit der Midibefehle sowohl im Programm als auch im Controller begegnet werden, was allerdings noch lange nicht die Regel ist.
Klassische Anwendungen des Midicontrollers halten sich hingegen streng an die Semantik des Midiprotokolls. Diese haben im Bereich der Musikerzeugung größere Bedeutung, da sich mit ihnen auf einfache Art und Weise gerätespezifische Klangparameter des aktuellen Instruments steuern lassen. Unterschiedliche Geräte sind dabei kompatibel auswechselbar.
Die Controller senden auf einem bestimmten Kanal mit einer bestimmten Controllernummer einen bestimmten Wert. Einfache Controller können Werte von 0 bis 127 annehmen, was jedoch bei Tonhöhenänderungen sehr schnell zu unschönen Treppenverläufen im Klang führt. Daher lassen sich die Controller 0–31 mit einem sogenannten LSB-Controller 32–63 koppeln, um so eine wesentlich höhere Auflösung zu erhalten. In der Praxis wird diese Technik jedoch selten angewandt, da eine Auflösung der Lautstärke beispielsweise in 128 Schritten fein genug erscheint.
Schalter wie beispielsweise das Haltepedal Nummer 64 können zwar theoretisch Werte von 0–127 senden, da ein Schalter allerdings nur zwei Werte annehmen kann, werden üblicherweise Werte von 0 bis 63 als „Aus“ und Werte von 64 bis 127 als „An“ interpretiert.
Verwendet man ein programmierbares Steuergerät, so sind Kenntnisse der Controllernummern und was diese üblicherweise steuern von großem Nutzen. Die wichtigsten Controller sind in der nachfolgenden Tabelle zusammengestellt. Das erste Byte eines Controllerbefehles lautet immer 0xBn, wobei n die Kanalnummer angibt. cc steht für die Controllerart (cc = continuous controller) und vv für den Wert, den der zu steuernde Klangparameter annehmen soll.
Byte (hexadezimal) | Dezimal | Typ | Erläuterung |
---|---|---|---|
0xBn 00 vv | 0 | Bank select MSB | gefolgt von Bank select LSB Controller 32 |
0xBn 01 vv | 1 | Modulation MSB | Stellung des Modulationsrades |
0xBn 02 vv | 2 | Breath Controller | Blasregler |
0xBn 03 vv | 3 | Undefined | Undefiniert bzw. frei verwendbar |
0xBn 04 vv | 4 | Foot Controller MSB | Stellung des Fußpedals |
0xBn 05 vv | 5 | Portamento Time MSB | Dauer des übergangslosen Gleitens zwischen zwei Tonhöhen |
0xBn 06 vv | 6 | Data Byte | Datenbyte für einen RPN-/NRPN-Controller |
0xBn 07 vv | 7 | Main volume | Gesamtlautstärke |
0xBn 08 vv | 8 | Balance | Verstärkung des rechten bzw. linken Lautsprechersignals (nur Stereo) |
0xBn 09 vv | 9 | Undefined | Undefiniert bzw. frei verwendbar |
0xBn 0A vv | 10 | Panorama | Stereopositionierung im Raum (links … mittig … rechts) |
0xBn 0B vv | 11 | Expression | Ausdrucksstärke des Klangs |
0xBn 0C vv | 12 | Effect Control 1 | Effekt 1 steuern (2-Byte-Befehl, 14-Bit-Controller, gesendet in der Reihenfolge 0xBn 0C vv, 0xBn 2C vv) |
0xBn 0D vv | 13 | Effect Control 2 | Effekt 1 steuern (2-Byte-Befehl, 14-Bit-Controller, gesendet in der Reihenfolge 0xBn 0D vv, 0xBn 2D vv) |
14–15 | Undefined | Undefiniert bzw. frei verwendbar | |
16–19 | General Purpose Controllers 1–4 | Frei belegbare Controller 1–4 | |
20–31 | Undefined | Undefiniert bzw. frei verwendbar | |
0xBn 20 vv | 32 | Bank select LSB | gefolgt von Programmnummer-Befehl: Cn xx (n – MIDI
kanal; xx – Nummer)
Das „Bank select MSB/LSB/Programmnummer“ wird verschieden genutzt. z. B. YAMAHA bei XG für die Auswahl einer Tonebank: MSB(Ctrl.0) = 0 LSB(Ctrl.32) = Banknummer für die Auswahl eines Drumsets: MSB(Ctrl.0) = Drumset LSB(Ctrl.32) = 0 |
33–63 | LSB for Controllers 1–31 (rarely implemented) | Dienen eigentlich dazu, die Controller 1–31 feiner auflösen zu können, wird aber kaum verwendet | |
0xBn 40 vv | 64 | Hold 1 | Haltepedal, Werte vv von 0–63 werden als „aus“ interpretiert, Werte von 64–127 als „an“ |
0xBn 41 vv | 65 | Portamento | Portamento ein- und ausschalten |
0xBn 42 vv | 66 | Sostenuto | Während des Drückens des Pedals bereits gespielte Noten werden gehalten, neu hinzukommende nicht |
0xBn 43 vv | 67 | Soft Pedal | Senkt die Lautstärke der gespielten Noten |
0xBn 44 vv | 68 | Legato Footswitch | Schaltet das Empfangsgerät in den MIDI Mode 4 (Omni Off = Mono Mode), monophone Wiedergabe |
0xBn 45 vv | 69 | Hold 2 | 2. Haltepedal |
0xBn 46 vv | 70 | Sound Controller 1 (Sound Variation) | Klangsteuerung 1, meistens Klangvariation |
0xBn 47 vv | 71 | Sound Controller 2 (Harmonic Content) | Klangsteuerung 2, meistens Teiltonhaltigkeit |
0xBn 48 vv | 72 | Sound Controller 3 (Release Time) | Klangsteuerung 3, meistens Ausschwingzeit |
0xBn 49 vv | 73 | Sound Controller 4 (Attack Time) | Klangsteuerung 4, meistens Einschwingzeit |
0xBn 4A vv | 74 | Sound Controller 5 (Brightness) | Klangsteuerung 5, meistens Helligkeit |
75–79 | Sound Controller 6–10 | Klangsteuerung 6–10, keine Vorschlagswerte | |
80–83 | General Purpose Controllers 5–8 or General Purpose Buttons 1–4 | Frei belegbare Controller 5–8 (vv = 0–127) oder Taster 1–4 (vv =0 –63: „aus“, vv = 64–127: „an“) | |
0xBn 54 vv | 84 | Portamento Control | Kontrolle des Portamento |
85–90 | Undefined | Undefiniert bzw. frei verwendbar | |
0xBn 5B vv | 91 | Effects 1 Depth | Effekttiefe 1, früher Intensität eines externen Effektes |
0xBn 5C vv | 92 | Effects 2 Depth | Effekttiefe 2, früher Tremolointensität |
0xBn 5D vv | 93 | Effects 3 Depth | Effekttiefe 3, früher Chorusintensität |
0xBn 5E vv | 94 | Effects 4 Depth | Effekttiefe 4, früher Detuneinstensität |
0xBn 5F vv | 95 | Effects 5 Depth | Effekttiefe 5, früher Phaserintensität |
0xBn 60 vv | 96 | Data Increment RPN/NRPN | Wert eines RPN/NRPN Controllers erhöhen |
0xBn 61 vv | 97 | Data Decrement RPN/NRPN | Wert eines RPN/NRPN Controllers erniedrigen |
0xBn 62 vv | 98 | NRPN LSB | Niederwertiges Byte eines NRPN-Controllers |
0xBn 63 vv | 99 | NRPN MSB | Höherwertiges Byte eines NRPN-Controllers |
0xBn 64 vv | 100 | RPN LSB | Niederwertiges Byte eines RPN-Controllers |
0xBn 65 vv | 101 | RPN MSB | Höherwertiges Byte eines RPN-Controllers |
102–119 | Undefined | Undefiniert bzw. frei verwendbar | |
0xBn 78 vv | 120 | all sounds off | Klangerzeugung sofort einstellen (vv hat keine Bedeutung) |
0xBn 79 vv | 121 | Controller Reset | Setzt alle Controller auf ihre Ursprungswerte |
0xBn 7A vv | 122 | Local Control on/off | Koppelt die Tastatur vom internen Klangerzeuger eines Gerätes ab; die interne Klangerzeugung kann weiterhin von außen über MIDI angesteuert werden, während die Tastatur weiterhin über den MIDI-Ausgang Daten sendet, aber eben nicht mehr an die interne Klangerzeugung |
0xBn 7B vv | 123 | all notes off | Spielen einstellen – sämtliche Noten werden ausgeschaltet, die Klänge durchlaufen jedoch noch ihre Release-Zeit (d. h. sie klingen ab) (vv hat keine Bedeutung) |
0xBn 7C vv | 124 | omni off | Das Gerät soll nur auf programmierte Kanäle reagieren (vv haben keine Bedeutung) |
0xBn 7D vv | 125 | omni on | Das Gerät soll auf allen Kanälen gleich reagieren (vv hat keine Bedeutung) |
0xBn 7E vv | 126 | mono on / poly off | Das Gerät soll nur mit einer begrenzten Anzahl Stimmen spielen (vv = Stimmenzahl, üblich ist 1 – viele Geräte ignorieren vv und stellen auf 1-stimmig) |
0xBn 7F vv | 127 | poly on / mono off | Das Gerät soll mit maximaler Anzahl an Stimmen spielen |
MSB engl. : Most Significant Bit = höchstwertigstes Bit
LSB engl. : Least Significant Bit = niederwertigstes Bit
Die NRPN (Non Registered Parameter Number) Controller dienen dazu, Parameter zu steuern, die in den normalen Controllerraum keinen Platz finden, die der Hersteller aber steuerbar machen will.
Es wird ein Parameter im Bereich von 0 und 16383 gesendet. Danach wird entweder ein normaler MIDI-Controller #6 mit einem bestimmten Wert 0–127 gesendet oder ein Data Increment/Decrement #96, #97, wobei hier der dritte Parameter egal ist.
Da es im MIDI-Protokoll nicht möglich ist einen Wert größer als 127 zu senden, gibt es das NRPN-MSB (Controller #99) und das NRPN-LSB (Controller #98).
Der Wert im Bereich zwischen 0 und 16383 wird erst in Binärform umgewandelt. Die ersten (von rechts) sieben Zeichen dieser binären Zahl werden mit dem NRPN-LSB Controller versendet. Die übrig gebliebenen sieben Zeichen werden mit dem NRPN-MSB Controller versendet. Wichtig ist, dass der MSB-Controller vor dem LSB-Controller versendet wird.
Danach ist ein bestimmter NRPN Parameter aktiviert und man kann ihn über #6 einen Wert von 0 bis 127 zuweisen oder ihn mit #96/#97 erhöhen und verringern.
RPN funktioniert genau so, nur mit dem Unterschied, dass die LSB und MSB Controller #100, #101 sind (siehe Tabelle).
Nachteil an dieser Art der Übertragung ist, dass man insgesamt drei Controller versenden muss. Der Vorteil hingegen ist, dass man eine große Anzahl an Parametern (z. B. alle Parameter einer DAW) damit steuern kann. Interessant wäre auch die Möglichkeit das Protokoll zu missbrauchen und mit RPN einen Parameter zu selektieren und ihn über NRPN einen bestimmten Wert z. B. 13980 zuzuweisen. Dadurch wären Parametersprünge kaum mehr hörbar und man könnte immer noch herkömmliche Synths in der Kette verwenden.
General MIDI Instrumente | |||
---|---|---|---|
PC# Instrument | PC# Instrument | PC# Instrument | PC# Instrument |
Piano
|
Bass
|
Reed
|
Synth Effects
|