slider1:0<-24,24,0.1>PreGain (dB)
slider2:1<0,100,0.1>Rp
slider3:3<0,4,0.01>Vk
slider4:1<1,25,0.01>Vs
slider5:1<0,2,0.01>Level
slider6:0<-24,24,0.1>PostGain (dB)
slider7:0<0,1,1{Mono,Stereo}>Mode

in_pin:L in
in_pin:R in
out_pin:L out
out_pin:R out

@init
itm1=itm2=otm1=otm2=0;

function tanh(x) (
x=exp(2*x);
(x-1)/(x+1);
);

@slider
Rp=-slider2*0.1;
Vk=(-slider3-1)+4;
Vs=slider4;

level=slider5;
PreGain=10^(slider1/20);
PostGain=10^((slider6-3)/20);

mode=slider7;

@sample
mode==0 ? (
in = tanh((spl0+spl1)*0.5*PreGain);

Gk = in*Vk - Vk;
Vgk = 0.0357167 + 0.978574*Gk - 0.0857147*Gk*Gk - 0.0285716*Gk*Gk*Gk;
Ip = -0.0182*Vgk*Vgk*Vgk - 0.0233*Vgk*Vgk + 0.6117*Vgk + 1.6718;
Vp = Vs - Ip*Rp;
out = in*Vp;

spl0 = (in + tanh(out)*level) * PostGain * 0.5;
spl1 = (in + tanh(out)*level) * PostGain * 0.5;
);

mode==1 ? (
in0 = tanh(spl0*PreGain);
in1 = tanh(spl1*PreGain);

Gk = in0*Vk - Vk;
Vgk = 0.0357167 + 0.978574*Gk - 0.0857147*Gk*Gk - 0.0285716*Gk*Gk*Gk;
Ip = -0.0182*Vgk*Vgk*Vgk - 0.0233*Vgk*Vgk + 0.6117*Vgk + 1.6718;
Vp = Vs - Ip*Rp;
out0 = in0*Vp;

Gk = in1*Vk - Vk;
Vgk = 0.0357167 + 0.978574*Gk - 0.0857147*Gk*Gk - 0.0285716*Gk*Gk*Gk;
Ip = -0.0182*Vgk*Vgk*Vgk - 0.0233*Vgk*Vgk + 0.6117*Vgk + 1.6718;
Vp = Vs - Ip*Rp;
out1 = in1*Vp;

spl0 = (in0 + tanh(out0)*level) * PostGain * 0.5;
spl1 = (in1 + tanh(out1)*level) * PostGain * 0.5;
);

otm1=0.999*otm1 + spl0 - itm1; itm1=spl0; spl0=otm1;
otm2=0.999*otm2 + spl1 - itm2; itm2=spl1; spl1=otm2;
