// based on a js chorus plugin

desc: Mono

slider1:1<0,4,0.1>Rate (Hz)
slider2:50<10,1000,1>Length (ms)
slider3:25<20,100,1>Pitch (%)
slider4:50<0,100,1>Width (%)
slider5:0<-60,12,0.1>Output (dB)

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

@init
bpos = 0;
bufofs = 128;

i = 0;
loop(1, 
i[0] = (i+1)/1 * $pi; 
i += 1; 
);

@slider
rateadj = slider1*2*$pi/srate;
len = slider2 * srate * 0.001|0;
size = len/1 * slider3 * 0.01|0;
smoothing = floor(slider4 * 0.49) * 0.01;
gain = slider5 <= -60.0 ? 0.0 : 10 ^ (slider5 / 20);

@sample
os0 = (spl0+spl1)*0.5;
out = 0;

i = 0;
loop(1,
tpos = bpos - (0.5 + smoothing*sin( i[0] += rateadj)) * (i+1) * size;
tpos < 0 ? tpos += len;

frac = tpos-(0|tpos); 
ntpos = tpos >= (len-1) ? 0 : tpos+1;

out += (bufofs[tpos]*(1-frac) + bufofs[ntpos]*frac ) * gain;
i += 1;
);

bufofs[bpos] = os0;
bpos += 1;
bpos >= len ? bpos = 0;

spl1 = spl0 = out;
