I’m trying to change multiple parameters of a Pbind with the same LFO - I want to change a reverb effect to make it sound like a room is growing and shrinking. I thought this would be relatively easy but I can’t quite work out what I need to do.
(
SynthDef(\reverb, {
arg in, predelay=0.1, revTime=1.8, lpf=4500, mix=0.15, amp=1, out=0, maxRoomSize=0.005;
var dry, wet, temp, sig;
predelay = predelay.clip(0.05, 0.1);
dry = In.ar(in, 2);
temp = In.ar(in, 2);
wet = 0;
temp = DelayN.ar(temp, 0.2, predelay);
16.do{
temp = AllpassN.ar(temp, 0.05, {Rand(0.001, maxRoomSize)}!2, revTime);
temp = LPF.ar(temp, lpf);
wet = wet + temp;
};
sig = XFade2.ar(dry, wet, mix*2-1, amp);
sig = LeakDC.ar(sig);
Out.ar(out, sig);
}).add;
)
~reverbBus = Bus.audio(s, 2);
(
SynthDef(\test, {
arg amp=0.1, out=0, freq=220, atk=0.05, rel=0.1;
var sig, env;
env = EnvGen.ar(Env.perc(atk, rel), doneAction: 2);
sig = VarSaw.ar(freq, LFNoise0.kr(atk+rel).range(0, 2pi));
sig = sig * env * amp!2;
Out.ar(out, sig);
}).add;
)
(
Pdef(\test,
Pbind(
\instrument, \test,
\dur, 0.8,
\freq, 220,
\rel, 0.01,
\atk, 0.01,
\out, ~reverbBus,
\amp, 0.25
)).play;
)
(
Pdef(\reverbtest,
Pmono(\reverb,
\dur, 1,
\mix, Ndef(\lfo).asMap,
\in, ~reverbBus,
\amp, 1
)).play;
)
Ndef(\lfo, {arg rate=0.5; var lfo; lfo = SinOsc.ar(rate).linlin(-1,1,0.05,0.75)}); // this works on its own
What I would like to do, however, is to have the same lfo also controlling predelay (between 0.05 and 0.15 or so) and revTime (between 1.0 and 2.0) in addition to mix (0.05, 0.75). I tried the following ideas and they didn’t work:
// different Ndefs for each parameter eg.
Ndef(\mix, {var mix; mix = Ndef(\lfo).linlin(-1,1,0.05,0.75)});
Ndef(\predelay, {var predelay; predelay = Ndef(\lfo).linlin(-1, 1, 0.05, 0.15)});
Ndef(\lfo, {arg rate=0.5; var lfo; lfo = SinOsc.ar(rate)});
(
Pdef(\reverbtest,
Pmono(\reverb,
\dur, 1,
\mix, Ndef(\mix).asMap,
\predelay, Ndef(\predelay).asMap,
\in, ~reverbBus,
\amp, 1
)).play;
)
// Pkey
Ndef(\lfo, {arg rate=0.5; var lfo; lfo = SinOsc.ar(rate).linlin(-1,1,0.05,0.75)});
(
Pdef(\reverbtest,
Pmono(\reverb,
\dur, 1,
\mix, Ndef(\lfo).asMap,
\delaytime, Pkey(\mix.linlin(0.05, 0.75, 0.05, 0.15)),
\in, ~reverbBus,
\amp, 1
)).play;
)
I have a feeling this is not a super difficult problem and that I have overlooked/misunderstood something. Any help would be much appreciated - thanks!