Zufall in Sonic Pi, Teil 2
Folgende Funktionen in Sonic Pi erzeugen zufällige Werte:
1. rand_i, rand und dice liefern zufällige Zahlen (siehe Teil 1)
2. Mit choose und pick kann man zufällig Werte aus einer vorgegebenen Menge von Werten auswählen
3. one_in erzeugt zufällig Wahrheitswerte, also true (wahr) oder false (falsch)
Werte zufällig auswählen mit choose und pick
Wenn a ein Array oder ein Ring ist, dann liefert a.choose bei jedem Aufruf ein zufälliges Element von a.
Hier wird die Tonhöhe aus fünf Werten gewählt:
use_synth :piano 6.times do play [40, 45, 50, 55, 60].choose sleep 0.2 end
Wer sich wundert, warum bei jedem Ausführen des Codes dieselben Klänge zu hören sind, sollte unbedingt Teil 1 lesen!
…und hier eines von drei Samples:
16.times do sample [:bd_haus, :drum_snare_hard, :drum_cymbal_closed].choose sleep 0.125 end
…und hier eine zufällige Tonart:
use_synth :piano live_loop :zufallsakkord do grundton = [:c3, :d3, :e3].choose tongeschlecht = [:major, :minor].choose akkord = chord grundton, tongeschlecht play akkord sleep 0.5 end
Im folgenden Beispiel wird in Zeile 2 ein Ring mit dem Namen notenring erzeugt, der 15 Zahlen (in diesem Fall stehen die Zahlen für Notenwerte) enthält. Im Live-Loop wird bei jedem Durchgang in Zeile 4 aus diesem Ring 6 Werte ausgewählt – mehrfache Auswahl eines Wertes ist möglich – und unter dem Namen auswahl gespeichert und per each (Zeile 5-8) abgespielt:
use_synth :saw
notenring = scale :c2, :major, num_octaves: 2
live_loop :pick_beispiel do
auswahl = notenring.pick 6
auswahl.each do |note|
play note, release: 0.1
sleep 0.15
end
sleep 0.3
end
Zufällige Entscheidungen mit one_in
one_in gibt die Wahrheitswerte true oder false zurück. In Kombination mit if kann man one_in nutzen, um bestimmte Codeabschnitte nur manchmal ausführen zu lassen. one_in 3 liefert durchschnittlich jedes dritte mal true, sonst false, one_in 10 jedes zehnte mal true und so weiter.
live_loop :one_in_beispiel do
if one_in 3
sample :bd_haus
end
sleep 0.1
end
