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:
1 2 3 4 5 6 7 8 9 10 | 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 |