Sonic Pi + Ruby: Time

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.