I know Patterns can make a lot of silly things and are absolutely not as rigid as I’m about to describe them .
When I first encountered Patterns, they looked like partitions to me, especially Pbinds. And that’s how I use them. Most of the time, when I use a Pattern, I’ve already composed the score (either as a partition, or with my instrument), so I translate the musical idea into a Pbind, maybe adding some randomness on some parameters, but nothing fancy. I then record it and import it within Reaper, and never play the Pbind again, unless I want to make some adjustments, in which case I re-record the Pbind, etc. I find that Patterns look like blocks, that can be cemented together to make bigger blocks, but are really difficult to cut in smaller pieces.
When it comes to dynamic composition, or live, I find Routines easier to manipulate. This forces you to reimplement part of the Pattern interface, e.g. automated Synth()
calls. But, for example, if your routine is looping over a single beat, simply incrementing a beat counter, you can change your synths parameters whenever you like, shift your arrays starting points, sizes, etc, without worrying at all about what the current beat is.
So in your example, I’d have place holders ready like pianoScore
. First, pianoScore
is set equal to pianoIntro
. Routine starts, plays pianoScore
, and counts beats. When the beat number reaches X0
, it calls introToVerse
, which sets pianoScore
equal to pianoVerse
. When the beat number reaches X1
, it calls verseToBridge
, which sets pianoScore
equal to pianoBridge
.
All along the composition, the Routine keeps playing pianoScore
. But what pianoScore
refers too is updated when needed.
I think your approach is good, as long as it does what you need, and you’re comfortable with the tools you’re manipulating. Some people are complaining that there’s too many ways to do the same thing in SC, but I think this is a real benefit, as it adapts to the way you’re thinking about your problem, you do not have to figure out what developers believed would be the best way to solve said problem.
Patterns respond to ++
, which allows you to concatenate them. So maybe an other approach would be, for each parameter, to concatenate every section patterns first ? This way, you’d get a single big pattern for each parameter before starting the piece ?