Geschrieben am

MIDI-Controller selbst bauen (Teil 3) MIDI-Datenformat

003-MIDI-Controller-bauen-03

Im Dritten Teil unserer Serie schauen wir uns das MIDI-Datenformat an.

Ganz im Detail nehmen wir einen Control-Change-Befehl in Binärzahlen auseinander und analysieren, welche Daten wir mit unserem Arduino-Projekt übertragen müssen, damit ein MIDI-Befehl daraus wird.

Transkription:

Hinweis: Dies sind die Untertitel-Texte aus dem Video und natürlich nicht als nett zu lesender Blog-Beitrag zu verstehen. Sie stehen hier für die Suchmaschine und alle Menschen die ggf. Schwierigkeiten mit dem Ton oder meinem Genuschel haben.

Hi! Ich bin Götz Müller-Dürholt und willkommen zum dritten Teil von MIDI-Controller selber bauen. Wenn Du jetzt erst eingeschaltet hast, geh ruhig noch mal zurück, wir bauen nämlich einen MIDI-Controller von Anfang an, so dass auch jeder mitmachen kann der noch nie programmiert hat,oder auch noch nie gelötet hat.

Im letzten Teil haben wir ja erfolgreich unser Poti an den Arduino angeschlossen und eine Ziffer hinten rausgekriegt, und bevor wir da jetzt einen MIDI-Befehl rausmachen können, müssen wir natürlich erst einmal wissen wie ein MIDI-Befehl aussieht und woraus der besteht. Dafür brauchen wir ein paar Binärzahlen und machen eine 30-sekündige Wiederholung zum Thema „Binärzahlen“.

Binärzahlen

Vielleicht erinnert Ihr euch: binär, das war etwas mit Einsen und Nullen mit dem unser Computer rechnet. Genau das ist es! Eine Ziffer nennt sich „ein Bit“. Das kann entweder eine „1“ oder eine „0“ sein. Mit einem Bit kann ich – Eins oder Null – also zwei Informationen speichern oder übertragen. Dann gibt es etwas was vielleicht nicht jeder kennt: Vier Bit nennt sich auch ein „Nibble“, und mit vier Bit kann ich schon 16 Informationen übertragen. Das nächste kennt sicher wieder jeder: Acht Bit nennt man ein „Byte“ und mit einem Byte kann ich 256 verschiedene Informationen übertragen.

Wenn wir uns hier noch mal angucken wie man damit zählt: 0 oder 1 – zwei verschiedene Informationen. Hier hab ich 2 Bits – so zählt man von eins bis vier. Hier hab ich drei Bits… und so weiter, hier beispielsweise mit vier Bits… Ich glaube das Prinzip habt ihr verstanden.

Den MIDI-Befehl lernen

Jetzt kommen wir zum MIDI-Befehl! Wir wollen nicht die kompletten MIDI-Spezifikationen durcharbeiten, sonst sitzen wir morgen noch hier, sondern wir picken uns einen Befehl raus, nämlich den Control Change Befehl. Diesen bekannten Befehl – ihr dreht irgendwo und der Synthie verändert den Klang oder euer Fader fährt rauf oder runter. Genau diesen Befehl wollen wir uns angucken.

Welche Informationen stehen im MIDI-Befehl?

Dieser Befehl besteht aus drei Bytes. Zu sehen sind diese drei Bytes – nicht drei Kilo- oder Mega-Byte, wir müssen diesen Befehl in drei Bytes unterkriegen. Da gehört eine ganze Menge rein: Welcher MIDI-Befehl ist es? Eine Note oder z.B ein Control Change? Welcher MIDI-Kanal ist es? Welche Controller-Nummer senden wir? Also welchen von euren vielen Drehreglern betätigen wir denn gerade? Was ist der Wert den wir dort eingestellt haben? Und – wo man vielleicht nicht mit rechnet – noch etwas organisatorisches: Wo ist der Anfang oder das Ende von unserem Befehl? Das müssen wir alles in unsere drei Bytes reinkriegen.

Anfang und Ende

Gucken wir uns die drei Bytes mal etwas genauer an: Es gibt immer ein Status-Byte am Anfang, und dann gibt es „Data-Bytes“. Manche MIDI-Befehle haben nur ein Data-Byte, viele haben zwei, man kann aber auch mehr haben. Und wir müssen ja jetzt genau sagen: wo fängt der Befehl an und wo ist der nächste Befehl mit dem nächsten Status-Byte. Das funktioniert so, dass wir einfach von jedem Byte das erste Bit vorne nehmen „plopp“ und abziehen, und sagen: wenn das erste Bit eine Eins ist, bist du ein Status-Byte – und damit ein neuer Befehl – und immer wenn vorne eine Null steht, kommen die dazugehörigen Data-Bytes. Das ist ganz einfach.

Die Data-Bytes

Ebenfalls einfach, wenn wir uns das Data-Byte angucken: ich habe von meinem Byte noch sieben Bit übrig,  mit sieben Bit kann ich eine Zahl von 0 – 127 übertragen, und das ist in unserem Fall – beim Control-Change-Befehl – unsere Controller-Nummer, also welchen Drehregler wir gewählt haben. Und das letzte Data-Byte hat auch wieder sieben Bit und ist unser Controller-Wert. Der Wert 0 – 127 ist euch beim Musik machen sicher schon einmal aufgefallen, denn die Anschlagstärke (Velocity) meiner Noten ist immer 0 – 127, oder bei einer Automation begegnet einem diese Werte auch immer wieder.

Das Status-Byte

Was bleibt sie die sieben Bit die von meinem Status-Byte noch übrig sind. Und da muss ich noch was reinkriegen, nämlich den MIDI-Kanal und die Art des Befehles. Dazu hacken wir das Byte noch mal in der Mitte durch und nehmen die ersten drei Bits für die Art des MIDI-Befehles, – mit drei Bits kann ich acht verschiedene Informationen speichern – und die letzten vier Bit, das letzte Nibble – 16 Informationen – das ist mein MIDI-Kanal.

Welche MIDI Befehle gibt es?

  • Note off
  • Note on
  • Poly-Pressure
  • Control-Change
  • Program-Change
  • Channel-Aftertouch (auch Channel-Pressure genannt)
  • und den Pitch-Bend-Befehl.

Ich erkläre diese Befehle jetzt nicht – wenn ihr wissen wollt was diese machen, schreibt es in die Kommentare, dann mache ich dazu noch einen separaten Film.

Uns interessiert die Nummer vier: der Control-Change-Befehl. Überlegt noch einmal wie man binär bis „4“ zählt?!
00 ist eins, 01 ist zwei,
10 ist drei,
11 ist vier, und das setzen wir hier ein.
Also 011 ist ein Control-Change Befehl. Weil es beim Anschließen an den Computer nicht so wichtig ist nehmen wir einfach MIDI-Kanal 1, das sind vier Nullen, und jetzt haben wir das Byte was wie verschicken müssen komplett. Wenn wir jetzt diese binäre Zahl in eine Dezimalzahl umrechnen kommt raus:
176
Gucken wir uns noch mal die anderen Ziffern an die wir verschicken müssen. Hier ist die ganze Zahlenkolonne die wir von unserem Arduino verschicken müssen damit unser Cubase, Logic oder Pro Tools denkt es handelt sich um einen Control-Change-Befehl mit bestimmten Werten.

Und wie machen wir das?
Vielleicht erinnert ihr euch aus der letzten Folge an den Serial.print-Befehl? Diesen verwenden wir, aber nur fast. Wir verwenden den Serial.write-Befehl, denn „write“ überträgt genau ein Byte. Das machen wir aber in der nächsten Folge. Außerdem lernen wir was eine „if-Abfrage“ ist, und am Ende der kommenden Folge könnt ihr schon mit dieser Kiste im Cubase einen Synthie fernsteuern zu lassen.
Ich freue mich über eine positive Bewertung oder Kommentare
und wünsche euch viel Spaß und bis zum nächsten Mal. Tschüss!

Kommentar verfassen