«Interpolate between Envs with Pseg» by grirgz
on 20 May'26 18:52 inFor a long time, I thought it was impossible to use Pseg to interpolate between Envs like it does with simple values, but I discovered it only needs .asArray
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
(
SynthDef(\sin, { arg out=0, gate=1, amp=0.1, pan=0, freq=200;
var sig;
sig = SinOsc.ar(freq);
sig = sig * EnvGen.kr(\adsr.kr(Env.adsr(0.1,0.1,0.8,0.1)), gate, doneAction:2);
sig = Pan2.ar(sig, pan, amp);
Out.ar(out, sig);
}).add;
);
(
// sequence Envs
// need [] else it is inlined or does pattern multichannel expansion
Pdef(\demo,
Pbind(
\instrument, \sin,
\degree, Pseq([0, Pwhite(0,7,1)],inf),
\legato, 0.5,
\adsr, Pseq([
[ Env.adsr(1.1,0.1,0.8,1.01) ],
[ Env.adsr(0.01,0.1,0.8,0.01) ],
[ Env.adsr(0.01,1.1,0.3,0.01) ],
],inf),
)
).play;
);
(
// interpolate using Pseg
// need .asArray
Pdef(\demo,
Pbind(
\instrument, \sin,
\degree, Pseq([0, Pwhite(0,7,1)],inf),
\legato, 0.5,
\adsr, Pseg(Pseq([
[ Env.adsr(1.1,0.1,0.8,1.01).asArray ],
[ Env.adsr(0.01,0.1,0.8,0.01).asArray ],
[ Env.adsr(0.01,1.1,0.3,0.01).asArray ],
],inf),8),
)
).play;
);
reception
comments