Sonic Pi macht reichlich Gebrauch von der Programmiersprache Ruby, und vieles, was in Ruby funktioniert, kann man auch in Sonic Pi benutzen, mit der Einschränkung, dass man sich nicht darauf verlassen sollte, dass nicht-dokumentierte Funktionen in zukünftigen Sonic Pi Versionen weiterhin laufen.
Die Klasse Time
ist Teil von Ruby und liefert Informationen über Datum und Uhrzeit:
puts Time.now #=> 2017-05-07 13:46:35 +0200 puts Time.now.year #=> 2017 puts Time.now.month #=> 5 puts Time.now.day #=> 7 puts Time.now.hour #=> 13 puts Time.now.min #=> 46 puts Time.now.sec #=> 35
Wir können Time nutzen, um die Dauer zwischen zwei Ereignissen in Sekunden zu messen:
startzeit = Time.now 2000.times do |i| puts i end dauer = Time.now - startzeit puts "es hat #{dauer} Sekunden gedauert, 2000 Zahlen auszugeben!"
Mit Time den Zufallsgenerator initialisieren
Mit folgendem Trick können wir dafür sorgen, daß bei der Verwendung von Zufallsmethoden bei jedem Programmstart andere Zufallszahlen erzeugt werden:
use_random_seed Time.now.nsec use_synth :piano live_loop :zufallsmelodie do play rand_i 70..92 sleep 0.25 end
Time.now.nsec
gibt die aktuelle Nanosekunde (Milliardstelsekunde) zurück. Dieser Wert ist garantiert bei jedem Aufruf ein anderer. Er wird verwendet, um mittels use_random_seed
den Zufallsgenerator zu initialisieren (= in einen bestimmten Startzustand zu versetzen). Ohne die Zeile use_random_seed Time.now.nsec
würde dieser Code nach jedem Start exakt dieselbe Tonfolge erzeugen. Mit dieser Zeile kommen jedesmal andere Tonfolgen heraus.