There are a couple of different things:
-
You drone stops after 1 second, you will need to use an asr or similar gated envelope to sustain the drone.
-
There are no arguments in your synthdef so nothing can be changed after initiating the synth.
More generally, it is hard to detect reverb on an unchanging, unmodulated sound as the reverb blends perfectly in and is disguised by the clean signal (In your example it is all reverb and no clean signal). As soon as you start modulating e.g. frequency, amplitude or filtercutoff, reverb will become more obvious. And infinite reverb time, as in your example, might not be the best way as changes in the source is swallowed in the soup.
It is probably also a good idea to split the drone synth from the reverb synth. The below example is the equivalent of using a reverb insert with a mix knob in a DAW. The frequency and amplitude of each partial is being slightly modulated, left and right side are independant causing random panning effects due to differences in modulation times.
(
SynthDef(\drone, {|bus = 0, freq = 110, gate = 1, amp = 0.5, atk = 1, rel = 2|
var n = 3;
var sig = 2.collect{
n.collect{|i|
SinOsc.ar((freq * (i + 1) * SinOsc.kr(rrand(0.1, 0.3)).range(0.995, 1.005)).lag(1),
rrand(0, pi),
SinOsc.kr(rrand(0.1, 0.3)).range(0.03, 0.05)
)
};
};
var env = EnvGen.kr(Env.asr(atk, amp, rel), gate, doneAction: 2);
Out.ar(bus, sig * env);
}).add;
SynthDef(\reverb, {|bus = 0, time = 3, amp = 1, mix = 0.5|
var in = In.ar(bus, 2) * 0.3;
var reverb = NHHall.ar(in, time) * amp;
var sig = XFade2.ar(in, reverb, mix.linlin(0, 1, -1, 1).lag(1));
ReplaceOut.ar(bus, sig);
}).add;
);
///
(
~reverb = Synth(\reverb, [\mix, 0.5, \time, 3], addAction: \addToTail);
~drone = Synth(\drone, [\freq, 45.midicps]);
);
///
~drone.set(\freq, rrand(40, 50).midicps);
///
~drone.set(\gate, 0); // drone fades out, synth is released (see server node tree)
///
~reverb.free;