Is it possible to alternate between non-cycle-length patterns? If so, how?

What I mean is something along these lines:

d1 $randcat [s "bd hh sn", s "hh*2", s "bd"] ... where the first pattern plays for three quarters of a cycle, the second for half of a cycle, and the third for one quarter (whenever they are chosen by randcat). I have tried using polymeters, as such: d1$ randcat [s "{bd hh sn}%4", s "{hh*2}%4", s "{bd}%4"]

... but to no avail: each pattern is still made to fit into a single cycle, looping until the cycle ends. Does Tidal support the functionality I'm looking for?

edit retag close merge delete

Sort by ยป oldest newest most voted

There's nothing existing, because patterns don't really "know" how long they are, and in general patterns are so flexible that it's not something there's a sensible way to keep track of.

There's kind of an ugly workaround: start out with a data type that does have a length, like a list. Then you can build the list as you like and convert to a pattern (using the preplace function <~>):

let a = ["bd", "hh", "sn"]
b = ["hh", "hh"]
c = ["bd"]
in d1 $s ("x x x x" <~> (listToPat$ a++b++c))


This only works if you want everything in quarter-cycle steps, and working in randomness is another layer of complexity that I haven't figured out yet. But maybe it helps?

more