Duration dependent Env

hey, i was trying to convert this example ive found somewhere in the web to be used with Pmono.
Does anybody know how i have the envelope dependant on the duration? Or how do i deal with the trigTime variable?

example:

(
{
	var sig, trig, trigRate, trigTime, centerFreq, freq, pan, env;

	trigRate = MouseX.kr(1, 200, 1);
	trigTime = trigRate.reciprocal.poll;
	trig = Impulse.kr(trigRate, 0.4);

	centerFreq = MouseY.kr(100, 8000, 1);
	freq = Latch.kr(WhiteNoise.kr(centerFreq * 0.5, centerFreq), trig);
	pan = Latch.kr(WhiteNoise.kr, trig);
	env = Decay2.kr(trig, 0.1 * trigTime, 0.9 * trigTime);

	sig = SinOsc.ar(freq);

	sig = sig * env;

	sig = Pan2.ar(sig, pan, \amp.kr(0.25));
	sig = CombC.ar(sig, \maxDel.kr(0.3), \delTime.kr(0.3), \decTime.kr(2));
}.play;
)

trying to convert:

(
SynthDef(\comb, {

	var trig = \trig.tr(1);
	var trigRate, trigTime, centerFreq, freq, pan;
	var sig, env;

	//trigRate = MouseX.kr(1, 200, 1); // -> dur = 1 / trigRate
	//trigTime = trigRate.reciprocal; // -> dur
	//trig = Impulse.kr(trigRate, 0.4);

	centerFreq = MouseY.kr(100, 8000, 1);
	freq = Latch.kr(WhiteNoise.kr(centerFreq * 0.5, centerFreq), trig);
	pan = Latch.kr(WhiteNoise.kr, trig);
	env = Decay2.kr(trig, 0.1, 0.9);

	sig = SinOsc.ar(freq);

	sig = sig * env;

	sig = CombC.ar(sig, \maxDel.kr(0.3), \delTime.kr(0.3), \decTime.kr(2));

	sig = Pan2.ar(sig, pan, \amp.kr(0.25));
	Out.ar(\out.kr(0), sig);
}).add;
)

(
Pdef(\comb,
	Pmono(\comb,

		\dur, Pseg(Pexprand(1, 20).reciprocal, Pexprand(1, 4)),

		\amp, 0.25,
		\out, 0,
	)
).play(t, quant:1);
)

One way is to add some attack and release arguments to your SynthDef, so that you can set them from the Pmono. Maybe something like this:

(
SynthDef(\comb, {

	var trig = \trig.tr(1);
	var trigRate, trigTime, centerFreq, freq, pan;
	var sig, env;

	//trigRate = MouseX.kr(1, 200, 1); // -> dur = 1 / trigRate
	//trigTime = trigRate.reciprocal; // -> dur
	//trig = Impulse.kr(trigRate, 0.4);

	centerFreq = MouseY.kr(100, 8000, 1);
	freq = Latch.kr(WhiteNoise.kr(centerFreq * 0.5, centerFreq), trig);
	pan = Latch.kr(WhiteNoise.kr, trig);
    env = Decay2.kr(trig, \atk.kr(0.1), \rel.kr(0.9));

	sig = SinOsc.ar(freq);

	sig = sig * env;

	sig = CombC.ar(sig, \maxDel.kr(0.3), \delTime.kr(0.3), \decTime.kr(2));

	sig = Pan2.ar(sig, pan, \amp.kr(0.25));
	Out.ar(\out.kr(0), sig);
}).add;
)

(
Pdef(\comb,
	Pmono(\comb,

		\dur, Pseg(Pexprand(1, 20).reciprocal, Pexprand(1, 4)),
        // some arbitrary atk and rel times:
        \atk, Pkey(\dur) * 0.1,
        \rel, Pkey(\dur) * 0.5,
		\amp, 0.25,
		\out, 0,
	)
).play(t, quant:1);
)

And you probably don’t need the trigTime variable anymore since you are controlling durations from the pattern.

1 Like

thanks thats it i think :slight_smile:

in the example the Impulse.ar has this phase offset is this relevant? and could it be implemented using \trig.tr(1) instead?

trig = Impulse.kr(trigRate, 0.4);