Startseite>Audio-Programmierung mit Sonic Pi (Teil 2)
Aus Raspberry Pi Geek 02/2019

Audio-Programmierung mit Sonic Pi (Teil 2) (Seite 2)

Listing 3

live_loop :onsets_straight do
  sample :loop_amen, onset: tick
  sleep 0.2
end

Listing 4

live_loop :onsets_shuffled do
  sample :loop_amen, onset: pick
  sleep 0.2
end

Reproduzierbarer Zufall

Bei der Entwicklung von Sonic Pi hat Sam Aaron großen Wert darauf gelegt, dass Codes unabhängig von Betriebssystem und Programmversion vollkommen reproduzierbare Ergebnisse liefern. Das gilt auch für das Verwenden von pseudozufällig arbeitenden Funktionen wie pick oder rand [1]. Bei Sonic-Pi-Anfängern sorgt das oft für Verwirrung: Zufallsgesteuerter Code macht nach jedem Druck auf den Run-Knopf exakt dasselbe [2].

Mittels der Funktion use_random_seed setzen Sie den Zufallsgenerator an einen anderen Startpunkt. Diese Funktion können Sie auch dazu nutzen, zufällige, aber reproduzierbare Variationen in Ihre Beats einzubauen. Das demonstriert Listing 5: Der seed_ring liefert die Werte zum Initialisieren des Zufallsgenerators und wird per tick durchlaufen. Bei jedem vierten Durchgang des Live Loops startet die Erzeugung von Zufallszahlen mit dem Seed 29, sonst mit 3.

Listing 5

live_loop :random_variation do
 seed_ring = ring 3, 3, 3, 29
 use_random_seed seed_ring.tick
 8.times do
  sample :loop_amen, onset: pick
  sleep 0.2
 end
end

Zufallsgenerator per Systemzeit initialisieren

Möchten Sie sicherstellen, dass der Zufallsgenerator bei jeder Ausführung des Codes an einem anderen Punkt startet, initialisieren Sie ihn mit dem Ausdruck use_random_seed Time.now.nsec. Time.now.nsec liefert die aktuelle Nanosekunde der Systemzeit Ihres Raspberry Pi, ein mit ziemlicher Sicherheit bei jedem Aufruf unterschiedlicher Wert. Mehr über das Verwenden der Klasse Time und von Zufallsfunktionen finden Sie im Blog des Autors [7].

Der Onset-Ring unter der Lupe

Im Hintergrund sind die Onsets in einem Ring gespeichert, der Elemente des Typs Hash enthält. Bei Hashes handelt es sich um Schlüssel-Wert-Paare. Jeder Hash im Onset-Ring steht für einen Onset und speichert unter den Schlüsseln start, finish und index die zugehörigen Werte. Das Codebeispiel aus Listing 6 zeigt, wie Sie direkten Zugriff auf den Onset-Ring bekommen. Das bietet interessante Möglichkeiten: Oft ist es nützlich, zu wissen, aus wie vielen Onsets ein Sample besteht. Sie können zudem über die Abfrage der jeweiligen Zeiten die rhythmische Struktur eines Beats verzerren oder auf einen anderen Klang übertragen.

Listing 6

onsets = (sample_buffer :loop_amen).onset_slices
puts onsets.size
#=> 8
puts onsets
#=> (ring {:start=>0.0, :finish=> 0.120, :index=>0},
          {:start=>0.120, :finish=>0.248, :index=>1},
[...]
puts onsets[1][:start]
#=> 0.120

Externe Samples

Bislang kamen ausschließlich eingebaute Samples zum Einsatz. Der Spaß geht aber erst richtig los, wenn Sie externe Samples einbinden. Das Netz ist voll von hochwertigen und kostenlosen Klangbibliotheken für jeden erdenklichen Zweck und Musikstil.

Für den Einstieg in die Nutzung externer Klänge in Sonic Pi haben wir eine kleine Klangbibliothek zum Herunterladen bereitgestellt (Abbildung 2). Die Klänge stammen von der Website Freesound.org [3] und vom niederländischen Techno-Produzenten Danny Wolfers alias Legowelt [4]. Wenn Sie die folgenden Codebeispiele nachbauen wollen, entpacken Sie die ZIP-Datei bitte in Ihr Heimverzeichnis. Weitere Quellen für Klangmaterial finden Sie im Netz, etwa auf Musicradar.com [5].

Abbildung 2: Unsere Klangbibliothek enthält auch Sounds, die mithilfe des legendären Minimoog-Synthesizers entstanden. (Bild: kpr2, pixabay.com, CC0)

Abbildung 2: Unsere Klangbibliothek enthält auch Sounds, die mithilfe des legendären Minimoog-Synthesizers entstanden. (Bild: kpr2, pixabay.com, CC0)

Im einfachsten Fall spielen Sie eine externe Sounddatei ab, indem Sie deren Dateipfad als Zeichenkette an die Funktion sample übergeben (Listing 7). Dabei erweist sich die Möglichkeit als hilfreich, im Raspbian-Dateimanager den Pfad zu einer markierten Datei per rechter Maustaste in die Zwischenablage zu kopieren.

Listing 7

sample "~/samples/shots/synth/BASS-WunderBass.wav"
sleep 2
sample "~/samples/shots/drum/FX-ER-Kraftwerkcity2.wav"
sleep 2
sample "~/samples/misc/TRUMPET-spukkin_trumpet1.wav"

Samples suchen

Statt den Pfad zu jedem Sample explizit anzugeben, können Sie auch ganze Verzeichnisse nach Samples durchsuchen. In diesem Fall benötigt sample zwei beziehungsweise drei Argumente: Das erste bezeichnet ein Verzeichnis oder einen Verzeichnisbaum. Mit einem zweiten Argument schränken Sie optional die Suche mittels eines Suchstrings oder eines regulären Ausdrucks ein.

Das zweite beziehungsweise dritte Argument wählt per Index ein konkretes Sample aus den Suchergebnissen aus. Der Index bezieht sich auf die Reihenfolge der Treffer, geordnet in alphabetischer Reihenfolge abhängig vom Dateipfad.

Die Tabelle “Samples suchen” zeigt einige Beispiele, von denen die letzten beiden reguläre Ausdrücke verwenden. Wenn Sie mit diesem mächtigen Werkzeug zum Auswerten und Verarbeiten von Zeichenketten nicht vertraut sind, lohnt sich ein Blick auf die Seite Rubular.com: Dort können Sie direkt im Browser mit regulären Ausdrücken experimentieren [6].

Code

Ergebnis

sample "~/samples/shots/drum", 7

Achtes Sample im Verzeichnis drum/.

sample "~/samples/**", 11

Zwölftes Sample im Verzeichnis samples/ und allen Unterverzeichnissen.

sample "~/samples/shots/**", "FX", 9

Zehntes Sample im Verzeichnis shots/ und allen Unterverzeichnissen, dessen Dateiname den String FX enthält.

sample "~/samples/shots/drum", pick

Zufällig ausgewähltes Sample aus dem Verzeichnis drum/.

sample "~/samples/**", /bass/i, 54

Fünfundfünfzigstes Sample, dessen Dateiname die Zeichenkette bass enthält (ohne Berücksichtigung von Groß- und Kleinschreibung).

sample "~/samples/**", /^SYNTH-/, 2

Drittes Sample, dessen Dateiname mit SYNTH- beginnt.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland