11.2 Cue +Sync: Einsätze geben

In einem Musikstück hängen die einzelnen Teile immer irgendwie zusammen. Mal ist es so, dass sie gleichzeitig gespielt werden. Das ist zum Beispiel bei den einzelnen Instrumenten eines Songs der Fall. Und mal werden sie aneinander gehängt. Ein typisches Beispiel ist der Wechsel von Strophe und Refrain.

Mit den Befehlen „cue“ und „sync“ kann man nun in Sonic Pi Einsätze geben. „cue“ gibt den Einsatz und „sync“ empfängt ihn.
Den Befehlen „cue“ und „sync“ wird jeweils ein Parameter mitgegeben, damit Sonic Pi weiss, was zusammengehört. Dieser Parameter ist also der Name des Einsatzes und kann beliebig sein. Im folgenden Beispiel wird als Name „tick_drum“ verwendet.

cue :tick_drum

sync tick_drum

„Cue“ bedeutet in der Musik, dass der Einsatz gegeben wird, beispielsweise von einem Dirigenten. „Sync“ ist dabei die Abkürzung für „syncronize“ und nimmt den Einsatz entgegen.

Rechts ist ein Beispiel dazu zu sehen. Mit Cue wird das Einsatzzeichen an „tick_drum“ gegeben.

Code 27 greift dieses Beispiel noch einmal auf. Wie Cue und Sync hier funktionieren, kann man daran erkennen, wenn die Cue und Sync Befehle auskommentiert werden

#cue :tick_drum

#sync :tick_drum

Nun, drum_heavy_kick würde zweimal gespielt werden und zwar zu den Zeitpunkten 0,6 Sekunden und 1,6 Sekunden. Das ist bei den Wartepausen von 0.6 Sekunden (sleep 0.6) und von 1 Sekunde (sleep 1) auch zu erwarten. Ohne Auskommentierung wird drum_heavy_kick auf 3 Sekunden und auf 6 Sekunden gespielt, nämlich genau dann wenn der Cue Aufruf ausgeführt wird.
Was passiert nun, wenn der Cue oder der Sync Aufruf fehlt?

a) Cue fehlt: Es wird nicht ausgeführt, was hinter dem zugehörigen Sync Aufruf steht.

b) Sync fehlt: Cue wird ignoriert und der Code im 2. Thread wird sofort ausgeführt.

Übrigens muss immer zuerst der Sync Befehl ausgeführt werden. Kommt dieser zeitlich erst nach dem Cue Aufruf, dann wird der Cue ignoriert.

 

cuesync

################################
# Cue and Sync 2
# Hans Gruendel
# 20.09.2015
#
################################

in_thread do
2.times do
sample :guit_e_slide
sleep 3
cue :tick_drum
end
end

in_thread do
sleep 0.6
sync :tick_drum
2. times do
sample :drum_heavy_kick
sleep 1
end
end
Code 27. Cue und Sync Beispiel