«feedback with limiter» by LFSaw

on 16 Apr'24 18:05 in feedback

Using the AGC2.1 limiter in a feedback context

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
(
Ndef(\a).addSpec(\inAmp0, [0, 1]);
Ndef(\a).addSpec(\inAmp1, [0, 1]);
Ndef(\a).addSpec(\honig, [0.01, 10, \exp]);
Ndef(\a).addSpec(\honigDel, [0, 0.1, \lin]);
Ndef(\a).addSpec(\ampHonig, [0.01, 10, \exp]);
Ndef(\a).addSpec(\dyndB, [-5, 0, \lin]);

Ndef(\a, {
	var modScale = 1; // dyn
	var limit = \limit.kr(1);

	var snd = SoundIn.ar([0, 1]) * [\inAmp0.kr(1),\inAmp1.kr(1)];
	var inAmp = Amplitude.ar(snd);

	//////////////////
	// AGC2.1 ( a limiter)
	var rms500 = RMS.ar(snd, 500);
	var rms1   = RMS.ar(snd, 10) * 2;
	var analytics = max(rms500 - rms1, 0) + rms1;


	// limiting
	snd = (
		DelayL.ar(snd, 0.02, 0.5 * 0.02) / max(analytics / limit, 0.125)
	).clip2(1);

	snd = snd * LFDNoise3.kr(\ampHonig.kr(0.1)).range(\dyndB.kr(-3), 0).dbamp;
	snd = FreqShift.ar(snd, inAmp * 5);
	snd = SelectX.ar((inAmp * 2).tanh, [
		snd,
		LFTri.ar(inAmp * 20) * snd
	]).sum!2;

	///// AdC
	// DelayL.ar(snd, 0.1, snd.collect{
	// 	LFDNoise3.kr(\honig.kr(0.1)).range(0, \honigDel.kr(0.02))
	// }).tanh

})
)
raw 1041 chars (focus & ctrl+a+c to copy)
reception
comments