- Eine Partitur für Installationskunst, in der der Code Akkordauswahl, Klangsynthese und LED-Reaktionen gemeinsam dirigiert: Eine an Pflanzenstängel erinnernde Skulptur erzeugt fortlaufend Klang und Licht
- Part A erzeugt Major-, Minor-, Major-7th- und Minor-7th-Akkorde und deren Umkehrungen von A2 bis D5; alle 8 Sekunden wechselt nur ein Ton zu einem anderen Akkord
- Part B wählt aus dem aktuellen Akkord einen Ton aus und spielt ihn mit zufälliger Wellenform und Länge ab, wodurch über eine regelmäßige Akkordfolge unvorhersehbare Einzeltöne gelegt werden
- Bei jedem neuen Akkord oder Ton reagieren die stängelförmigen LEDs; die Farbe jedes Tons ist so gemappt, dass im Quintenzirkel nahe beieinanderliegende Töne ähnlich aussehen
- Die Implementierung ist aufgeteilt in ein C++-Audioprogramm auf einem Raspberry Pi 3 B+ und eine FastLED-LED-Steuerung auf einem Arduino Uno; beide Geräte tauschen Toninformationen über den seriellen Port aus
Eine aus generativen Regeln aufgebaute Partitur
- Part A enumeriert alle möglichen Major-, Minor-, Major-7th- und Minor-7th-Akkorde sowie alle Umkehrungen von A2 bis D5
- Der ausgewählte Akkord wird 8 Sekunden lang abgespielt; danach wechselt er zu einem Akkord, der sich vom aktuellen Akkord nur in einem Ton unterscheidet
- Dieser Ablauf setzt sich fort, indem sich 8-sekündiges Abspielen und die Auswahl eines benachbarten Akkords wiederholen
Regeln zur Klangerzeugung
- Part B wählt einen Ton aus dem aktuell abgespielten Akkord aus
- Der ausgewählte Ton wird mit einer zufälligen Wellenform für eine zufällige Dauer abgespielt
- Ist die Länge kurz, wird er eine zufällige Anzahl von Malen wiederholt; anschließend wird eine zufällige Zeit gewartet, bevor derselbe Vorgang erneut beginnt
Regeln für die Lichtreaktion
- Part C lässt jedes Mal, wenn in Part A ein neuer Akkord getriggert wird, jeden Stängel von der Wurzel bis zur Spitze aufleuchten
- Die Lichtfarben entsprechen den einzelnen Tönen des Akkords; im Quintenzirkel benachbarte Töne haben ähnliche Farbtöne
- Part D beleuchtet jedes Mal, wenn in Part B ein Ton abgespielt wird, die Spitze eines der Stängel in der dem jeweiligen Ton entsprechenden hellen Farbe
Hardware- und Software-Implementierung
- Part A und B werden von einem Custom-C++-Programm übernommen, das auf einem Raspberry Pi 3 B+ läuft
- Es verarbeitet sowohl die Tonauswahl als auch die Synthese des Audio-Buffers
- Part C und D sind als Custom-Programm auf einem Arduino-Uno-Board implementiert
- Es verwendet FastLED, um mit LED-Strips über das WS2812B-Protokoll zu kommunizieren
- Die vom Raspberry Pi an den Arduino übertragenen Toninformationen werden über Signale des seriellen Ports ausgetauscht
Physische Struktur und Funktionsweise
- Die LED-Strips verlaufen durch transparente Schläuche, wie sie in heimischen Aquarien verwendet werden
- Die Schläuche sind mit dickem Nickeldraht verstärkt und lassen sich dadurch in Form bringen
- Das Holzgehäuse unter dem Blumentopf enthält die Mikrocomputer, die Verkabelung und eine 3,5-mm-Audiobuchse zum Anschluss an ein Soundsystem
- Die Stromversorgung erfolgt über zwei Netzstromanschlüsse
- Die Computer arbeiten headless und werden beim Einschalten automatisch gestartet
1 Kommentare
Meinungen auf Hacker News
Diese Person ist auch der Schöpfer eines großartigen endless acid banger, mit dem man im Browser stundenlang herumspielen kann
https://www.vitling.xyz/toys/acid-banger/
Nachdem ich das ausprobiert hatte, kaufte ich mir sogar einen echten 303-Klon und fing an, daran herumzuschrauben. Mir gefällt außerdem, dass alle Demos mit einem stummen „click to start“-Bildschirm öffnen und Autoplay-Videos wie in diesem Artikel standardmäßig stummgeschaltet sind
In diesem Artikel musste ich mit der Maus über das „silent gif“ fahren, damit die Lautstärkeregelung sichtbar wurde, und beim acid banger hatte ich schon die Hälfte eines Kommentars geschrieben, bevor ich herausfand, dass ein Klick irgendwo die Stummschaltung aufhebt
Es ist interessant, eine Partitur für generative Musik in Form einer solchen Spezifikation zu sehen
Sie ist detailliert genug, dass, wenn man auf Basis dieser Anweisungen eine eigene Version neu implementiert, im Wesentlichen dasselbe „Musikstück“ entsteht, die Interpretation aber eindeutig anders ausfallen wird. Denn eine Partitur legt manche Dinge exakt fest, lässt andere Entscheidungen aber offen. Es bleiben Fragen wie: Was genau bedeutet „alle Umkehrungen“ beim Aufzählen der Akkorde, schließt das offene Voicings ein, aus welchen Werten soll die Länge beliebiger Wellenformen gewählt werden, wie kurz ist „kurz“ bei der Entscheidung über Wiederholungen, welchen Wellenform-Synthesizer verwendet man und wie moduliert man ihn
Solche Entscheidungen ähneln denen, die Musiker traditioneller Instrumente treffen, wenn sie eine Partitur interpretieren und aufführen. Hier kann ein Coder für generative Musik dieser „Partitur“ folgen und ein Programm mit eigener Interpretation erstellen
Es war eine unterhaltsame Übung, das in Sonic Pi(https://sonic-pi.net/) umzusetzen, und ich hatte das Gefühl, etwas geschaffen zu haben, das der Absicht des Komponisten nahekommt. Es trägt die gleiche Stimmung wie die Aufnahme im Video in sich, ist aber, wenn das Sinn ergibt, meine „Aufführung“ dieses Werks. Auch wenn es bei der tatsächlichen Ausführung natürlich Sonic Pi ist, das spielt
Dabei musste ich auch wieder über die Beziehung zwischen Spezifikation und Implementierung nachdenken. Die Implementierungen verschiedener Programmierer zu einem Algorithmus kann man als einzelne „Aufführungen“ der Partitur namens Gesamtdesign sehen, und Entwickler, die Elemente einer größeren Systemarchitektur bauen, wirken wie Musiker, die in einer Band oder einem Orchester ihre jeweilige Stimme übernehmen. Manche Teams werden von einem Dirigenten und Architekten geführt, andere spielen einander Riffs zu, improvisieren und übernehmen gelegentlich ein Solo. Wieder andere sind wie Session-Musiker, die nach den Vorgaben eines Produzenten nicht unbedingt spektakulär, aber solide spielen
Es war eine schöne, meditative Coding-Übung für einen Sonntagnachmittag und hat meine Perspektive verändert
Als ich früher einmal eine Arbeit ausstellen wollte, bekam ich Feedback von einem Kunstkurator; es ging um dieses Werk: https://www.vitling.xyz/welcome-to-tech-talk/. Zunächst verstand er nicht wirklich, was vor sich ging, aber nachdem ich erklärt hatte, wie es funktioniert und was im Inneren passiert, sagte er: „Jetzt finde ich es wirklich gut. Aber du versteckst alles, was für das Publikum interessant ist“
Bei generativer Kunst ist die „Arbeit“, die ich mache, weniger das entstehende Audio oder Bild, sondern eher das Regelwerk oder der Algorithmus. Deshalb wollte ich immer einen Weg finden, zu zeigen, was „in der Box“ passiert. Quellcode kann gut sein, aber nur für Menschen, die ihn lesen können, und die Kernidee geht leicht in Boilerplate und technischen Merkwürdigkeiten unter. So kam ich auf die Idee, es als Partitur zu schreiben: die Grundannahmen dessen zeigen, was passiert, aber nur so weit, dass man sich nicht in Details verliert
https://massmoca.org/event/walldrawing305/
Daher dürften viele offenere, weit auseinandergezogene Voicings wegfallen
Umkehrungen verändern den Charakter eines Akkords ziemlich stark
Ich hätte gern Empfehlungen für Bücher oder Kurse zur Musiktheorie, die helfen, diesen Algorithmus oder https://www.vitling.xyz/toys/acid-banger/ zu verstehen.
Es gibt offenbar ziemlich einfache Regeln, mit denen man vorhersagen kann, dass etwas halbwegs gut klingt, und auch komplexere Regeln. Und dass Barockmusik algorithmisch ist, ist bekannt, aber ich habe noch überhaupt kein Gefühl dafür.
Ich habe früher schon einmal in diese Richtung recherchiert, erinnere mich aber nicht mehr genau, was an den Büchern, die ich gesehen habe, das Problem war. Vermutlich waren die meisten zu grundlegend, um hilfreich zu sein. Vor langer Zeit hatte ich sehr grundlegenden Solfège-Unterricht und kann Noten lesen, aber damals war ich zu jung, um die Fragen zu stellen, die mich heute interessieren, oder den Zweck dieses Trainings zu verstehen.
Letztlich ist es schwer, Musiktheorie zu verstehen, wenn man nicht selbst viel Musik schreibt. Es ist ähnlich wie bei einem JavaScript-Buch: Wenn man noch nie Software geschrieben hat und auch nicht vorhat, das zu tun, gibt es keine Möglichkeit, das Buch wirklich zu verstehen.
Wenn ich erklären sollte, wie diese Anwendung funktioniert, würde ich sagen: Sie wählt vermutlich zufällig eine Teilmenge der Töne in Moll aus, also Skalenstufen. Eine pentatonische Tonleiter, also eine Teilmenge von höchstens fünf Tönen einer Tonleiter, schränkt den möglichen Melodieraum so ein, dass die meisten Kombinationen gut klingen. Je weniger Töne man verwendet, desto vorhersagbarer angenehm klingt es, kann aber auch weniger interessant sein. Zum Beispiel klingen die Töne eines Grundakkords in jeder Reihenfolge immer gut. Acid-Lines deuten typischerweise durch ein Arpeggio, also eine wiederholte Melodie, die nur aus den Tönen eines bestimmten Akkords besteht, einen Mollakkord an.
Außerdem kann eine Teilmenge einer Tonleiter immer auch in einer anderen Tonleiter vorkommen. Wenn man einen Abschnitt baut, der eine gemeinsame Teilmenge von Tönen verwendet, und dann zu einer neuen Tonleiter wechselt, kann man von einer Tonleiter in eine andere modulieren. Auf diese Weise kann ein Stück durch alle möglichen Tonleitern wandern, und bei Acid Techno sind das fast ausschließlich Molltonleitern.
Man kann nicht einfach etwas nehmen, das für jemanden mit einem höheren Verständnisniveau geschrieben wurde als man selbst, und viel daraus ziehen. Man muss Seite für Seite langsam, bewusst und demütig lesen und sich Zeit nehmen, jeden Begriff, auf den man stößt, vollständig zu verstehen. Dabei macht man stundenlange Umwege, und darin verzweigen sich wieder weitere Begriffe endlos. Man kann Begriffe wie Intervall oder locrian/lydian nicht überspringen und erwarten, dass sie sich per Osmose erschließen.
Es behandelt, was Tonhöhe ist, warum das Gehirn bestimmte Kombinationen von Tonhöhen „mag“ und andere nicht, und Ähnliches. Schon die verschiedenen Theorien zur Neurologie der Musik machen das Buch interessant, und am Anfang gibt es auch eine sehr grundlegende Einführung in die Theorie.
Als Tipp für den Autor: Wenn man den Arduino weglässt und diese Bibliothek verwendet, mit der man WS281x-Strips direkt vom Raspberry Pi aus steuern kann, lässt sich die Hardware- und Software-Komplexität stark reduzieren: https://github.com/jgarff/rpi_ws281x
Ich nutze das auf einem Pi 4, um einen 466-Pixel-WS2815-Strip an der Dachkante meines Hauses als Feiertagsdekoration zu steuern.
In diesem Projekt steckt interessante Musiktheorie. Bei dem beschriebenen Algorithmus ist jeder Übergang von einem Akkord zu einem anderen entweder ein Übergang zum selben Akkord, zum Beispiel von C-Dur zu einer seiner Umkehrungen oder durch Hinzufügen bzw. Entfernen der Septime, oder eine der drei Grundtransformationen P, L, R der Neo-Riemannian Theory.
Details findet man auf der Wikipedia-Seite zur Neo-Riemannian Theory; das Wesentliche zu P, L und R ist Folgendes: Wenn ein beliebiger Akkord x Dur ist, sind P(x), L(x) und R(x) alle Moll. Wenn x Moll ist, sind P(x), L(x) und R(x) alle Dur. P, L und R sind jeweils ihre eigene Umkehrung, also gilt P(P(x)) = x, und ebenso bei L und R. Durch irgendeine Abfolge von P-, L- und R-Transformationen kann man von jedem beliebigen Dur- oder Mollakkord zu jedem anderen beliebigen Dur- oder Mollakkord gelangen. Wendet man zum Beispiel auf C-Dur erst L und dann R an, erhält man G-Dur; wendet man erst R und dann P an, erhält man A-Dur; und mit L gefolgt von P erhält man E-Dur.
Sich über Neo-Riemannian-Transformationen zu bewegen, ist eine Möglichkeit, über sanfte Stimmführung schnell zu „fernen“ tonalen Zentren zu gelangen, also zu Bereichen, die mit der Ausgangstonart nicht viele gemeinsame Tonleiterstufen haben. Beim Hören dieses Stücks war ich aber überrascht, wie relativ stabil die Harmonik wirkt. Interessant ist, dass die P-Transformation aufgrund der Struktur des Algorithmus viel seltener vorkommt als L- oder R-Transformationen oder das Verbleiben im selben Akkord. Die P-Transformation ist ein zentraler Baustein, um schnell in entfernte Tonarten zu wechseln; meiner groben Rechnung nach ist, unter der Annahme, dass der Markov-Prozess den stationären Zustand erreicht hat und unter Ignorieren der Beschränkungen für tiefste und höchste Tonhöhe, nur 1/27 aller Akkordwechsel eine P-Transformation. Im stationären Zustand ergibt sich außerdem, dass Septakkorde im Verhältnis 16:11 häufiger sind als einfache Dreiklänge.
Ich bin neugierig auf die technischen Details, weil ich mehr über die Grenzen des Raspberry Pi erfahren möchte.
Hätte man das alles nicht mit einem einzigen Raspberry Pi und vielen daran angeschlossenen GPIO-Pins erledigen können? Im Moment wirkt der Raspberry Pi etwas unterausgelastet, und eine Vereinfachung auf ein einzelnes Board scheint sinnvoller. Ein angenehmer Nebeneffekt wäre, dass man nur einen Stromanschluss braucht.
Wenn die Aufgabe des Pi nur „Notenauswahl und Synthese des Audiobuffers selbst“ ist, müsste das doch sicher auch ein Arduino Uno können?
Mir gefällt, dass es als Pseudocode geschrieben ist, sodass es alle verstehen können
Ich habe selbst schon solche Projekte gemacht, insbesondere im Bereich Musikgenerierung, und mir gefällt diese Art der Darstellung wirklich sehr. Noch besser wäre es mit einer Video-Demo; viele Code-Projekte werden von den Autoren nur mit einer langen Textwand erklärt und sterben schon, bevor man überhaupt anfängt.
Wirklich großartig. Es wäre schön, detaillierte Bauanleitungen zu haben, um so etwas zu machen
Könnte auch als Intro für ein Four-Tet-Set funktionieren :)
Wunderschön. Lässt mich an einen Exoplaneten denken, auf dem Pflanzen so sind
Solche Dinge könnten einen Wald bilden und sich vielleicht aufeinander abstimmen, so wie sich Metronome oder Glühwürmchen synchronisieren.