I've started using tidal in a jam session environment, where we agree on a tempo and sync with our ears rather than a midi clock.
I've been trying to stop tidal and trigger a pattern reliably from the start without success. I've tried resetCycles, setCps(-1), and even attempted to stop/restart the tidal process, but to no avail.
Would you suggest a simple way to do this?
Alternatively, is it possible to adjust the clock by some ms when I notice downbeats are off? I think FoxDot offers this with Clock.nudge (cf. FoxDot | Documentation | Using The Tempoclock).
Hi!
I think you can use the nudge param to offset the pattern slighlty (nudge - TidalCycles userbase).
On the other hand I think reseting the clock using resetCycles or cps(-1) has always been buggy, in the sense that it skips the first events on a pattern. Haven't tried myself lately though...
Hi, thanks for your reply! I've nudged individual patterns and it works fine, but I'd rather have a global nudge or a big "restart all" button if such a thing exists...
the 'restart all' button would be smth like resetCycles but I think its not reliable. Regarding a global nudge you can do all $ (#nudge ...) to apply a nudge to every active connection
Hi @domeav! I think you are looking for the qtrigger (shortcut qt) function. You can find the documentation here: qtrigger - TidalCycles userbase
This function starts a pattern from the beginning and is quantized to the next cycle position.
There is an other function trigger which starts the pattern immediately from the beginning and ignores the current cycle position. Hope this fits your needs!
The global nudge works fine, thanks @Tomas_Ciccola! However after I apply a global nudge to every active connection it seems I am unable to apply a nudge to a given pattern anymore, which is unexpected but not too annoying for my usage.
Thanks for the pointers @mrreason! But for some reason, after I start
d1 $ sound "bd"
Executing any of these commands seems to do the same thing in my setup: the pattern starts on the next beat with the expected sample from the cycle position, and the bd is synced with the one from d1.
awesome! didn't know about qtrigger and trigger!!
regarding applying nudge globally and to each pattern, remember that using the '#' operator sets the parameter, so if you use it on individual patterns and on all only one would take effect (I think?). On that case you should use another operator on one of the instances. For example:
d1 $ s "bd*4" # nudge 0.9 -- here I'm setting the nudge for this pattern
d2 $ fast 2 $ s "~ sn" # nudge 0.4 -- different value
all $ (|+ nudge 0.2) -- here I'm adding 0.2 to the nudge param.
-- So on the case of d1, that would result in # nudge 1.1 and in the case of d2 that would be a nudge of 0.6
I would expect qtrigger to wait until the start of the next cycle and then start playing the pattern from the begging but it appears to start playing the pattern before the beginning of the cycle, does it not?
@ben i also get inconsistent results with this myself. let me go through some old code and see what has worked historically. i feel like my sequences (used mostly with ur) tend to start in the middle.
@ben yeah, looking through some old code, i was using trigger to reset my pattern and it starts things on the second beat every time i launch it. i can give it pretty much any number as its argument and it does the same thing. trigger 0, trigger 1, trigger 2, whatever. my code is sitting on d2, so trigger 2 doesn't "work as expected". however! when i use qrigger, same deal...whatever number i pass to that first argument starts the code on the second beat of my measure, except for qtrigger 2, which starts the measure on the last beat of the cycle preceding it (the "four" of the previous bar).
From what I understand of the arguments to trigger and qtrigger, the number is supposed to correspond to the pattern number. I could of course be wrong, and thanks for confirming the behavior either way.
The parameter is indeed the pattern id, although these days the pattern id is already available to the code, so that parameter will disappear / become optional in a future version.
Thanks @yaxu. One issue with the filterWhen code is that it will silence an existing playing pattern...
So for example, something I often want to do in Tidal is have a pattern replace a currently playing pattern but at the beginning of the next cycle. So if d1 is playing then I'd like to trigger a new d1 but only have it replace the current d1 at the beginning of the next cycle (like the way clip quantization works in Ableton)... I'd also like the option to have the newly trigged clip play from the beginning of it's pattern.
This is often how I expect qtrigger to work but I can't tell if it reliably does. Is it supposed to work this way? Or is there maybe another way to accomplish this if not?