Share your delay/reverb designs!

Hello everyone

Something I have always struggled with in any DSP work is the design of nice sounding delay effects.

I would like to see and hear your delay / echo designs for inspiration - so please share it here if you feel like it!

Below is one of mine which is a stereo (actually multichannel, but with “stereo” effects) delay with feedback, lpf in the feedback loop and modulation among other things. All parameters are normalized to 0.0-1.0.

~numchans = 2;

~delay = {|in, delay=0.1, delayfb=0.33, decaytime=0.5, delaywidth=0.1, modFreq=0.1, modAmount=0.25, fblowcut=0.5|
	var localIn = ~numchans,  default: 0.0);
	var output = Array.fill(~numchans, {|cNum|
		var sig, fb;

		// Random scalar to add variation
		var randScale = Rand(0.95,1.0);

		// Every other channel, scale the delay value according to the delaywidth arg
		var delayScale = if(cNum.even, { delaywidth.linlin(0.0,1.0,0.5,1.5) }, { 1.0 });

		// The final, scaled delayVal to be fed to the modulator 
		var delayVal = lag3(delayScale * randScale * delay.linlin(0.0,1.0,0.0001,2.0));

		// Delaytime modulator
		var phase = cNum.linlin(0,~numchans-1,-8pi, 8pi);
		var lfofreq = (randScale * modFreq.linexp(0.0,1.0,0.0001,10.0)).lag3;
		var minModamount = modAmount.linlin(0.0,1.0,1.0,0.001).lag * delayVal;
		var maxModamount = delayVal;

		delayVal =
			Rand(0.99,1.0) * lfofreq, 
		).linlin(-1.0,1.0, minModamount, maxModamount);

		// Feedback 
		// goes from 0 to 110%
		fb = (delayfb * 1.1 * localIn[cNum]).tanh; // tanh for "limiting"
		fb =, 0.2, delaytime: Rand(0.1,0.2)); // Avoid phase problems that sound "flat"
		fb =, Rand(0.99,1.0)*fblowcut.linexp(0.0,1.0,40.0,12000.0));

		// The final delay
		sig =
			in[cNum] + fb, 
			decaytime.linlin(0.0,1.0, 0.1,3.0).lag3

		// Filter out potential dc


// Play some bullshit testsounds
Pdef(\testy, Pbind(\dur, 0.125, \pan, Pwhite(-1.0,1.0), \degree, Pwhite((-7),7), \amp, 0.75));
Ndef(\testoutput).source = Pdef(\testy);
Ndef(\testoutput).mold(2, 'audio').play;
Ndef(\testoutput)[1] = \filter -> ~delay;
// Normalize all parameters in gui (a hack)
	Spec.add(k, [0.0,1.0]);


Here is some inspiration:

Valhalla documentation:

Sean Costello of Valhalla talking about reverbs:

1 Like

Hey Mads, thanks for sharing!
I have some questions about your code, but i’ll stick with 2:
-why is phase going from -8 to 8pi?(i assumed it was -2 to 2pi)
-why are you not wrapping the functions in a SynthDef?
Thanks a lot