«Interpolate between Envs with Pseg» by grirgz

on 20 May'26 18:52 in patterninterpolation

For 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;
);
raw 940 chars (focus & ctrl+a+c to copy)
reception
comments