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.
