Aus Raspberry Pi Geek 12/2018

Audio-Programmierung mit Sonic Pi, Teil 1 (Seite 4)

Ringförmige Sequenzen

Zur Beschreibung von Wertefolgen gibt es in Sonic Pi die Klasse RingVektor oder kurz Ring. Sie ordnen Sequenzen beliebiger Werte ringförmig an. Ringe besitzen die Funktion tick, die den jeweils nächsten Wert liefert; ist der letzte Wert erreicht, geht es von vorn los.

Listing 7 erzeugt in der ersten Zeile einen Ring und speichert ihn unter dem Variablennamen trennfrequenzen. Im :loop1 ruft tick dann bei jedem Schleifendurchgang den jeweils nächsten Wert ab, um die Tiefpassfilter-Option von sample zu steuern. Im :loop2 wird in Zeile 8 ein Ring zur Steuerung der Tonhöhe direkt an Ort und Stelle erzeugt. Da jeder Thread eine eigene tick-Variable besitzt, werden die beiden Ringe im Beispiel unabhängig voneinander durchlaufen.

Listing 7

 

trennfrequenzen = ring 120, 110, 100, 90, 80, 70
live_loop :loop1 do
  sample :elec_blip, lpf: trennfrequenzen.tick
  sleep 0.25
end
live_loop :loop2 do
  use_synth :saw
  play (ring 40, 60, 80).tick, release: 0.1
  sleep 0.25
end
leiter = scale :C2, :minor
use_synth :piano
live_loop :leiterspieler do
  play leiter.tick
  sleep 0.5
end

Ringe bilden ein sehr wesentliches und vielseitiges Instrument zur Komposition in Sonic Pi. Eine vollständige Beschreibung aller Möglichkeiten bietet Stoff für einen eigenen Artikel. Neben ring gibt es noch viele weitere sogenannte Ring-Konstruktoren, etwa knit, range, bools und chord. Mehr dazu erfahren Sie jeweils im Hilfefenster unter Sprache sowie im Blog des Autors [3].

Für musikalische Anwendungen ist die Funktion scale besonders interessant. Sie liefert in Ringe verpackte Tonleitern, im Beispiel ab Zeile 11 aus Listing 7 eine C-Moll-Leiter. Dabei erwartet scale zwei Argumente: einen Grundton und eine Angabe wie :major (Dur) oder :minor (Moll). Sonic Pi hat neben Dur und Moll auch exotischere Kandidaten im Gepäck, etwa chromatische oder mixolydische Tonleitern. Auch hier hilft eine Auswahlliste.

Bei Ringen handelt es sich um unveränderliche Objekte. Es gibt aber sogenannte Verkettungsfunktionen, die – auf Ringe angewendet – einen neuen, modifizierten Ring zurückliefern. Die Funktion shuffle liefert eine Kopie des Rings, bei der die Reihenfolge der Elemente per Zufallsfunktion vermischt wurde. take(Anzahl) erzeugt einen Ring mit den ersten Anzahl Elementen.

Wie der Name schon andeutet, können Sie die Verkettungsfunktionen hintereinanderschreiben. Der Ausdruck auswahl = leiter.take(4).shuffle liefert einen Ring, der die ersten vier Töne der C-Moll-Tonleiter aus dem letzten Beispiel in zufälliger Reihenfolge enthält, und speichert diesen unter dem Namen auswahl. Wohlgemerkt: Der ursprüngliche Ring leiter bleibt unverändert.

Weitere interessante Verkettungsfunktionen wie mirror, stretch und repeat finden Sie im eingebauten Tutorial unter der Ziffer 8.5. Auch Zufallsereignisse lassen sich in den Code einbinden [4].

Hinter den Kulissen

Mit den Knöpfen Save und Load speichern Sie Code als Textdatei beziehungsweise laden ihn aus einer solchen. Sonic Pi merkt sich aber auch ohne explizites Speichern bei Beenden des Programms die Inhalte der Textpuffer. Unter /home/pi/.sonic-pi/store/default/ finden Sie zehn Textdateien, beginnend mit workspace_zero.spi, die jeweils einem Buffer zugeordnet sind. Jedes Mal, wenn Sie in Sonic Pi einen Code starten, aktualisiert es die entsprechende Datei. Allerdings lässt sich der Zustand der Puffer aus Sonic Pi heraus nicht in einem Rutsch speichern oder laden. Dazu müssen Sie ein kleines Shell-Skript schreiben.

Für die Klangerzeugung zeichnet im Hintergrund der Supercollider Synthesis Server scsynth zuständig. Wesentlich älter als Sonic Pi, ist dieses Programm allein auf die ressourcenschonende Klangerzeugung spezialisiert. Jedes Mal, wenn Sonic Pi einen sample– oder play-Befehl ausführt, erhält Scsynth eine entsprechende Nachricht im Open-Sound-Control-Format. Auf dieses Format gehen wir in einer anderen Folge dieser Artikelserie näher ein. Scsynth bietet übrigens die Möglichkeit, über die von Sonic Pi angebotenen Synths hinaus eigene Klangerzeuger zu programmieren.

Fazit und Ausblick

Aus seinen Anfängen als lehrreiches Spielzeug für Programmieranfänger heraus hat sich Sonic Pi mittlerweile zu einem professionellen Werkzeug für die Audio-Programmierung entwickelt, das sich für die Musikproduktion ebenso eignet wie für Multimedia-Installationen. Im vorliegenden Teil der Artikelserie haben Sie die Grundlagen der Programmierung in Sonic Pi kennengelernt; in den nächsten Ausgaben tauchen wir tiefer in die Feinheiten der Materie ein. 

Interview mit dem Sonic-Pi-Entwickler Sam Aaron

<i>Raspberry Pi Geek:<i> Aus welcher Motivation heraus hast du mit der Entwicklung von Sonic Pi begonnen?

Sam Aaron: Sonic Pi wurde speziell für den damals neuen Raspberry Pi entwickelt und war zugleich eine Antwort auf den neuen Lehrplan für Informatik an britischen Schulen [5]. Wir wollten die Begeisterung junger Menschen für Musik dazu nutzen, ihnen Konzepte der Software-Entwicklung zu vermitteln. Es macht schließlich mehr Spaß, einen verrücktes Bassriff zu programmieren als ein Array mit Zahlen zu sortieren!

<i>RPG:<i> Die Programmiersprache Ruby und der Supercollider Synthesis Server bilden wichtige Bausteine von Sonic Pi. Was war der Grund für diese Designentscheidung?

SA: Für das Entwickeln, Testen und Auswerten der ersten Version standen lediglich drei Monate Zeit zur Verfügung, sodass ich stark auf frühere Arbeiten und Erfahrungen zurückgreifen musste. Ich hatte schon an der Uni und in der Industrie mithilfe der dynamischen Eigenschaften von Ruby Code geschrieben, den auch Nichtprogrammierer lesen können. Obendrein hatte ich mit Overtone bereits eine deutlich komplexere Live-Coding-Sprache entwickelt, die den enormen Leistungsumfang von Supercollider bei der Klangsynthese nutzte. Da lag es schlicht nahe, beides zu kombinieren und für Supercollider ein Ruby-Interface zu entwickeln, das schon Kinder benutzen können.

<i>RPG:<i> Du hast einmal gesagt, jeder solle Programmieren lernen. Warum?

SA: Ich denke, jeder Mensch sollte ein bisschen Programmieren können, genauso wie jeder etwas Mathe lernen oder etwas Sport machen sollte. Der Sportunterricht an der Schule macht nicht jedes Kind zum Profisportler, und genauso wenig soll der Informatikunterricht jeden Schüler zum Software-Entwickler ausbilden. Allerdings wird unsere Welt immer deutlicher durch Code bestimmt, und deshalb sollte sich meiner Überzeugung nach jeder grundlegende Kenntnisse der Software-Entwicklung aneignen, damit er sich im Alltag besser zurechtfindet.

<i>RPG:<i> Wie sehen die aktuellen Ziele und Herausforderungen für Sonic Pi aus?

Es gibt ganz konkrete Pläne für die Zukunft von Sonic Pi: Zunächst will ich die mit Version 3.0 begonnene Kommunikation mit externer Hardware weiter ausbauen. Für Version 4 stelle ich mir eine Schnittstelle vor, über die sich mehrere Rechner für gemeinsame Live-Coding-Sessions verbinden lassen – auch via Internet, sodass Nutzer etwa in Afrika und Europa gemeinsam in Echtzeit Musik coden können. Zudem möchte ich es vereinfachen, Sonic-Pi-Kompositionen einschließlich aller externen Samples zu speichern und zu teilen. Auf diese Weise müsste man nicht bei null anfangen, sondern könnte die Ideen anderer Coder weiterentwickeln oder remixen.

<i>RPG:<i> Du arbeitest seit mehr als fünf Jahren an Sonic Pi. Macht es noch Spaß?

SA:Die Arbeit an Sonic Pi macht nach wie vor jede Menge Spaß. Es ist schön, so viele positive Rückmeldungen zu erhalten und zu sehen, was für coole Sachen die Anwender damit bauen. Allerdings stellt die Finanzierung meiner Arbeit ein Problem dar: Sonic Pi soll kostenlos und quelloffen bleiben. Honorare für Workshops, Vorträge und Konzerte helfen weiter, zudem gibt es eine Reihe von Leuten, die meine Arbeit freundlicherweise über Patreon mit ein paar Euro im Monat unterstützen. Trotzdem genügt das nicht, und mehr Unterstützung wäre höchst willkommen.

<i>RPG:<i> Wir drücken dir die Daumen, dass du weitere Unterstützer findest, und bedanken uns ganz herzlich für deine Antworten!

Der Autor

Der Medienkünstler Pit Noack nutzt Sonic Pi seit der ersten Stunde. In seinem Atelier in Hannover gibt er Programmierkurse für Laien und Profis zu Sonic Pi, Python und Processing.

Infos

  1. Live-Coding-Konzert mit Sam Aaron: https://vimeo.com/218918467
  2. Tonhöhenkodierung im MIDI-Format: https://www.zem-college.de/midi/mc_taben.htm
  3. Ringe erzeugen: http://www.maschinennah.de/sonic-pi-ringe
  4. Zufallsfunktionen: http://www.maschinennah.de/zufall-in-sonic-pi/
  5. Sam Aaron über die Idee hinter Sonic Pi: https://vimeo.com/219055138
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben