Musikinformatiker — Live-Coder — Klangkünstler

Chirotron

Bei dem Chirotron (gr. chiro – die Hand betreffend“) handelt es sich um einen von mir entwickelten Datenhandschuh, der mithilfe von Sensoren sowohl Klangparameter steuern, als auch selbst elektronische Klänge erzeugen kann. Er zählt zu den immersiven Controllern, die die Bewegungsfreiheit bei der Benutzung des Instruments so gut wie nicht einschränken (vgl. Miranda, S. 43)1.

Der Handschuh besitzt drei Drucksensoren an Zeige-, Mittel- und Ringfinger, zwei Flexsensoren an den Fingerrücken von Zeige- und Mittelfinger, und einen dreiachsigen Beschleunigungssensor am Handballen. Alle Sensoren sind an einer Arduino-Mega Platine angeschlossen, auf der ein speziell für den Controller geschriebenes Programm läuft.

Im Folgenden wird auf die Gesten-Input Ebene eingegangen und das eigens entwickelte MegaChirotron-Protokoll erläutert, sowie ein Einblick in dessen Implementierung mit Max gegeben. Durch Ebene wird es erst möglich, weitere Programme zu entwickeln, die aus der Interpretation der Werte und entsprechenden Zuordnung an musikalische Parameter jeglicher Art den Controller auf vielfältige Weise einsetzbar machen und damit das Chirotron erst in das eigentliche Musikinstrument verwandeln.

Weitere Details zur Entwicklung des Chirotrons können hier in meiner Bachlorarbeit „Chirotron – Entwicklung und künstlerische Anwendung eines digitalen Musikinstruments" nachgelesen werden.

Die Arduino Software

Das frei erhältliche Arduino Software-Paket enthält den benötigten USB-Treiber und die Software Arduino, die dem Benutzer eine Entwicklungsumgebung bietet, die auf der Programmiersprache Processing basiert. Die Arduino Programmiersprache wiederum basiert „auf den Grundideen von Processing, wobei sie keine Variante von Java ist, sondern vielmehr auf C++ basiert“ (Odendahl, S. 5)2.

Zur Kommunikation mit dem Arduino-Board bedarf es eines Programms, das die gewünschten Daten an den Computer überträgt. Im Falle des Chirotrons wurde dies mit dem im folgenden vorgestellten selbstgeschriebenen MegaChirotron-Protokoll realisiert.

Das MegaChirotron-Protokoll

Die ursprüngliche Idee ein eigenes Protokoll zu schreiben, kam daher, dass eine gewisse Skepsis gegenüber dem gängigen StandardFirmata-Protokoll und Maxuino (Schnittstelle zwischen StandardFirmata-Protokoll und Max) vorhanden war, da die Daten nicht immer dem gewünschten Ergebnis entsprachen. Um das Kommunikationsprotokoll als Urheber für die Probleme auszuschließen, schrieb ich ein stark vereinfachtes und dennoch für die Zwecke ausreichendes Protokoll, das MegaChirotron-Protokoll.

Jede Einheit eines Datenblocks in diesem Protokoll wird sukzessiv gesendet. Auf Abb. 2 sieht man das Schema eines solchen Datenblocks, wobei die Zeilen in der Reihenfolge aufgelistet sind, in der sie auch empfangen werden.

Die beiden Kürzelzeichen geben Auskunft über den jeweiligen Sensor, der gerade seine Daten übermittelt, so steht beispielsweise D R für Drucksensor Ringfinger. Die Ziffern ergeben eine vierstellige Zahl, die die Spannung des Sensors unskaliert und ungeglättet ausdrückt. Dieser Wert geht von 1000 bis 2023, wobei 1000 für 0V steht und 2023 für die Referenzspannung von 5V.

Im Folgenden sind zwei Zeilen Programm-Code des Arduino-Programms abgebildet. In diesem Falle steht das Kürzel DZ für Drucksensor Zeigefinger und wird benötigt, um den folgenden Wert in Max wieder richtig zuordnen zu können.

Serial.print("DZ");
Serial.print(analogRead(sensorDZpin) + 1000);

Anfänglich gab es Probleme, die Daten in Max richtig zu verarbeiten, um an die gewünschte Information zu kommen. Da die Daten seriell gesendet werden, muss das Max-Programm erkennen können, wann ein neuer Informationsblock ankommt, und aus welchem Sensor das jeweilige Signal stammt. Der dazugehörige Max-Patch arbeitet mit dem [match] Objekt, wie man auch auf Abbildung 3 in der orangenen Box gut erkennen kann. So sucht beispielsweise die Angabe [match DZ nn nn nn nn] im Datenstrom nach Symbolketten, deren erste Zeichenfolge DZ lautet, und gibt die nächsten vier kommenden Zeichen mit aus.

Dies führt allerdings dazu, dass am Anfang das Ergebnis nicht das gewünschte Resultat brachte, da die Rückgabewerte des Arduino zwischen 0 und 1023 liegen und mit beschriebener Methode bei zwei- und dreistelligen Zahlen weitere unbrauchbare Symbole mit in die Symbolkette gepackt wurden (z. B. DZ 2 3 RZ 1, anstatt des gewünschten Resultats von DZ 2 3). Die Lösung bestand darin, das Arduino-Programm so umzuschreiben, dass jeder Zahl noch 1000 addiert wird, was zu konstanten Ergebnissen von vierstelligen Zahlen führt (die Addition sieht man auch in der letzten oben gezeigten Code-Zeile).

Dieser Summand wird am Ende im Max-Programm wieder abgezogen (siehe auch den geöffneten Subpatch "[conversion of arduino]" in Abb. 3) und man erhält das gewünschte Resultat, das nun ohne Probleme weiterskaliert und -bearbeitet werden kann.

Weiterhin habe ich zur besseren Anbindung an andere Software auch das OpenSound Control Protokoll (OSC) integriert. Ebenso enthält das Programm einen MIDI-Modus, der die Daten intern bereits auf eine Skala von 0 bis 127 skaliert und damit eine sinnvolle Steuerung für MIDI-fähige Programme erlaubt.




Quellenangaben

Miranda, Eduardo; Wanderley, Marcelo: New Digital Musical Instruments. Control and Interaction Beyond the Keyboard, Middleton, Wisconsin 2006.

Odendhal Manuel; Finn, Julian; Wenger, Alex: Arduino - Physical Computing für Bastler, Designer und Geeks, 2. Auflage, Köln 2010.

Letzte Aktualisierung: 29. Februar 2020
Autor: Matthias Schneiderbanger