*** Synchronizing the value patterns within Pbind.
Pbind is beautiful when there doesn't need to be tight synchronization
between parameters streams. This is great for a lot of atmospheric,
free-rhythm textures, but it's terrible for metrical organization.
... because my system (as does Tidal) encodes data and rhythm at the same
time. This has other limits, though.
I'd wager the following would be hard
in Tidal.
(
p = Pbind(
\midinote, Ppatlace([
Pwhite(48.0, 50.0, inf),
Pn(
Pwhite(
54.0,
Pseries(56.0, Pwhite(0.25, 1.0, inf), { rrand(10, 25) }),
inf
),
inf
)
], inf),
\dur, Pn(
Pexprand(0.04, 0.1, inf) * Pgeom(1, Pwhite(1.08, 1.2, inf), { rrand(6, 12)
}),
inf
)
).play;
)
*** Patterns are incomplete as a pure-functional system
Patterns are supposed to be stateless, but in practice, you have to embed
all kinds of Pfunc, .collect, Prout, Pspawner etc. to do really interesting
things.
*** Event patterns don't have a good way to encode dependencies
In practice, an event pattern playing a musical element needs other "stuff"
-- buses, buffers, data storage etc. but all of these are best handled
outside the pattern system itself. There was an attempt with Pproto, but it
doesn't support everything, and it doesn't sync loading cleanly.
I deal with it using PR/BP from my ddwChucklib library. I don't know if I
would call this a general solution, though.