Gewinner der Karl Max von Bauernfeind-Medaille 2016
Philosophie entdecken
fatum 1 | , S. 59
Inhalt

SuperCollider Soundwalk

Arduino based sonification

Die Tonkunst verleiht uns die Möglichkeit, über den Tellerrand hinaus zu schauen und etwas Unkonventionelles zu leisten: Sie vereint die Disziplinen der Architektur, Skulptur und der Zeichnung mit der Musik sowohl im künstlerischen als auch im technischen Sinn. Anhand eines selbstgebauten technischen Artefaktes wird diese simplifizierte Darstellung erläutert.

Neuerungen technischer Art sind weder in der Musik noch in der Kunst ein modernes Phänomen. Die Entwicklung des Cembalos bis zum Hammerklavier wie wir es heute kennen ging mit zahlreichen mechanischen Erfindungen einher. Aus einem vergleichsweise einfachen Zupfmechanismus beim Cembalo wurden komplexe Übertragungsmechanismen beim Hammerklavier, die feinere Abstufungen in Artikulation und Dynamik erlauben. Jede vergangene technische Umgebung führt potentiell zu einer Umgebung die es erlaubt, etwas Neues zu komponieren, herzustellen oder zu bewirken. Die daraus resultierenden Erfahrungen kommen wiederum neuen Generationen zugute.

In der Welt wie wir sie heute kennen, könnte man Elektrizität als wichtigste Umgebung bezeichnen. Ohne sie wären die Möglichkeiten der Tonkunst sehr beschränkt und dies steht im Kontrast zu ihrem eigentlichen Ziel: Den Horizont der Zuhörer und Teilnehmer zu erweitern. Besonders hervorzuheben ist, dass nicht nur ein geschaffenes Objekt als Werk betrachtet werden sollte, sondern das große Ganze, die Gesamtheit aller Elemente die das Werk entstehen lassen, wie zum Beispiel besagte Teilnehmer, die je nach Intention des Künstlers viele verschiedene Rollen annehmen können. Natürlich ist es nicht grundsätzlich erforderlich Personen einzubeziehen, sie sind eine anreichernde Komponente zu elektronischer/mechanischer Hardware, Geräuschen und Filtern mit deren Hilfe man in diesem Feld experimentiert. Wie man es bei z. B. Florian Hecker beobachten kann entstehen auf diesem Weg Installationen die verschiedene Aspekte der Tonkunst durch Mikrofone, Verstärker, Steuergeräte und mechanischem Material behandelt und vereint.

Konzepte der Tonkunst

Die einfachsten Projekte lassen sich auch ohne besondere Hardware- und Softwarekenntnisse umsetzen. Dazu sind lediglich Kreativität und ein minimales technisches Verständnis nötig. So ist es zum Beispiel möglich eine beliebige bereits vorhandene Hardware, zum Beispiel einen Wecker oder ein elektronisches Spielzeug für Kinder, auseinanderzunehmen und verändern um den Ton den sie produziert von äußeren Faktoren abhängig zu machen. Geeignet hierfür sind etwa Sensoren, die als parameterabhängiger Widerstand fungieren, zum Beispiel Lichtsensoren (Fotowiderstände). Durch das Einsetzen und Löten an entsprechenden Stellen kann man die Fähigkeiten des Objektes erweitern und dynamische Ergebnisse erzielen. Doch wie will ein Mensch verstehen an welcher Stelle ein Schaltkreis sinnvoll modifiziert werden kann, und hat er überhaupt die Ausrüstung dafür? Die Antwort lautet für kleine Projekte eindeutig ja, denn der menschliche Körper an sich ist ein Widerstand. Somit reicht bereits das Befeuchten eines Fingers wenn ein aktiver Schaltkreis vorsichtig berührt wird um mit den daraus resultierenden Effekten zu experimentieren, und Schlüsse daraus zu ziehen.

Im Gegensatz zu den klassischen Künsten verlangen komplexere Projekte in der Tonkunst nicht nur höhere Kreativität sondern darüber hinaus besseres technisches Verständnis. Anders gesagt, der Musiker bzw. Künstler sollte auch Ingenieur sein. Auf diesem Weg kann man sich dem Input/Output System nähern, und somit nicht nur Gedanken darum machen wie man einen gegebenen Gegenstand modifiziert, sondern auch was er ausgibt zu nutzen und weiterzuverwenden. Dies kann, muss aber nicht explizit mit Hardware gemacht werden, es funktioniert auch auf reiner Software Basis. In jedem Fall ist es hier der Faktor Mensch, der den meisten Einfluss auf das Projekt hat. Dafür ist „Sonification“1 das beste Beispiel. Das Ziel ist hier, die Bewegung eines oder mehrerer Menschen/Hardware durch Hilfe von Steuergeräten in Ton(-kompositionen) auszudrücken, und die Erfahrung der Menschen auf diesem Wege anzureichen. Das Projekt das in diesem Artikel vorgestellt wird gehört auch zu dieser Kategorie.

Einführung in Hard- und Software

Die vielfältige Programmiersprache SuperCollider ist eine der wenigen Möglichkeiten einen Algorithmus, in Fachkreisen auch „Patch“ genannt, für die Tonkunst zu schreiben. Sie wurde zur freien Entwicklung unter der GPL kostenlos veröffentlicht, und wird somit hauptsächlich von einem aktiven Kern von freien Entwicklern, Forschern und freiwilligen Mitgliedern gefördert.2 Diese verbessern nicht nur die Stabilität und Leistung des Interpreters für Echtzeitsynthese, sondern erstellen und warten die Klassen der Sprache. Damit wird sie flexibel und bietet vor allem immer mehr Funktionen die von Haus aus verfügbar sind um Innovationen anzuregen, und zusätzlichen Programmieraufwand vorzubeugen. Einfachste Beispiele einer Standardfunktion beginnen mit der Benutzung eines deterministischen Unit Generators wie dem oszillierendem SinOsc:

{SinOsc.ar}.play

Bei Evaluierung dieser Zeile in SuperCollider werden, da für die Funktion keine Argumente angegeben wurden alle Standardwerte verwendet, und somit ein anhaltender Ton in Höhe von 440 Hz ausgegeben, bis der Befehl zum Terminieren ausgeführt wird. In der Praxis sind nur der Vorstellung Grenzen gesetzt was man mit der Echtzeitsynthese von Routinen und den vielen anderen Unit Generators, Quarks und Extensions anstellt. Letztere gehören nicht zu den Standardfunktionen von Supercollider, können jedoch kostenlos geladen werden. Dies ist dem OpenSource System zu verdanken, und oft werden auch ganze Algorithmen der Öffentlichkeit zur Verfügung gestellt. Ein nützlicher Patch besteht natürlich aus mehr als nur einer Funktion und ihren Defaultwerten, hierfür ein Beispiel:

var winenv;
//Chaotic UGEN

SynthDef(\CHU, {Out.ar(0, SinOsc.ar(CuspL.ar(40, MouseX.kr(0.9,1.1,1),
MouseY.kr(1.8,2,1))*800+900))*0.4 }).play(s);

//Granular UGEN
Buffer.read(s, P1atform.resourceDir +/+ 'sounds/a11wlk01-44_1.aiff');

winenv = Env([0, 1, O], [0.5, 0.5], [8, -81);
Buffer.sendCollection(s, winenv.discretize, 1);
SynthDef(\gran, {arg gate = 1, amp = 1, sndbuf, envbuf;
	var pan, env;
	pan = MouseX.kr(-1, 1);
	env = EnvGen.kr(
		EnV([0, 1, 0], [1, 1], \sin, 1),
		gate,
		levelScale: amp,
		doneAction: 2);
	Out.ar(0,
		GrainBuf.ar(2, Impu1se.kr(10), 0.1, sndbuf, LFNoise1.kr.range(0.5, 2),
			LFNoise2.kr(0.1).range(O, 1), 2, pan, envbuf) * env)
	}).p1ay(s);

Dieser Patch generiert eine Echtzeitsynthese in Abhängigkeit der Mausbewegung in X und Y Richtung, und beinhaltet hauptsächlich zwei verschiedene Unit Generators. Der erste ist SinOsc basiert und benutzt eine Rekursionsgleichung für die Argumente, der zweite nimmt eine Audio Datei als Grundlage seiner Berechnungen.

Theoretisch ist es möglich, traditionelle Instrumente nachzuahmen und mittels Hardware oder einer Benutzeroberfläche zu steuern, auch ganze Kompositionen automatisch zu generieren. Über den Sinn des letzteren lässt sich allerdings streiten, denn diese Naturimitation kommt dem was der Mensch schaffen kann nicht nahe. Es kann, so wie es sein sollte, Innovationen anregen, jedoch entsteht keine leidenschaftliche Symphonie allein durch mathematische Wahrscheinlichkeiten. In meinem Projekt Counterpoint Collider habe ich zwar durch eine synthetische Flöte und einem Klavier eine kontrapunktische Komposition mit praktisch unendlichen Ergebnissen umgesetzt, dennoch ist der Algorithmus im Vergleich zu manuell menschlich erstellten Werken des gleichen Fachs minderwertig. Das lässt sich aber nicht pauschalisieren und auf andere, vor allem modernere, Fächer der Musik übertragen. Somit wäre es zu beweisen ob ein Algorithmus geschrieben werden kann der z. B. die Komponisten eine Sparte der elektronischen Musik durch seine Perfektion ablöst, und täglich tausende von hochqualitativen Stücken ausrechnet.

Live Coding ist ein wichtiges Element der Zusammenarbeit in einem Projekt, und eine weitere Form wie Menschen die Tonkunst softwarebasiert beeinflussen können. In diesem Fall arbeiten sie in einem Kollektiv in Echtzeit an Algorithmen, verändern sie und beeinflussen das Ergebnis und die Wiedergabe ganz nach den persönlichen Wünschen des Einzelnen. Durch die Architektur von SuperCollider ist es nicht nötig, dass sich die Individuen im gleichen Raum befinden um das zu leisten. Eine live Coding Session könnte von einem beliebigen Ort aus gestartet und ausgeführt werden, ohne dass sich die verschiedenen Mitglieder die die Patches evaluieren und bearbeiten je in Person sehen.

Als elektronische Hardware bietet sich grundsätzlich das Open Source3 Arduino Board an. Dieses Steuergerät ist eine Basis für Robotik und Tonkunst Projekte, und lässt sich mit allen denkbaren technischen Erweiterungen ausstatten. Dazu gehören unter anderem Sensoren, Shields und Module zur Übertragung. Der Arduino wird außerdem in verschiedenen Editionen vertrieben, um die Einsatzmöglichkeiten von Haus aus zu vereinfachen. Zu beachten ist, dass er ohne eingebaute Software kommt, und je nach Bedarf programmiert werden muss. Durch seine eigene Programmiersprache und das zugehörige Tool, erlaubt er es seinen Nutzern Software für das Board zu schreiben. Somit ist die völlige Freiheit gegeben die benötigt wird. Dank dem Open Source Prinzip lassen sich Teile, oft sogar ganze Sätze, von Arduino Code finden und ausprobieren, ferner sind die gegebenen Beispiele in den Hilfedateien sehr zahlreich.

Zwar sind die Optionen die einem zur Verfügung stehen quasi grenzenlos, dennoch benötigt jede Komponente die man anbringt zusätzlichen Code und entsprechende technische Ressourcen. Deswegen sollte man im Vorfeld genau ausrechnen was tatsächlich benötigt wird, um weitere Kosten und, wenn dies ein Faktor ist, Platzverschwendung zu vermeiden. Darüber hinaus müssen manche Bauteile manuell und außerhalb des Arduinos in ihrer Firmware konfiguriert werden, bevor sie einsatzbereit sind.

SuperCollider Soundwalk

Alle bisher beschriebenen Grundlagen machen die Erstellung eines technischen Artefaktes möglich. Nachfolgend wird der Prozess für den SuperCollider Soundwalk im Detail erklärt.

Benutze Hardwarekomponenten umfassen:

Selbstverständlich muss man sich nicht streng an die Vorgaben halten, es ist zum Beispiel möglich eine neuere Version des Arduinos oder einen anderen Beschleunigungssensor, nachfolgend BS genannt, zu verwenden. Falls das Arduino Shield das man benutzt keine Stecker hat, sollte die erste Tätigkeit das Löten dieser sein. Nach einigen Experimenten was die Länge der Kabel anbelangt sollte man auch diese mit einem Lötkolben fest anbringen. Es gibt insgesamt fünf Verbindungen die auf diesem Weg angeschlossen werden müssen:

Für die XBee RF Module reicht eine Steckverbindung aus. Dadurch dass das Steuergerät in einer Gürteltasche mit Plastikverkleidung getragen wird, bietet sich eine Chipantenne für die Module an. Als Stromquelle kann ein Verbund aus 4xAA Batterien verwendet werden. Das zweite RF Modul wird durch den XBee Explorer mit einem Computer verbunden um die Daten des Arduinos drahtlos zu empfangen, und an SuperCollider weiterzuleiten. Vor der Platzierung des Steuergeräts in der Gürteltasche müssen die XBees natürlich erst auf dieselbe Frequenz eingestellt, und das mit dem PC verbundene als Endpoint konfiguriert werden. Der nächste Schritt ist die Erstellung und Übermittlung der Arduino Software. Dies geschieht durch sein Tool und beinhaltet die Anweisung was das Steuergerät beim Start einmalig und danach durchgehend ausführen soll.

int x, y, z;
void setup()
{
	Serial.begin(9600);  // Baudrate ist 9600
}

Der Start des Steuergeräts setzt in diesem Projekt lediglich die Arbeitsgeschwindigkeit fest. Interessanter ist die kontinuierliche Tätigkeit, nämlich das Lesen der gemessenen Bewegungsdaten. Es bietet sich für die weitere Verarbeitung an den Dezimalwert anzeigen zu lassen, dies ist jedoch optional. Ein Beispiel für die X-Achse:

void loop()
{
	x = analogRead(0);     // Analog Input 0 lesen
	Serial.print(x, DEC);  // Beschleunigung der X-Achse ausgeben
	Serial.print(" ");     // Leerzeile dazwischen ausgeben
	delay(300);            // 300ms bis zur nächsten Messung warten
}

Nach Fertigstellung und Übermittlung der Software kann das Steuergerät mit den Batterien verbunden und in der Gürteltasche getragen werden.

Der zweite Teil besteht in der Verarbeitung der übermittelten Bewegungsdaten des Sensors. Dazu wird ein Algorithmus in SuperCollider geschrieben und die Arduino Klasse verwendet. Um die Kommunikation zu ermöglichen muss der entsprechende Port geöffnet werden.

Danach wird zur Musikgenerierung eine granulare Synthese durch die Klasse GranCloud ausgeführt. Für jede Achse gibt es verschiedene Einstellungen die in Abhängigkeit zum Wert der Beschleunigung zur Geltung kommen. Die X- und die Z-Achsen haben eine einfache granulare Basis, wobei der Wert der Y-Achse mit einer zuvor gebufferten Datei verrechnet wird.

Veranschaulichung der Verknüpfung zwischen XBee-Modulen, Arduino und SuperCollider.
Abbildung: Daniel Petric

All diese Berechnungen finden in Echtzeit statt und wiederholen sich zyklisch wie man im unteren Teil des Algorithmus sehen kann. Wie lange und wann die granularen Clouds laufen ist an den Ausgabewert der Achsen des Beschleunigungssensors gebunden, hierfür wurde die Methode fuzzyEqual verwendet. Die gebufferte Cloud wird zum Beispiel nur unter der Bedingung gespielt dass sich der Y-Achsen und X-Achsen Input um 10 oder mehr unterscheidet. Dementsprechend ändert sich auch der Klang der Clouds selbst.

p = ArduinoSMS("/dev/tty.usbserial-A700eECx", 9600); // Port und Baudrate
(

g = Buffer.read(s, "sounds/a11wlk01.wav");
p.action = { |... msg| ~xin = msg[0].postln; ~yin = msg[1].postln; ~zin = msg[2].postln;
a = GranCloud.preset(s, "sine_grain");
b = GranCloud.preset(s, "buf_grain", g.bufnum);
c = GranCloud.preset(s, "sine_grain");

fork {
	x = Routine {
	a.p1ay;
	a.duration = 2;
	a.center[\freq] = ~xin*3 - 700; // smaller value = lower main freq
	a.center[\rate] = (~xin/500)*2: //smaller value = faster grains
	a.center[\dur] = ~xin*0.0002; //smaller value = less tail
	a.dev[\rate] = 0.01;
	a.dev[\amp] = 0.5;
	a.dev[\freq] = ~xin; // smaller value = less freq deviation
}; //routine X end
	y = Routine {
	b.play;
	b.duration = 0.2;
	b.center[\bufStartPos] = Env([ 0, 1, 0, 1, 0 ], [ 3, 0, 1, 6 ]);
	b.center[\amp] = 0.2;
	b.center[\bufRate] = ~yin/300; //smaller value = lower main freq
	b.dev[\bufRate] = 0.2 - ~yin/500; //smaller value = faster/more grain deviation
}; //routine Y end
	z = Routine {
	c.play;
	c.duration = (~zin*0.0005)*3; //smaller value = less total duration
	c.center[\amp] = 0.01;
	c.center[\dur] = 0.003;
	c.center[\freq] = Pseq(Array.fill(3.5, { 50.exprand(~zin*4.2) }), inf).asStream; // smaller value = lower main freq
	c.dev[\amp] = 0.1;
}; //routine Z end
		loop {
				if (~xin.fuzzyEqual(350, 200) >= 0.5, { x.p1ay },{ x.reset });//wi11 play while 450>~xin>250
				if (~yin.fuzzyEqual(~xin, 50) <= 0.2, { y.p1ay },{ y.reset });//will play while ~yin and ~xin are 10 or more away from each other
				if (~zin.fuzzyEqual(300, 50) <= 0.5. { z.play },{ z.reset });//wi11 play while 325<~zin<275
			1.yie1d;
			"nextCloud".postln;
			r.yie1d;
			}
}; //fork end
0.02.yield;
}; //action end

)

Im Original wurde dieses Tonkunstprojekt mit einem Verstärker und einer begleitenden Improvisation auf einer Orgel in der Kirche aufgeführt. Die Intention des Künstlers war es die Bewegungen eines improvisierenden Organisten durch granulare Synthese anzureichern. Insofern waren Zuhörer keine aktiven Teilnehmer des Projektes, jedoch ausdrücklich erwünscht, denn es gibt, oder eher gab, kein Register das für diese improvisierende Art des Orgelspiels zur Verfügung stand, und die Zuhörer zur Meditation anregt.


  1. Um mehr über dieses Thema zu erfahren ist dringend das OpenAccess Sonification Handbook http://sonification.de/handbook zu empfehlen.
  2. Wie SuperCollider im Kern funktioniert lässt sich auf der Projekthomepage nachlesen: http://supercollider.sourceforge.net, ferner ist das SuperCollider Book von MIT Press zu empfehlen.
  3. Projekthomepage des Arduino: http://arduino.cc

Feedback

Dieser Thread wurde geschlossen.