slider1:0<-100,100,1>Attack (%)
slider2:0<-100,100,1>Sustain (%)
slider3:-1<-30,-1,1>max Envelope A (dB)
slider4:-60<-120,-30,1>min Envelope A (dB)
slider5:-1<-30,-1,1>max Envelope S (dB)
slider6:-60<-120,-30,1>min Envelope S (dB)
slider7:0<-24,24,0.1>Output (dB)
slider8:1<0,1,1{Off,On}>Clip

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

@init
ext_noinit = 1;
gain = 1;

@slider
attack = slider1/100;
sustain = slider2/100;

A = slider3;
B = slider6;
C = slider4;
D = slider5;
b1Env1 = -exp( A / srate );
a0Env1 = 1 + b1Env1;
b1Env2 = -exp( B / srate );
a0Env2 = 1 + b1Env2;
b1Env3 = -exp( C / srate );
a0Env3 = 1 + b1Env3;
b1Env4 = -exp( D / srate );
a0Env4 = 1 + b1Env4;

vol = 10^(slider7/20);
clip = slider8;

@sample
in = max(abs(spl0),abs(spl1));

env1 = sqrt(tmpEnv1 = a0Env1*in - b1Env1*tmpEnv1);
env2 = sqrt(tmpEnv2 = a0Env2*in - b1Env2*tmpEnv2);
env3 = sqrt(tmpEnv3 = a0Env3*in - b1Env3*tmpEnv3);
env4 = sqrt(tmpEnv4 = a0Env4*in - b1Env4*tmpEnv4);

// ((short/long)*attack) * ((long/short)*sustain)
gain = exp(log(max(env3/env1,1))*attack) * exp(log(max(env4/env2,1))*sustain);

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

clip ? (
spl0 = min(max(spl0,-1),1);
spl1 = min(max(spl1,-1),1);
);
