I don't know if this exists in tidal, but it would be fabulous if there was something like that:
"c3 e3".reset("<x [x x]>")
being equivalent to "<[c3 e3] [c3 c3]>"
. So the binary pattern will reset the input pattern each time there is a true event.
In the example, this is looks pretty boring, but for composing, this opens many doors, for example making sure the bass lines always lands on the root when the chord / scale changes.
Here is an example of a bass line that doesn't land on the 1 for the last note:
"0 4".scale(
sequence('C major', ['D dorian', 'G mixolydian']).slow(2)
)
The output is equivalent to "<[c3 g3] [d3 d4]>"
with the indices "<[0 4] [0 4]>"
.
Ideally, the last note should be a g3, index 0 in 'G mixolydian' which starts there.
A human bass player would almost always play the root note on the first beat of a new scale / chord.
To mimic that behavior, we could use the not yet existing reset function:
const scales = sequence('C major', ['D dorian', 'G mixolydian']).slow(2)
"0 4".reset(scales).scale(scales)
This will reset the "0 4" each time the scale changes (any scale is true), creating this index pattern
"<[c3 g3] [d3 g3]>"
// "<[0 4] [0 0]>"
... which is what we want in that case. This is not only useful for basslines, but also arpeggios or glitchy retriggering patterns.
This will be fantastic for any type of dynamic groove!