Musikinformatiker — Live-Coder — Klangkünstler

Ambisonics4Live

Das Packet Ambisonics4Live ist eine von mir entwickelte Mehrkanalerweiterung für das Sequenzerprogramm Ableton Live. Zum Zeitpunkt der Entwicklung war Ableton Live 8.3.4 die aktuellste Version und wurde dafür auch konzipiert. Mittlerweile bietet Ableton Live 10 auch ein eigenes, kostenloses Tool für Multikanal-Panning an, den sogenannten Surround Panner. Die folgenden Ausführungen beziehen sich daher auf einen Zeitpunkt, an dem noch kein vergleichbares Werkzeug verfügbar war.

Max for Live

Seit 2009 ist die Entwicklungsumgebung Max/MSP/Jitter in Ableton Live integriert und nennt sich Max for Live. Damit wurde es möglich Max-Patches in des Sequenzerprogramm einzufügen und somit auf einer tieferen Ebene Signalbearbeitung, MIDI-Operationen oder die Einbindung von Video-/Sensorschnittstellen zu realisieren.

Da ich bereits in frühren Projekten mit dem Spatialisierungsverfahren Ambisonics in Max/MSP gearbeitet hatte, schien es zunächst trivial, Ambisonics auch in Ableton Live 8 zu integrieren. NB: Neben Ambisonics gibt es alleine für Max/MSP eine größere Anzahl an implementierten Klangverräumlichungstechniken (vgl. u.a. ViMiC, VBAP, DBAP, Spatialisateur).

Ambisonics
Ambisonics wurde in den 1970er Jahren von dem britischen Mathematiker Michael Gerzon entwickelt. Es war ursprünglich zur Aufnahme und Wiedergabe von realen Aufnahmen konzipiert worden. Eines der großen Vorteile von Ambisonics ist das Format: Die Information über die räumliche Position der Klangquelle ist losgelöst von der aktuellen Lautsprecherkonfiguration, und bietet dadurch große Flexibilität.

Ableton Live nur Stereo?

Die Integration von Ambisonics in Ableton Live 8 schien jedoch zunächst an einer internen Limitierung zu scheitern: Live unterstützte in der Version 8.3.4 anders als andere DAWs wie ProTools keine Mehrkanal-Spuren und bot nur einen Stereoausgang.

Auch direktes Routing über Max for Live funktionierte nicht. Das Audio-Interface kann über das übliche [dac~ ]-Objekt innerhalb von Max for Live nicht angesprochen werden, und auch das Routing in einen parallel laufenden Max-Patch via [send~] und [receive~] ist nicht möglich. Eine weitere Alternative wäre die Verwendung der Objekte [plugsend~] und [plugrecieve~], die jedoch offiziell nicht mehr unterstützt werden (was sich in unkontrollierten Latenzschwankungen und den dadurch entstehenden Glitches äußert).

Alternative Verräumlichungen in Ableton Live 8.3.4
Falls man nicht mit Ambisonics arbeiten möchte, kann man die Spatialisierung auch durch reine Amplitudensteuerung bewerkstelligen, indem man die Signale der einzelnen Kanäle auf unterschiedliche Busse sendet, die sogenannten Return-Kanäle in Ableton Live. Über eine synchronisierte Ansteuerung dieser Kanäle kann jede einzelne Spur derart geroutet werden, dass eine Verräumlichung zustande kommt. Ein Beispiel kann man in diesem Video sehen.

Max/MSP + JackRouter + Max for Live

Da mir die Lösung mit [plugsend~] und [plugrecieve~] zu heikel war (auch wenn es immer wieder Fälle gibt, bei denen anscheinend keine Probleme damit auftauchen), habe ich mich dazu entschieden, eine weitere Implementierung von Ambisonics in Live zu realisieren. Allerdings greife ich hier nicht mehr nur auf Max for Live zurück, sondern setze zusätzlich JACK, ein low-latency Audio-Server, und Max/MSP im Hintergrund ein. Und Hintergrund ist hier wörtlich gemeint: Nach dem korrekten Start der einzelnen Programme kann man seine Arbeit ausschließlich über die Ableton Live Oberfläche steuern, ohne im weiteren Verlauf noch Fenster wechseln zu müssen. Auch der im im Hintergrund laufende Max-Patch lässt sich über das GUI inneralb Max for Live steuern.

JavaScript in Max

Um die Stärke von Ambisonics, nämlich die Flexibilität im einzusetzenden Setup, weiterhin zu gewährleisten, habe ich auf Patch Scripting in Max zurückgegriffen. Mithilfe von JavaScript kann man Max-Patches dynamisch gestalten und Objekte sowie Verbindungen untereinander durch das Script generieren lassen.

Im folgenden Code-Beispiel ist dargestellt, wie man mithilfe von JavaScript das teilweise lästige Strippenziehen in Max/MSP umgehen und Objekt-Verbindungen automatisiert erstellen lassen kann:

/* create the connections between encoder and decoder */
for(k=0;k<(b*b+2*b+1);k++) {
this.patcher.connect(theencode, k, thedecode, k);
}

Die Variable b steht für die gewünschte Ordnungszahl in Ambisonics. Daraus ergibt sich die Anzahl der intern benötigten Kanäle für das sogenannte B-Format, die sich aus der Umrechnungsformel n*n + 2n + 1 ergeben. Durch die gezeigten Codezeilen wird die korrekte Anzahl an Kanälen zwischen dem En- und Decoder im Max-Patch generiert.

Max vs. JavaScript

Anhand dieses Beispiels sieht man auch die expressive Limitierung graphischer Entwicklungsumgebungen wie Max/MSP und gleichzeitig die Stärke textbasierter Programmiersprachen, wie in diesem Falle JavaScript. Dennoch sei hierbei zu berücksichtigen, dass Max/MSP in erster Linie mit der Absicht entwickelt wurde, ein Werkzeug für Komponisten und Künstler im Bereich der elektronischen Musik anzubieten, die selbst keine professionellen Programmierer sind.

So meint auch Miller Puckette, der Entwickler des ersten Max-Programms: ”Rather than a programming environment, Max is fundamentally a system for scheduling real-time tasks and managing communication among them.“ (Puckette 2002, S. 39) James McCartney, der ursprüngliche Entwickler von SuperCollider, versteht Max/MSP dennoch als Programmiersprache, meint aber einschränkend: ”[...] many people [...] use it without realizing they are programming at all.“ (McCartney 2002, S. 61)

Download Ambisonics4Live
Zu Testzwecken kann hier das Packet heruntergeladen werden (580 kb). Eine ausführliche Readme-Datei ist beigefügt, die nochmals schrittweise durch die Einrichtung führt.



Quellenangaben

McCartney, James: Rethinking the Computer Music Language: SuperCollider, in: Computer Music Journal, Volume 26, Issue 4, Massachusetts 2002, S. 61–68.

Puckette, Miller: Max at Seventeen, in: Computer Music Journal, Volume 26, Issue 4, Massachusetts 2002, S. 31–43.

Letzte Aktualisierung: 3. März 2020
Autor: Matthias Schneiderbanger