10.2 Zufallszahlen

In Sonic Pi gibt es zur Erzeugung von Zufallszahlen die Methode rrand. Diese kannst du mit dem Code rechts einfach mal ausprobieren.

Wenn Du diese Beispiel laufen lässt, wird die Note 60,9763 im Log Viewer ausgeben. Auch wenn es bekanntlich gar keine MIDI-Note mit genau diesem Wert gibt. Es gibt ja nur ganzzahlige Noten. Sonic Pi rundet dann auf und macht aus 60,9763 eine 61.

Aber das ist nicht die Besonderheit. Erstaunlicher ist schon, dass vorab bekannt ist, welche Zahl mit der Zufallsmethode erzeugt wird. Was ist das denn für ein Zufall?

Tatsächlich ist das kein echter Zufall. Es kommt jedesmal die gleiche Note, wenn wir „Run“ drücken. Diesen Verhalten ist ganz typisch für Programmiersprachen. Abhilfe schafft hier das Setzen eines Startwertes. Sonic Pi verwendet dafür die Methode use_random_seed n wobei das n für eine beliebige natürliche Zahl steht.

Jedes mal wenn ich jetzt den Wert von n ändere, dann ändert sich der Ton. Übrigens bleibt der Ton zwischen 50 und 70, denn diese 2 Zahlen gebe ich der Methode beim Aufruf mit und sie sind die untere und obere Grenze.

Jetzt stellt sich natürlich die Frage, wie sich n verändern kann, ohne es immer wieder von Hand zu setzen. Eine Lösung dafür ist übrigens n der Abfrage der Zeit im System zuzuordnen. Da sich die aktuelle Uhrzeit permanent ändert, wird damit auch der random_seed verändert und damit werden andere Zufallszahlen ausgegeben.

In Tabelle 10 sind die Befehle aufgelistet, die etwas mit der Zufallssteuerung in Sonic Pi zu tun haben.

################################
# Random Control
# Hans Gruendel
# 18.08.2015
#
################################
play rrand(50, 70)

Code 22. Methode rrand zur Erzeugung von Zufallszahlen

 

################################
# Random Control 2
# Hans Gruendel
# 18.08.2015
#
################################
use_random_seed 20
play rrand(50, 70)

 

Code 23. Methode rrand zur Erzeugung von Zufallszahlen mit Seed.

Nr.

Befehl

Bedeutung

Beispiel

1

use_random_seed n

Initialisiert den Zufallsgenerator. Von der Initialisierung hängt dann ab, welcher Wert bei den folgenden Zufallsmethoden ausgegeben wird.

use_random_seed 5

2

rrand(r1, r2)

Ermittelt zufällig einen Wert zwischen r1 und r2, wobei diese beiden Grenzwerte nicht ausgesucht werden. Im Beispiel rechts werden also nie genau 0.2 oder 0.5 zurückgegeben.

sleep rrand(0.2, 0.5)

3

rand r2

Ermittelt zufällig einen Wert zwischen 0 und r2, oder wenn kein Parameter benutzt wird, nur zwischen 0 und 1

sleep rand

4

rrand_i(n1, n2)

Funktioniert wie rrand, allerdings ist die Zufallszahl immer eine ganze Zahl

play rrand_i(40, 50)

5

rand_i(n1, n2)

Funktioniert wie rand, allerdings ist die Zufallszahl immer eine ganze Zahl

play rand_i(50)

Tabelle 10. Methoden zur Erzeugung von Zufallszahlen