MM – Eli Fieldsteel’s CombL implementation.

Here is Eli’s implementation for a Modulated Delay/Reverb based on CombL.

I made it so you can use it with Synths and use ServerTree to keep it loaded if you reboot or hit “CMD+.”

You can also find his original implementation for Microphone input. He used Groups and Buffers for that also.

His original tutorial can be found here:

//MM Eli Fieldsteel's CombL implementation. Modified to work with Synths. Mic implementation below.
//A modulated Delay/Reverb FX

//My interface options. Change at will.

(
Server.local.options.device = "ASIO : ASIO PreSonus FireStudio";
Server.local.options.sampleRate=48000;
Server.local.options.hardwareBufferSize=128;
)

Server.local.options.numOutputBusChannels=2;

//Evaluate delay Def.

(
SynthDef(\delay, {
	|in=0, out=0, mix=(-0.5), decay=3, amp=1, delHz=0.25, delMin=0.1, delMax=0.4|
	var sig, delay;
	sig = In.ar(in, 2);
	delay=CombL.ar(sig, 0.5,SinOsc.ar([Rand(0.1,1),Rand(0.1,1)]*0.9).exprange(delMin,delMax),decay);
	sig=XFade2.ar(sig,delay,mix)*amp;
	Out.ar(out,sig);
}).add;
)

//Create buffer.
~delayBus = Bus.audio(s,2);

//Create iterations of the delay, forming a Reverb.
//Once delay iterations are evaluated you don't need to re evaluate. Instead just use the ServerTree.add line.
(
~createDelay={~delayFX=12.do({
	Synth(\delay, [
		\in, ~delayBus,
		\out, 0,
		\mix, 0.3,
		\amp, 1/12,
		\delHz, exprand(0.02,0.08),
		\delMin, exprand(0.05,0.1),
		\delMax, exprand(0.101,0.2),
		\decay, rrand(3.0,6.0),
	], ~delayGrp);
});
})

ServerTree.add(~createDelay);
ServerTree.removeAll;

//The Synth. Note it outputs to "~delayBus"
(
SynthDef(\tri, {
	|gate=1, amp=1, freq=200, panpos=0, envdur=1,out=0|
	var sig, pan;
	sig=LFTri.ar(freq,0,EnvGen.ar(Env.perc(0.001,envdur,amp,-15),gate,doneAction:2));
	pan=Pan2.ar(sig,panpos,1);
	Out.ar(~delayBus,pan);
}).add;
)

//Test your synth. Nothing will make sound if you don't first create the delayBus and evaluate the delay iterations and the ServerTree.
Synth(\tri, [\panpos, 0])


//Using Mic input. Watchout for feedback!!!! (Use HeadPhones or real low volumes)

(
SynthDef(\mic, {
	|in=1, out=0, amp=1|
	var sig;
	sig = SoundIn.ar(in!2)*amp;
	Out.ar(out, sig);
}).add
)

(
SynthDef(\delay, {
	|in=0, out=0, mix=(-0.5), decay=3, amp=1, delHz=0.25, delMin=0.1, delMax=0.4|
	var sig, delay;
	sig = In.ar(in, 2);
	delay=CombL.ar(sig, 0.5,SinOsc.ar([Rand(0.1,1),Rand(0.1,1)]*0.9).exprange(delMin,delMax),decay);
	sig=XFade2.ar(sig,delay,mix)*amp;
	Out.ar(out,sig);
}).add;
)

~delayBus = Bus.audio(s,2);

(
~synthGrp=Group.new;
~delGrp=Group.after(~synthGrp);
~synthDirect=Synth(\mic, [\in,0, \out,0], ~synthGrp);
~effect=Synth(\mic, [\in,0, \out, ~delayBus], ~synthGrp);
12.do({
	Synth(\delay, [
		\in, ~delayBus,
		\out, 0,
		\mix, 0.1,
		\amp, 1/12,
		\delHz, exprand(0.02,0.08),
		\delMin, exprand(0.05,0.1),
		\delMax, exprand(0.101,0.2),
		\decay, rrand(3.0,6.0),
	], ~delGrp);
});
)

s.freeAll
Author
418 PM
  • Platform:
  • Category: Effect
  • Revision: 1.0
  • License: GNU General Public License family
  • Views: 112
  • Modified: 5 months ago
Chat about this patch on Discord!
Appreciate

Leave a Reply