// title: feedback with limiter // author: LFSaw // description: // Using the AGC2.1 limiter in a feedback context // code: ( 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 }) )