Saturation Models (Neve, Tweaker, Oxford Inflator) in FAUST
-
Here's my attempt at different saturation models in faust. Have fun!
I'm hoping WAVES, KUSH and UAD won't have me whacked for sharing these.
Feel free to add gain correctionimport("stdfaust.lib"); drive_twk = hslider("TWK",0,0,1,0.001); drive_neve = hslider("Neve",0,0,1,0.001); inflate = hslider("Inflate",0,0,1,0.001); gain = hslider("Gain",1,0,2,0.001); // Neve neve(x) =x + 0.04 * ma.tanh(x*40); // Tweaker twk(x) = x*2/(1+abs(x*2)); // Oxford Inflator oxford(x) = sin(ma.PI/2*sin(ma.PI * 2 * x)) * inflate + sin(ma.PI * 2 * x) * (1 - inflate); saturator = ef.dryWetMixerConstantPower(drive_twk,twk) : ef.dryWetMixerConstantPower(drive_neve,neve) : ef.dryWetMixerConstantPower(inflate,oxford) * gain; process = saturator,saturator;
-
@Morphoice how did you arrive at these values/algorithms?
-
The Inflator yes, is a completely a linear transfer function, split into 3 bands.
You can create programs to measure and derive the transfer functions. -
Thank you for sharing these!
the inflator algorithm looks a lil bit weird, i think it should be like this:
a1=1+(curve+50)/100
a2=curve/50
a3=(curve-50)/100
a4=0.0625-curve/400+curve^2/40000x=a1・x+a2・x^2+a3・x^3-a4・(x^2-2・x^3+x^4)
the curve value should be in the range of -50 to 50 but you could intentionally set it to somewhere over 50 to achieve some weird distortion effect.
also, the inflator is mainly control by input gain and curve so you may need to add a input gain by doing something like:
x=x0・preGain
(the effect param in the original plugin is actually a little bit misleading, it's just a dry wet mix and seems like it was only designed to be set to 100% or 0% to make it sounds "natural")
I'm sure several inflator clone use this algorithm and with linear phase oversampling it somehow even sounds better then the original one :)