5.5 „Hör mir zu!“ – Einen eigenen MIDI/OSC Controller entwickeln

Im Folgenden werden Beispiele vorgestellt, die beim Bau eines eigenen USB-MIDI Controllers (Steuergerät) behilflich sind. Dazu wird hauptsächlich mit den Open Source Physical-Computing-Plattformen Arduino bzw. Teensy (Mikroprozessoren) und der MIDI-Steuerungssprache gearbeitet. Mithilfe eines zusätzlichen Klientprogramms (Max/MSP oder Pure Data) können die eingehenden Steuerbefehle komplex weiterverarbeitet werden.

MIDI ist die Abkürzung für „Musical Instrument Digital Interface“ und wurde erstmals 1982 als Schnittstelle entwickelt. Sie sollte dazu dienen, die damals aufkommenden elektronischen Musiktechnologien (Synthesizer, Computer usw.) untereinander zu synchronisieren bzw. anzusteuern. Aus diesem Grund haben sich die unterschiedlichen Unternehmen auf diese Norm geeinigt, um entsprechend eine Kommunikation zwischen den Endgeräten (Master und Slave) zu ermöglichen. Inzwischen hat sich MIDI als ein fester Bestandteil in der Musikbranche etabliert, wird ständig weiterentwickelt und wird auch in anderen Bereichen (Automatisierungssteurung für Heimanlagen) gerne zur Steuerung verwendet. (Vgl. Braut, 1993, S. XXIII) Für die Kommunikation ist heute oftmals noch eine sogenannte fünf Pin Dioden-Steckverbindung mit einer asynchronen seriellen Schnittstelle, die mit 5 V und 5 mA betrieben wird, notwendig. Über diese werden 10 Bit Steuerbefehle (Bit 1= Start-Bit, Bit 2-8= Daten-Bits, Bit 10= Stop-Bit) mit einer Geschwindigkeit von 31250 bps (Bits pro Sekunde) übertragen. Daraus ergibt sich eine Datenfrequenzrate von 3125 Midi-Bytes pro Sekunde. (Vgl. Noll, 1994, S. 17) Folgende MIDI-Nachrichten können übermittelt werden:

  • Note ON/OFF
  • Poly Pressure
  • Channel Aftertouch
  • Control Change (CC)
  • Program Change
  • Pitch Bend
  • System Common Messages
  • System Exclusive

Anders als in der klassischen Notation werden Noten bzw. die Element IDs und ihre Anschlagsintensität bei MIDI in Dezimalzahlen von 0 bis maximal 127 angegeben. Diese können insgesamt über 16 einzelne MIDI-Kanäle übermittelt werden. Durch die zunehmende Etablierung von Computern bzw. Mikroprozessoren und ihren eigenen Schnittstellen (z. B, „Universal Serial Bus“ (USB)) bzw. Protokollen (CoreMIDI Treiber bei Mac OSX) wird eine klassische Dioden-Steckverbindung seltener gebraucht, sodass die neusten MIDI Geräte oftmals nur noch einen USB Anschluss besitzen.

Benötigte Komponenten:

Abb. 11 Arduino Mega 2560 (Rev.3), Arduino UNO (Rev.2), Teensy 2.0++

Abb. 11 Arduino Mega 2560 (Rev.3), Arduino UNO (Rev.2), Teensy 2.0++

  • Mikroprozessor (Arduino oder Teensy)
  • Arduino IDE (Integrierte Entwicklungsumgebung) (Für das Teensy muss noch die Teensyduino Erweiterung heruntergeladen werden.)
  • Computer (Für dieses Beispiel ist es sekundär, ob ein Windows oder Mac Computer verwendet wird. Falls nur ein Linux System zur Verfügung steht, muss man Pure Data verwenden.)
  • Cycling’74 Max/MSP (Es kann auch Pure Data verwendet werden.)
  • Maxuino Erweiterung für Max/MSP (Falls Pure Data verwendet wird, muss die Pduino Erweiterung geladen werden.)
  • OSC-route Erweiterung von CNMAT
  • Fritzing Software (Dies ist eine kostenlose Software zur Konzeptionierung von virtuellen Schaltungen.)
  • USB-Kabel (Arduino: Typ A auf Typ B; Teensy: Typ A auf Mini-B)
  • Litzendraht (verschiedene Farben, um später die Leitungen besser differenzieren zu können)
  • Taster (Kurzhubtaster, Drucktaster)
  • Drehpotentiometer (10kOhm)
  • LED (optional, für ein optisches Feedback)
  • Widerstand (10kOhm für Taster, 220kOhm für LED)
  • Experimentier-Steckbrett (Breadboard)
  • Lochrasterplatine
  • Stift-/Buchsenleisten (2,54mm Abstand)

Für viele Jugendliche wird es das erste Mal sein, dass sie mit MIDI bzw. einer Physical-Computing-Plattform in Kontakt kommen. Zuerst mag die Thematik etwas komplex erscheinen, aber aufgrund dessen, dass die Arduino Umgebung speziell für den kreativen Bereich entwickelt und Open Source gehalten wurde, sind mit der Zeit viele Erweiterungen, sogenannte Libraries, entstanden, die das Arduino zu einem Multifunktionswerkzeug unter den Mikroprozessoren macht. Das Teensy arbeitet nach dem gleichen Prinzip und durch die „Teensyduino“ Erweiterung ist es möglich, auch viele der Arduino Libraries zu nutzen. Ein Teensy Mikroprozessor eignet sich besser für direkte USB-MIDI Projekte, weil dieses mit der Teensyduino Erweiterung als natives USB-MIDI Interface, ohne zusätzliche Modifikationen & Firmwares (Betriebssystem des Mikroprozessors), genutzt werden kann und Zusatzprogramme (Max/MSP, Pure Data, Processing usw.) nicht zwingend für die Kommunikation erforderlich sind.

Um den Einstieg in die Thematik zu erleichtern, wird beim ersten Beispiel mit der „Firmata“ Library (wird mit der Arduino IDE automatisch installiert), Max/MSP und der „Maxuino“ bzw. „OSC-route“ Erweiterung gearbeitet. Bevor die Jugendlichen damit beginnen können, müssen die oben aufgeführten Softwarepakete entsprechend heruntergeladen und installiert werden. Danach schließt man das Arduino über ein USB-Kabel an den Computer an, öffnet die Arduino IDE und wählt unter dem Menüpunkt Tools, Boards (Menüunterpunkt) seinen Arduino Mikroprozessor aus. Nun geht man in der Arduino IDE auf den Menüpunkt „Datei“ und dort auf Beispiele. Unter dem Punkt „Firmata“ findet man einen Verweis auf den sogenannten „StandardFirmata“ Sketch, den man durch einen Mausklick öffnet. Anschließend lädt man diese auf sein Arduino, womit das Arduino fertig konfiguriert wäre.

Damit das Verständnis für die komplizierten Abläufe erleichtert wird, sollen die Jugendlichen erst einmal versuchen, eine LED via Max/MSP am entsprechenden Mikroprozessor anzusteuern. Für diesen Zweck müssen die Jugendlichen eine kleine LED-Schaltung bauen (siehe Abb. 12). Die LED soll mithilfe von Max/MSP und der Maxuino Erweiterung angesteuert werden. Dafür sollen die Jugendlichen die „Maxuino Beispiel.maxpat“ Datei öffnen.

Abb. 12 Mikroprozessor (Arduino UNO), LED, 220kOhm Widerstand und Breadboard

Abb. 12 Mikroprozessor (Arduino UNO), LED, 220kOhm Widerstand und Breadboard

Bei dem Maxuino Beispiel muss zuerst der angeschlossene Mikroprozessor ausgewählt werden. Viele Rechner haben heute verschiedene Module zur Kommunikation eingebaut (Bluetooth, Wlan usw.), deshalb muss genau darauf geachtet werden, dass man den richtigen Serial Port ausgewählt hat – die Mikroprozessoren haben meistens so etwas wie „usbmodem“ in der Kennung (siehe Abb. 13). Eine feste Definierung, im Vergleich zu einer dynamischen Auswahl durch ein „Dropdown-Menüs“ des Serial Ports ist nur bedingt nützlich, weil sich die Ports durch spätere Geräte bzw. einen Neustart verändern könnten.

Abb. 13 „Maxuino Beispiel. maxpat“, die grüne Markierung zeigt den Serial Port des Mikroprozessors an.

Abb. 13 „Maxuino Beispiel. maxpat“, die grüne Markierung zeigt den Serial Port des Mikroprozessors an.

Im nächsten Schritt müssen die Pins entsprechend in der Software definiert werden. Um eine LED anzusteuern, muss in unserem Beispiel, wie in Abb. 14 zu erkennen ist, der Pin 13 des Mikroprozessors als „digital Output“ („D out“ im Max Patch) definiert werden (siehe Abb. 14). Es wird der OSC („Open Sound Control“) Befehl „/13/mode $1“ an das „maxuino“ Objekt gesendet. „$1“ steht in Max/MSP für eine dynamische Variable bzw. ein Argument. „$1“ wird entsprechend durch einen Wert ersetzt, in diesem Beispiel durch eine Eins oder Null. Diesen Vorgang kann man auch als sogenanntes „Messages“ Objekt mithilfe eines „loadbang“ Objekts beim Öffnen des Max Patchs fest definieren, sodass eine manuelle Konfiguration bei jedem Start überflüssig würde.

Abb. 14 „Maxuino Beispiel. maxpat“, Pin 13 als digital Output definieren (grüne Markierung).

Abb. 14 „Maxuino Beispiel. maxpat“, Pin 13 als digital Output definieren (grüne Markierung).

Sind die Anschlüsse richtig definiert muss man nun einen Steuerbefehl für den entsprechenden Pin erstellen. Dazu stellt man die Werte, unter Punkt 3. im Maxuino Beispiel, auf den vorher definierten Pin ein (siehe Abb. 15). Nun klickt man auf den Schalter daneben – in Max/MSP heißt dieses Objekt „toggle“ – daneben, wodurch die Nachricht „/13/digitalWrite $1“ an das „maxuino“ Objekt gesendet wird – Eins bedeutet LED an und Null bedeutet LED aus. Die LED sollte entsprechend dem Status des Schalters in Max/MSP gesteuert werden. Falls dies nicht der Fall ist, müssen alle vorherigen Einstellungen Schritt für Schritt überprüft werden.

Abb. 15 Befehl an Pin 13 senden, um LED an bzw. aus zu schalten (grüne Makierung)

Abb. 15 Befehl an Pin 13 senden, um LED an bzw. aus zu schalten (grüne Makierung)

Als nächstes kann versucht werden, einen Befehl über einen Taster an den Mikroprozessor zu senden und Max/MSP bzw. „Maxuino“ liest und wertet die eingehenden Signale des Mikroprozessors aus. Dafür muss folgende Schaltung konstruiert werden:

Abb. 16 Arduino UNO, Kurzhubtaster, 10kOhm Widerstand und Breadboard

Abb. 16 Arduino UNO, Kurzhubtaster, 10kOhm Widerstand und Breadboard

Das Prinzip dieser Schaltung ist im Grunde das gleiche wie vorher bei der LED, nur dass der Weg nun umgekehrt vollzogen wird. Um die Befehle in Max/MSP durch das „maxuino“ Objekt auswerten zu lassen, muss der Pin (2), an dem der Taster anliegt, als „digital Input“ („D in“) definiert werden (Abb. 17). Beim Betätigen des Tasters wird der Befehl „/digital/2 $1“ an Max/MSP gesendet. Durch „OSC-route /digital /analog“ werden die Nachrichten zum ersten Mal gefiltert – die Nachricht besteht nun nur noch aus „/2 $1“. Mit dem weiteren „OSC-route /0 /1 /2 /3“ Objekt – „/“ plus eine Ziffer stellt einen Pin dar – wird der entsprechende Pin ausgewertet und man erhält den Wert der Nachricht. Nun sollte beim Schließen bzw. Drücken des Tasters das LED bzw. toggle Objekt im „Maxuino Bespiel“ (siehe Abb. 17, „grüne Markierung“) reagieren und den Status anzeigen.

Abb. 17 „Maxuino Beispiel.maxpat", Auswertung der eingehenden Nachrichten

Abb. 17 „Maxuino Beispiel.maxpat”, Auswertung der eingehenden Nachrichten

Nun kann mithilfe von verschiedenen Elementen (Drehpotentiometer, Taster usw.) begonnen werden, einen MIDI Controller zu konzeptionieren. Es kann hilfreich sein, sich vorher zu überlegen, für welchen Zweck man diesen benötigt bzw. was man steuern möchte. Leider erlaubt die Maxuino Erweiterung ohne zusätzliche Modifikationen im Firmata Sketch bzw. Maxuino Quellcode beispielsweise keine sogenannten „Multiplexer“ oder Matrixschaltungen, sodass man eine komplexe Schaltung mit vielen Optionen, wie z. B. einer Shiftfunktion, über die Max/MSP Oberfläche lösen muss. Den Schaltplan für den MIDI Controller kann man mithilfe der kostenlosen „Fritzing“ Software planen bzw. erstellen.

Abb. 18 Hardware Setup für Maxuino Beispiel (grüne Lineie= USB-Kabel, blaue Linie= Verdrahtu

Abb. 18 Hardware Setup für Maxuino Beispiel (grüne Lineie= USB-Kabel, blaue Linie= Verdrahtu

Anschließend kann begonnen werden, die entsprechenden Elemente in Max/MSP mit z. B. den „note-out“ oder „ctlout“ Objekten (siehe Abb. 19) an die Zielsoftware (z. B. eine DAW oder das später aufgeführte „Projection Mapping“ Programm (Resolume, MadMapper, VPT usw.) zu senden.

 Abb. 19 Senden einer MIDI-Nachricht bzw. OSC-Empfang über UDP


Abb. 19 Senden einer MIDI-Nachricht bzw. OSC-Empfang über UDP

Für viele Smartphones und Tablets gibt es heutzutage entsprechende OSC Applikationen (TouchOSC, Control usw.), die über das „udpreceive“ Objekt empfangen werden können und eine zusätzliche Steuerung erlauben – Bewegungssteuerung durch ein internes Gyrosskop(Beschleunigungssensor), Kompass, GPS-Modul usw.. Die OSC-Applikationen können sehr hilfreich sein, um ein geplantes MIDI-Controller-Projekt‚ vorab zu testen, ohne dass größere Arbeiten nötig sind. Der größte Nachteil bei der Verwendung eines sogenannten Touchscreens ist, dass man kein direktes analoges Feedback erhält und bei der Steuerung bzw. Hand-Augen-Koordination immer der Bildschirm beobachtet werden muss. Die ideale Lösung ergibt sich aus einer hybriden Verbindung zwischen „Touchscreen“ und analogen Elementen, die auch blind durch den Tastsinn erfühlt werden können. Gibt man den Begriff „DIY MIDI Controller“ in die „Google Suchmaschine“ ein, werden einem zahlreiche Projekte und Anleitungen angezeigt, die man als Inspiration für seine eignen Geräte oder zur Problemlösung nutzen kann.

5.4 „Ich glaub, du hast’n Kurzen.“ – Elektronische Schaltkreise durch „Circuit Bending“ entdecken |

5.6 Der Bildschirm war gestern – „Projection Mapping“ als visuelle Präsentationsform |