Setting values is probably the most flexible in the long term.
One thing just for clarity - Pmono
doesn’t restart the synth, it’s effectively like a single synth event followed by a stream of \set
events.
There’s one more version of this that is probably my preference - if only because I think it splits the code up in a way that’s very clean… The event type \phrase
will play another Pdef
as if it were a single event. That Pdef
is played as long as the outer pattern, and inherits all it’s values from the outer pattern, but can define it’s own structure.
For your case, you can have an outer pattern that plays your long 120 second notes… Then you can specify a phrase that’s a Pmono with a bunch of parameter sets, specifying the fluid changes happening to the running synth. An example:
(
Pdef(\longNote, Pmono(
\default,
\degree, Pkey(\degree) + Pseq([0, 2, 5, 9, 5], inf), // <--- values, including the degree, are inherited from the outer but can be overridden or modified
\dur, 1/9
).trace);
Pdef(\pattern, Pbind(
\type, \phrase, // <--- refers to the Pdef above
\instrument, \longNote,
\octave, 3,
\legato, 1,
\degree, Pseq([0, -5, -3], inf),
\dur, 60,
)).play;
)
This plays one new synth every 60 seconds, and modulates it’s freq parameter 9 times a second for as long as that note runs.