Transitioning between sections in a composition

Hello everyone,
I am writing a relatively large project and it consists of several sections. In each section I am planning to use Ppar that consists of all the patterns in a section. My plan is to transition between each Ppar to play different sections in order. I checked Eli Fieldsteel’s book and even though the examples were not directly with Ppar I figured he also uses a similar approach.

My question is, what other approaches do you all use? Are there any efficient and error-prone methods for a live performance in this manner?

I know Patterns can make a lot of silly things and are absolutely not as rigid as I’m about to describe them :innocent:.

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 ?

1 Like

If your sections have fixed a priori durations (e.g. you know that section A == 320 seconds), you might look at using recursive phrasing (search the documentation for more info). This would allow you to define each section as it’s own Pdef, and then sequence them with a simple outer pattern like:

Pbind(
 \type, \phrase, 
 \instrument, Pseq([\partA, \partB, \partC]), 
 \dur, Pseq([320, 400, 120]), 
 \legato, 1
)

This makes it much easier to play sections in isolation, re-order sections, or pass high-level parameters from the outer pattern to each of your section patterns.

If you wanna get experimental, Pwith does the same thing but it’s not tied specifically to the Pdef system and has a lot more flexibility with respect to time and how the pattern replacements happen - but for a simple “parts A, B, C, D” score, there’s probably not much to be gained from using it.

3 Likes

Thanks @Dindoleon ! I really liked the idea with the routine. The sections are relatively rigid for now, in order to make it easier for the performer. So the changes are already implemented, such as your scenario with recording a partition. I am using Pdefn to control the current chord and some other global parameters etc. But to initiate those Ppars for each section, I will try using routines because I want to make it flexible, when the next section will be initiated. This may be for example, the routine continously checking whether a global variable ~next_section is true or not. Then the routine could wait until the current loop is completed and transition to the next section.

Thank you @scztt , that is really helpful, I will definitely experiment with Pwith!