slider1:_paramSweepRate=1<0,8,0.1>Rate (Hz)
slider2:_paramWidth=70<0,100,1>Width (%)
slider3:_paramFeedback=70<0,100,1>Feedback (%)
slider4:_paramStages=2<0,4,1{2,4,6,8,10}>Stages
slider5:_paramMix=0<0,7,1{Mono,Stereo,Mono Minus,Stereo Minus,Mono Wet Only,Stereo Wet Only,Mono Wet Only Minus,Stereo Wet Only Minus}>Mix Mode
slider6:_paramFreq=350<300,1200,10>Freq (Hz)
slider7:0<0,100,1>Dry Mix (%)
slider8:0<-30,12,0.1>Output (dB)
slider9:0<0,1,1{tanh,hard}>--Limit

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

@init
_feedbackPhase = 1;

// init the all pass line
_lx1 = _ly1 =
_lx2 = _ly2 =
_lx3 = _ly3 =
_lx4 = _ly4 =
_lx5 = _ly5 =
_lx6 = _ly6 =
_lx7 = _ly7 =
_lx8 = _ly8 =
_lx9 = _ly9 =
_lx10 = _ly10 = 0;

_mixLeftWet =
_mixLeftDry =
_mixRightWet =
_mixRightDry = 0.5;

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

function _sweepRate(x)
(
_sweepRate = pow(10,_paramSweepRate*0.1);
_sweepRate -= 1;
_sweepRate *= 1.1;
_sweepRate += 0.1;

//rate = pow(10,_paramSweepRate*0.1);
//rate -= 1;
//rate *= 1.1;
//rate += 0.1;
//_sweepRate = rate;
);

@slider
width = (_paramWidth*0.005)+0.5;
freq = _paramFreq;
sweep = _sweepRate();

range = width * 6;
range2 = 1-range*0.1;

(freq != old_freq || sweep != old_sweep || range != old_range || range2 != old_range2) ? (
// freq param for equation
_wp = ($pi * freq) / srate;
_minwp = ($pi * freq * range2) / srate;
_maxwp = ($pi * freq * range) / srate;

// amount to multiply the freq by with each sample
_sweepFactor = pow( range, (sweep / (srate / 2)) );

old_freq = freq;
old_sweep = sweep;
old_range = range;
old_range2 = range2;
);

mix = slider7 * 0.01;
output = 10^(slider8/20);

@sample
_paramMix == 0 ? ( //mono
_mixLeftWet = _mixRightWet = 1;
_mixLeftDry = _mixRightDry = 1;
_feedbackPhase = 1;
);
_paramMix == 1 ? ( //stereo
_mixLeftWet = 1;
_mixLeftDry = 1;
_mixRightWet = -1;
_mixRightDry = 1;
_feedbackPhase = 1;
);
_paramMix == 2 ? ( //mono minus
_mixLeftWet = _mixRightWet = 1;
_mixLeftDry = _mixRightDry = 1;
_feedbackPhase = -1;
);
_paramMix == 3 ? ( //stereo minus
_mixLeftWet = 1;
_mixLeftDry = 1;
_mixRightWet = -1;
_mixRightDry = 1;
_feedbackPhase = -1;
);
_paramMix == 4 ? ( //mono wet only
_mixLeftWet = _mixRightWet = 1;
_mixLeftDry = _mixRightDry = 0;
_feedbackPhase = 1;
);
_paramMix == 5 ? ( //stereo wet only
_mixLeftWet = 1;
_mixLeftDry = 0;
_mixRightWet = -1;
_mixRightDry = 0;
_feedbackPhase = 1;
);
_paramMix == 6 ? ( //mono wet only minus
_mixLeftWet = _mixRightWet = 1;
_mixLeftDry = _mixRightDry = 0;
_feedbackPhase = -1;
);
_paramMix == 7 ? ( //stereo wet only minus
_mixLeftWet = 1;
_mixLeftDry = 0;
_mixRightWet = -1;
_mixRightDry = 0;
_feedbackPhase = -1;
);

coef = (1 - _wp) / (1 + _wp);		// calc coef for current freq

inval = (spl0 + spl1)*0.5;

_paramStages == 0 ? (
inmix = inval + tanh( _paramFeedback * 0.01 * _feedbackPhase * _ly2);

// run thru the all pass filters
_ly1 = coef * (_ly1 + inmix) - _lx1;		// do 1st filter
_lx1 = inmix;
_ly2 = coef * (_ly2 + _ly1) - _lx2;		// do 2nd filter
_lx2 = _ly1;

// develop output mix
slider9 ? (
out0 = min(max(_mixLeftDry * inval + _mixLeftWet * _ly2,-0.99), 0.99);
out1 = min(max(_mixRightDry * inval + _mixRightWet * _ly2,-0.99), 0.99);
):(
out0 = tanh(_mixLeftDry * inval + _mixLeftWet * _ly2);
out1 = tanh(_mixRightDry * inval + _mixRightWet * _ly2);
);
);

_paramStages == 1 ? (
inmix = inval + tanh(_paramFeedback * 0.01 * _feedbackPhase * _ly4);

// run thru the all pass filters
_ly1 = coef * (_ly1 + inmix) - _lx1;		// do 1st filter
_lx1 = inmix;
_ly2 = coef * (_ly2 + _ly1) - _lx2;		// do 2nd filter
_lx2 = _ly1;
_ly3 = coef * (_ly3 + _ly2) - _lx3;		// do 3rd filter
_lx3 = _ly2;
_ly4 = coef * (_ly4 + _ly3) - _lx4;		// do 4th filter
_lx4 = _ly3;

// develop output mix
slider9 ? (
out0 = min(max(_mixLeftDry * inval + _mixLeftWet * _ly4,-0.99), 0.99);
out1 = min(max(_mixRightDry * inval + _mixRightWet * _ly4,-0.99), 0.99);
):(
out0 = tanh(_mixLeftDry * inval + _mixLeftWet * _ly4);
out1 = tanh(_mixRightDry * inval + _mixRightWet * _ly4);
);
);

_paramStages == 2 ? (
inmix = inval + tanh(_paramFeedback * 0.01 * _feedbackPhase * _ly6);

// run thru the all pass filters
_ly1 = coef * (_ly1 + inmix) - _lx1;		// do 1st filter
_lx1 = inmix;
_ly2 = coef * (_ly2 + _ly1) - _lx2;		// do 2nd filter
_lx2 = _ly1;
_ly3 = coef * (_ly3 + _ly2) - _lx3;		// do 3rd filter
_lx3 = _ly2;
_ly4 = coef * (_ly4 + _ly3) - _lx4;		// do 4th filter
_lx4 = _ly3;
_ly5 = coef * (_ly5 + _ly4) - _lx5;		// do 5th filter
_lx5 = _ly4;
_ly6 = coef * (_ly6 + _ly5) - _lx6;		// do 6th filter
_lx6 = _ly5;

// develop output mix
slider9 ? (
out0 = min(max(_mixLeftDry * inval + _mixLeftWet * _ly6,-0.99), 0.99);
out1 = min(max(_mixRightDry * inval + _mixRightWet * _ly6,-0.99), 0.99);
):(
out0 = tanh(_mixLeftDry * inval + _mixLeftWet * _ly6);
out1 = tanh(_mixRightDry * inval + _mixRightWet * _ly6);
);
);

_paramStages == 3 ? (
inmix = inval + tanh(_paramFeedback * 0.01 * _feedbackPhase * _ly8);

// run thru the all pass filters
_ly1 = coef * (_ly1 + inmix) - _lx1;		// do 1st filter
_lx1 = inmix;
_ly2 = coef * (_ly2 + _ly1) - _lx2;		// do 2nd filter
_lx2 = _ly1;
_ly3 = coef * (_ly3 + _ly2) - _lx3;		// do 3rd filter
_lx3 = _ly2;
_ly4 = coef * (_ly4 + _ly3) - _lx4;		// do 4th filter
_lx4 = _ly3;
_ly5 = coef * (_ly5 + _ly4) - _lx5;		// do 5th filter
_lx5 = _ly4;
_ly6 = coef * (_ly6 + _ly5) - _lx6;		// do 6th filter
_lx6 = _ly5;
_ly7 = coef * (_ly7 + _ly6) - _lx7;		// do 7th filter
_lx7 = _ly6;
_ly8 = coef * (_ly8 + _ly7) - _lx8;		// do 8th filter
_lx8 = _ly7;

// develop output mix
slider9 ? (
out0 = min(max(_mixLeftDry * inval + _mixLeftWet * _ly8,-0.99), 0.99);
out1 = min(max(_mixRightDry * inval + _mixRightWet * _ly8,-0.99), 0.99);
):(
out0 = tanh(_mixLeftDry * inval + _mixLeftWet * _ly8);
out1 = tanh(_mixRightDry * inval + _mixRightWet * _ly8);
);
);

_paramStages == 4 ? (
inmix = inval + tanh(_paramFeedback * 0.01 * _feedbackPhase * _ly10);

// run thru the all pass filters
_ly1 = coef * (_ly1 + inmix) - _lx1;		// do 1st filter
_lx1 = inmix;
_ly2 = coef * (_ly2 + _ly1) - _lx2;		// do 2nd filter
_lx2 = _ly1;
_ly3 = coef * (_ly3 + _ly2) - _lx3;		// do 3rd filter
_lx3 = _ly2;
_ly4 = coef * (_ly4 + _ly3) - _lx4;		// do 4th filter
_lx4 = _ly3;
_ly5 = coef * (_ly5 + _ly4) - _lx5;		// do 5th filter
_lx5 = _ly4;
_ly6 = coef * (_ly6 + _ly5) - _lx6;		// do 6th filter
_lx6 = _ly5;
_ly7 = coef * (_ly7 + _ly6) - _lx7;		// do 7th filter
_lx7 = _ly6;
_ly8 = coef * (_ly8 + _ly7) - _lx8;		// do 8th filter
_lx8 = _ly7;
_ly9 = coef * (_ly9 + _ly8) - _lx9;		// do 9th filter
_lx9 = _ly8;
_ly10 = coef * (_ly10 + _ly9) - _lx10;		// do 10th filter
_lx10 = _ly9;

// develop output mix
slider9 ? (
out0 = min(max(_mixLeftDry * inval + _mixLeftWet * _ly10,-0.99), 0.99);
out1 = min(max(_mixRightDry * inval + _mixRightWet * _ly10,-0.99), 0.99);
):(
out0 = tanh(_mixLeftDry * inval + _mixLeftWet * _ly10);
out1 = tanh(_mixRightDry * inval + _mixRightWet * _ly10);
);
);

// step the sweep
_wp *= _sweepFactor;			// adjust freq of filters
(_wp > _maxwp || _wp < _minwp) ? (		// max or min ?
_sweepFactor = 1 / _sweepFactor;		// reverse
);

_paramMix > 3 ? (
spl0 = (spl0*mix + out0*(1-mix))*output;
spl1 = (spl1*mix + out1*(1-mix))*output;
):(
spl0 = out0*output*0.707;
spl1 = out1*output*0.707;
);
