hey, does someone know the reverb filter in serum?
Ive read somewhere that its basically a feedback delay network and researched feedback delay networks and found some code via SuperCollider Code
and this video https://www.youtube.com/watch?v=6ATQyEPUF7Q&t=363s
But its more operating like a resonator than a reverb when modulating the Cutoff Frequency at a low cutoff range and creating really great metallic sounds.
here you can hear what i mean:
This example from sccode https://sccode.org/1-5bL:
// Construct a circulant feedback matrix using the given eigenvalues
(
// 1 - The eigenvalues of the feedback coefficient matrix
d = [
-1,
Polar(1, -3pi / 4),
Polar(1, -pi / 2),
Polar(1, -pi / 6),
1,
Polar(1, pi / 6),
Polar(1, pi / 2),
Polar(1, 3pi / 4)
];
// 2 - Compute the feedback matrix from the given eigenvalues
n = d.size;
a = (Matrix.newIDFT(n) * Matrix.withFlatArray(n, 1, d)).real.flat / sqrt(n);
)
(
var primePowerDelays = {
arg delays;
(delays.collect { |delay, i|
var prime = i.nthPrime;
prime ** ((log(delay) / log(prime)) + 0.5).floor;
}).asInteger / s.sampleRate;
};
var delayLengths = {
arg n, dmin, dmax;
var nm1 = n - 1;
var d = dmin * ((dmax / dmin) ** ((0..nm1) / nm1));
(d * s.sampleRate).round(1.0).asInteger;
};
SynthDef(\sine, {
var freq = \freq.kr(440);
var trigFreq = \trigFreq.kr(1);
var sig, gainEnv, trig;
trig = Impulse.ar(trigFreq);
gainEnv = Decay.ar(trig, \decay.kr(0.2));
sig = SinOsc.ar(freq);
sig = sig * gainEnv * \amp.kr(0.5);
Out.ar(\out.kr(0), sig)
}).add;
SynthDef(\fdn, {
var a, fb, delayTime;
var sig, inSig;
fb = LocalIn.ar(n);
a = \a.kr(0 ! n);
delayTime = \delayTime.kr(primePowerDelays.(delayLengths.(n, 0.03, 0.06)));
inSig = In.ar(\in.kr(0));
sig = a.size.collect { |i|
DelayN.ar(a.rotate(i).inject(inSig, { |input, coef|
coef * fb[i] + input
}), 1, (delayTime[i] * \scale.kr(1.0) - ControlDur.ir).fold(0.0, 1.0))
};
sig = OnePole.ar(sig, \coef.kr(0.5));
sig = LeakDC.ar(sig);
LocalOut.ar(sig);
sig = sig.sum;
sig = sig.tanh;
sig = Pan2.ar(sig, \pan.kr(0), \amp.kr(0.75));
ReplaceOut.ar(\out.kr(0), sig)
}).add;
)
(
s.makeBundle(nil, {
x = Synth(\sine, [\out, 0, \trigFreq, 0.25, \amp, 0.1], 1, \addToHead);
y = Synth(\fdn, [\in, 0, \out, 0, \a, a, \scale, 0.01, \coef, 0.5], 1, \addToTail);
});
)
isnt too bad with low settings for scale
and coef
for creating a more resonator like thing. but now sure about that.
Any ideas on how to implement the reverb filter from serum in SC? thanks