Ak-Nak47:
Habe mich jetzt an den vorgegebenen Examples aus der Arduino Software und den Beispielen hier etwas zusammengeschustert.
Zusammengeschustert ist das richtige Wort dafür.
Ak-Nak47:
Bin mir noch nicht im klaren darüber was ich gemacht habe,
Das sieht man, wenn Du Dir nicht die Mühe machst die Sprache zu lernen und die Funktion der einzelnen Befehle zu lernen, wirst Du nicht weit kommen. Du hast ein Beispiel mit einer LED benutzt, dessen Helligkeit über einen Sensor (Poti) geregelt wird, richtig?
Die Helligkeit einer LED hat aber nun so gar nichts mit dem MIDI-Protokoll zu tun.
Du kannst nicht irgend etwas senden und erwarten das Ableton Live das als MIDI versteht, wenn Du Dich nicht an das MIDI-Protokoll hältst. Das habe ich Dir weiter oben schon verlinkt.
Im Grunde ist es recht einfach:
Eine MIDI-Nachricht besteht aus ein bis drei Bytes.
Beispiele für ein Byte lange Kommandos sind z.B.
clock = 248
start = 250
stop = 252
Beispiele für drei Byte lange Kommandos hatten wir ja schon, z.B. 'note on' und 'note off'.
Nehmen wir als Beispiel 'note on':
Im ersten Byte wird der Befehl 'note on' und der Kanal, für den dies gilt, gesendet:
'note on' ist als 1001 definiert (diese vier Bit heissen im MIDI-Jargon 'first nibble' oder 'most-significant nibble'), jetzt hängen wir noch vier Bit für den Kanal dran ('least-significant nibble'). Nehmen wir Kanal 11, da wir bei Null mit dem Zählen beginnen, müssen wir tatsächlich 10 und nicht 11 verwenden. 10 in binärer Schreibweise ist 1010. Damit erhalten wir (binär) für das Kommando 'note on' auf Kanal 11: 10011010 (dezimal 154).
Das zweite Byte in diesem Kommando ist die Note. MIDI kennt 128 Noten (0 - 127); das der Kammerton A die MIDI Notennummer 69 hat wissen wir ja schon.
Das dritte Byte ist 'velocity', der Anschlag. Dieser kann Werte von 0-127 annehmen. Da wir richtig in die (eine) Taste hauen wollen, nehmen wir 127.
Somit haben wir jetzt die drei Bytes für das komplette Kommando "Note A3 auf Kanal 11 mit vollem Anschlag AN":
154 69 127
In Arduino wäre das dann:
Serial.write(154);
Serial.write(69);
Serial.write(127);
Und genauso wird für alle anderen Befehle, wie 'polyphonic aftertouch', 'control change', 'pitch wheel change', und wie sie alle heissen, verfahren.
Die Lautstärke z.B. versteckt sich hinter 'control change' ('first nibble' 1011). "Ändere etwas auf Kanal 11" wäre also 1011 + 1010 = 10111010 (dezimal 186) [Achtung, das ist natürlich keine Addition.]
Was ändere ich? Da schaue ich wieder bei midi.org und sehe: 'channel volume' ist definiert als 00000111 (dezimal 7). Worauf ändere ich die Lautstärke? Auf das, was der Arduino vom Poti einliest (mögliche Werte wieder 0-127).
Serial.write(186); // control change auf Kanal 11
Serial.write(7); // Ändere die Lautstärke...
Serial.write(meinWertVomPoti); // ... auf meinWertVomPoti
Auf midi.org steht das alles in Binär, Hexadezimal und Dezimal; damit brauchst Du Dich also noch nicht einmal groß rumschlagen, nachlesen reicht. Ich wollte es, wegen dem grundsätzlichen Verständnis, aber einmal erklären.
Eigentlich ist das MIDI-Protokoll total simpel. Wenn Dir das, auf diese Art, zu kompliziert ist, würde ich Dir die Verwendung der MIDI-Bibliothek empfehlen, diese hat mkl0815 freundlicherweise bereits verlinkt.
Da vereinfacht sich die Sache zu 'sendControlChange (byte ControlNumber, byte ControlValue, byte Channel)'.
Für obiges Beispiel also sendControlChange(7, meinWertVomPoti, 11);