slider1:-120<-120,0,0.1>Threshold (dB)
slider2:50<10,1000,1>Hold (ms)
slider3:1<1,50,0.1>Fade-in (ms)
slider4:100<10,1000,1>Fade-out (ms)
slider5:0<0,1000,1>RMS Size (ms)
slider6:0<0,1,1{Off,On}>Delta
slider7:0<-24,24,0.1>Output (dB)

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

@init
silentcnt=0;
seekv=1;
seekto=1;

@slider
thresh=10^(slider1/20);
sillen=slider2*srate/1000;
fadeout=1/pow(10,1/(srate*slider4/1000));
fadein=1/pow(10,1/(srate*slider3/1000));
rmscoef=exp(-1000/(slider5 * srate));
gain=10^(slider7/20);

@sample
in0=spl0;
in1=spl1;

slider5 > 0 ? (
ave=in0*in0+in1*in1;
runave=ave+rmscoef*(runave-ave);
det=sqrt(runave);
a=det > thresh;
):(
ave = 0;
a=abs(in0) > thresh || abs(in1) > thresh;
);

a ? (
silentcnt=0;
seekto=1;
):(
(silentcnt+=1) > sillen ?  seekto=0;
);

seekto > 0.5 ? ( // fading in
seekv=seekv*fadein + (1-fadein);
):( // fading out
seekv=seekv*fadeout;
);

s0=spl0;
s1=spl1;

spl0=(spl0*seekv)*gain;
spl1=(spl1*seekv)*gain;

slider6 == 1 ? (
spl0=(s0-spl0)*gain;
spl1=(s1-spl1)*gain;
);
