Sardine executes code based on timing given by its clock. The clock starts with Sardine and runs until Sardine exits. There are two clocks:
- internal clock: Your regular system clock.
- external clock: A special clock for synchronisation on the network. (See Diving Deeper)
clock.temporeports the current tempo in bpm.
clock.tempo = 140sets tempo to 140 bpm.
Position in time:
clock.phasePosition in phase (0.0 - 1.0).
clock.beatCumulative number of beats (note: doesn’t reset at each bar.)
clock.barCumulative number of bars.
clock.timetime elapsed since start in seconds (monotonic time)
clockshows elapsed time, tempo, beats per bar
Bowl commands can be used to start/stop the clock, which will also impact any Player output.
bowl.resume(): pause and resume runnnig code and stops/resumes the clock.
bowl.start(): stop and play. (Start does not restart the clock.)
Tempo changes can be achieved in @swim by using the Pattern Object on the
clock.tempo value. For details on the Pattern Object, see Diving Deeper > Patterning everything.
In the first function below, the Pattern Object uses the ramp operator to increment the tempo by 2 BPM between 90 and 180, then hold the tempo, and then decrease back faster to 90 (decrements by 4 BPM). To see the tempo values print out, uncomment the print line.
- Pattern changes will come at the rate set by the function's period value. Setting the period to 1 (
p=1) will make changes happen every beat. Set a higher value for more gradual tempo changes.
- It is best to have a separate function just for clock.tempo changes. That keeps the clock patterns independant from musical functions.
- Set the clock.tempo to your initial value every time you run the function. When you reload the function the clock will be at it's last value.
- Reset your clock to your default when you are done!
# @swim to manage clock.tempo changes # tempo increases from 90 -> 180, holds there, then decreases back to 90 clock.tempo=90 @swim def clockPat(p=1, i=0): #print(f"clock.tempo: ", clock.tempo) clock.tempo=P('[90:180,2] [180:181,0.1] [180:90,4]', i) again(clockPat, p=1, i=i+1) @swim def hh(p=1, i=0): D('hh27:2 hh27:9 hh27:1', i=i) D('hh:4 . hh:9', i=i) again(hh, p=0.5, i=i+1) # reset your clock value when you are done! clock.tempo=120