desc:WMW Alpha 0.05
Author: Belovw

slider1:3<0,12>Tolerance %

in_pin:left input
in_pin:right input
out_pin:left output
out_pin:right output

@init
_global.WMW_S == 0 ? (_global.WMW_T=Slider1;_global.WMW_S=1):(slider1=_global.WMW_T);


// dbmax=18
// F=125,400,1250,4000
QI=1;
QO=0.5;


////////////
// BiQuad //
////////////

////////////////////////////////////////////////////////////
                                                          //
function BiQuad(dbmax,F,Q,Tolerance)                      //
Local (A,Ft,w0,Qt,alpha,b0,b1,b2,a0,a1,a2)                //
                                                          //
  (                                                       //
  dbgain=dbmax*rand(1)*Tolerance/100*sign(0.5-rand(1));   //
  A=10^(dbgain/40);                                       //
                                                          //
  Ft=F*(1+rand(1)*0.25*sign(0.5-rand(1)));                //
  w0=2*$pi*Ft/srate;                                      //
                                                          //
  Qt=0.7*(1+rand(1)*Tolerance/100*sign(0.5-rand(1)));     //
  alpha=sin(w0)/(2*Qt);                                   //
                                                          //
  b0 =   1 + alpha*A;                                     //
  b1 =  -2*cos(w0);                                       //
  b2 =   1 - alpha*A;                                     //
  a0 =   1 + alpha/A;                                     //
  a1 =  -2*cos(w0);                                       //
  a2 =   1 - alpha/A;                                     //
                                                          //
  b0p=b0/a0;                                              //
  b1p=b1/a0;                                              //
  b2p=b2/a0;                                              //
  a1p=a1/a0;                                              //
  a2p=a2/a0;                                              //
                                                          //
  );                                                      //
                                                          //
////////////////////////////////////////////////////////////

@slider
_global.WMW_T=Tolerance=slider1;

      biquad(18,125,QO,Tolerance);
      b0p0=b0p; b1p0=b1p; b2p0=b2p; a1p0=a1p; a2p0=a2p;
      
      biquad(18,125,QO,Tolerance);
      b0p1=b0p; b1p1=b1p; b2p1=b2p; a1p1=a1p; a2p1=a2p;
      
      biquad(18,400,QI,Tolerance);
      
      b0p2=b0p; b1p2=b1p; b2p2=b2p; a1p2=a1p; a2p2=a2p;
      biquad(18,400,QI,Tolerance);
      
      b0p3=b0p; b1p3=b1p; b2p3=b2p; a1p3=a1p; a2p3=a2p;
      
      biquad(18,1250,QI,Tolerance);
      b0p4=b0p; b1p4=b1p; b2p4=b2p; a1p4=a1p; a2p4=a2p;
      
      biquad(18,1250,QI,Tolerance);
      b0p5=b0p; b1p5=b1p; b2p5=b2p; a1p5=a1p; a2p5=a2p;
      
      biquad(18,4000,QO,Tolerance);
      b0p6=b0p; b1p6=b1p; b2p6=b2p; a1p6=a1p; a2p6=a2p;
      
      biquad(18,4000,QO,Tolerance);
      b0p7=b0p; b1p7=b1p; b2p7=b2p; a1p7=a1p; a2p7=a2p;
      


@block

@sample
Tolerance != _global.WMW_T ? 
      (slider1=Tolerance=_global.WMW_T;
      
      biquad(18,125,QO,Tolerance);
      b0p0=b0p; b1p0=b1p; b2p0=b2p; a1p0=a1p; a2p0=a2p;
      
      biquad(18,125,QO,Tolerance);
      b0p1=b0p; b1p1=b1p; b2p1=b2p; a1p1=a1p; a2p1=a2p;
      
      biquad(18,400,QI,Tolerance);
      
      b0p2=b0p; b1p2=b1p; b2p2=b2p; a1p2=a1p; a2p2=a2p;
      biquad(18,400,QI,Tolerance);
      
      b0p3=b0p; b1p3=b1p; b2p3=b2p; a1p3=a1p; a2p3=a2p;
      
      biquad(18,1250,QI,Tolerance);
      b0p4=b0p; b1p4=b1p; b2p4=b2p; a1p4=a1p; a2p4=a2p;
      
      biquad(18,1250,QI,Tolerance);
      b0p5=b0p; b1p5=b1p; b2p5=b2p; a1p5=a1p; a2p5=a2p;
      
      biquad(18,4000,QO,Tolerance);
      b0p6=b0p; b1p6=b1p; b2p6=b2p; a1p6=a1p; a2p6=a2p;
      
      biquad(18,4000,QO,Tolerance);
      b0p7=b0p; b1p7=b1p; b2p7=b2p; a1p7=a1p; a2p7=a2p;
      );
        

in0=spl0;
in1=spl1;

out0 = b0p0*in0 + b1p0*in01 + b2p0*in02 - a1p0*out01 - a2p0*out02;
out1 = b0p1*in1 + b1p1*in11 + b2p1*in12 - a1p1*out11 - a2p1*out12;

in02=in01 ; in01=in0 ;
in12=in11 ; in11=in1 ;

out02=out01 ; out01=in0=out0;
out12=out11 ; out11=in1=out1;

out0 = b0p2*in0 + b1p2*in21 + b2p2*in22 - a1p2*out21 - a2p2*out22;
out1 = b0p3*in1 + b1p3*in31 + b2p3*in32 - a1p3*out31 - a2p3*out32;

in22=in21 ; in21=in0 ;
in32=in31 ; in31=in1 ;

out22=out21 ; out21=in0=out0;
out32=out31 ; out31=in1=out1;

out0 = b0p4*in0 + b1p4*in41 + b2p4*in42 - a1p4*out41 - a2p4*out42;
out1 = b0p5*in1 + b1p5*in51 + b2p5*in52 - a1p5*out51 - a2p5*out52;

in42=in41 ; in41=in0 ;
in52=in51 ; in51=in1 ;

out42=out41 ; out41=in0=out0;
out52=out51 ; out51=in1=out1;

out0 = b0p6*in0 + b1p6*in61 + b2p6*in62 - a1p6*out61 - a2p6*out62;
out1 = b0p7*in1 + b1p7*in71 + b2p7*in72 - a1p7*out71 - a2p7*out72;

in62=in61 ; in61=in0 ;
in72=in71 ; in71=in1 ;

out62=out61 ; out61=in0=out0;
out72=out71 ; out71=in1=out1;

spl0=out0;
spl1=out1;

