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