Resetting Cycle Start?

How do I ensure that a cycle starts from the beginning every time I start it?
I know I saw this in some video but I can't remember where.


You can use resetCycles but I think there are some quirks about it:

  d1 $ s "bd"

Some more information about how to handle resetting the cycle count is available in the documentation for seqP:


Thanks. resetCycles seems to be doing the trick as far as I can tell.
I'm curious to hear more about the quirks. Are there things that might stop me from wanting to use it?


I haven't used it in a while, but as I recall sometimes it would "hiccup" and not start smoothly. It can get off to a weird start sometimes. But, not all the time. :man_shrugging: Your mileage may vary depending on what you are doing!


Okay thanks. I'll see how it goes.

There's also reset:

1 Like

Yes I was puzzling over the difference between reset, trigger and qtrigger.

d1 $ trigger 1 $ sound "clap*4" # speed (rand + 1)

This quantises to the nearest cycle start (the 'sam')

d1 $ qtrigger 1 $ sound "clap*4" # speed (rand + 1)

I'll have to have a proper look, but I'm not sure of the difference between qtrigger and reset
The '1' refers to the 1 in 'd1' by the way


for anyone finding this thread looking for info on reset and qtrigger --

both shift pattern time 0 to the next cycle boundary, i think the difference is that reset also mutes the pattern until the cycle boundary so it starts sounding at pattern time 0. qtrigger doesn't, so you'll hear the pattern content at negative times, from when you execute qtrigger to the next cycle boundary. trigger meanwhile is not quantized so there is nothing to mute, it shifts pattern time 0 to right now.

so for example if you are composing and want to hear your piece from the beginning, you probably want reset. if you are performing a transition you might use qtrigger to include a lead-in/fill before the change. to start a pattern immediately (out of sync with other patterns) you would use trigger. similar to how you can play a sample immediately with once.


resetCycles is currently inaccurate and may often lose an event at the start of the first cycle.

This will be fixed properly at some point but for now a good workaround is to manually adjust the definition of resetCycles so that events aren't missed:

resetCycles = Tempo.changeTempo (sTempoMV tidal) (\t tempo -> tempo {Tempo.atTime = t + 0.1, Tempo.atCycle = 0})

You can increase that 0.1 to a value that works best for you, and put it in your BootTidal.hs to make it permanent.