Tidal ≥1.0.11 `trigger` function


There’s a super interesting new function trigger, which aims to replace retrig:


Although it’s not mentioned in the above docs, this also works with named patterns!

It’s in early development so it would be good to discuss how it could be refined. I think @yaxu is already planning an additional quantise parameter.

One suggestion I had:

When using the ID parameter, it will trigger when silencing the other pattern, which I think is undesirable, e.g.:

d1 $ sound "bd*2 cp:4(5,8,<0 2>)" 
  # djf (trigger 2 $ range 0.1 0.9 $ slow 2 envL) 

d2 $ silence -- will trigger above

[Meta: not sure how to format the above code block to Haskell, anyone?]
[Admin: I just enabled this - write ‘haskell’ immediately after the first three backticks. You might need to refresh your browser for it to work.]



As far as Tidal is concerned, silence is a pattern the same as any other. If you run p "foo" silence then list, it’ll list it as running.
For your above use case I think we need a separate function called stop or similar (e.g. stop "foo") that really stops a pattern.

As for trigger UI, howabout

  • trigger - on its own, triggers on evaluation (i.e. as now but without having to give a pattern id)
  • triggerFrom - the current trigger
  • triggerWith - retrigger using a pattern of bools, e.g. d1 $ s "bd*8" # gain (triggerWith $ slow 8 "t" envL) to retrigger every 8 cycles

That would be an evolution from the current trigger function, but actually I think I’d prefer the last one in the list being called trigger as the starting point. Then we could have:

Trigger from pattern:

d1 $ s "bd*8" # gain (trigger $ slow 8 envL)

Trigger from last eval of current pattern id:

d1 $ s "bd*8" # gain (trigger onEval)

Trigger from last eval of another pattern id:

d1 $ s "bd*8" # gain (trigger $ onEvalId 2)


Agreed this would be useful, probably for other reasons too. Perhaps stopIn n cycles too?

I like all your suggestions for trigger :+1: