Hi
I am facing a problem I simply cannot figure out: How can I elegantly fade out a pattern that is playing really long events (longer than the fade out time) in a way that is elegant and nice, and doesn’t block other patterns in the same parent group? This is as far as I have come, and it causes all manners of problems, including applying the fade to the bus that other synths are using. Does anyone have good solutions for this particular problem? I really want the fade out to be responsible for release all the inner synths in the group at fadeout, I think this is the way to go for stopping these long events. Anyways, I am stuck. Any ideas?
(
var numChannels = 2;
var name = "fader2";
SynthDef(name, {
var out = \out.kr(0);
var sig = In.ar(bus:out, numChannels:numChannels);
var fadeInTime = \fadeInTime.kr(4.0);
var fadeOutTime = \fadeOutTime.kr(4.0);
var envGate = \gate.ar(1);
var env = Env.asr(fadeInTime, 1, fadeOutTime, \sine);
env = env.ar(gate: envGate, doneAction: Done.freeGroup).poll(label: "env");
ReplaceOut.ar(bus:out, channelsArray:sig * env);
}).store;
SynthDef(\sine, {
var out = \out.kr(0);
var freq = \freq.kr(440);
var amp = \amp.kr(0.1);
var envGate = \gate.kr(1);
var env = EnvGen.ar(Env.asr(1, 1, 1, \sine), envGate, doneAction:Done.freeSelf);
var sig = SinOsc.ar(freq:freq, mul:amp).dup(numChannels) * env;
Out.ar(bus:out, channelsArray:sig);
}).store;
)
(
var fadeOutTime = 4;
var fadeInTime = 4;
var inpattern = Pbind(
\instrument, \sine,
\dur, 32,
\delta, 4,
\freq, Pwhite(50,250)
);
p = Pgroup(Pfx(inpattern, "fader2", \fadeInTime, fadeInTime, \fadeOutTime, fadeOutTime)).play;
o = Pgroup(Pfx(Pbindf(inpattern, \freq, Pkey(\freq) + 100), "fader2", \fadeInTime, fadeInTime, \fadeOutTime, fadeOutTime)).play;
)
// Stop one, to hear problem
p.stop;