home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 July & August / PCWorld_2007-07-08_cd.bin / audio-video / reaper / reaper1861-install.exe / Effects / Teej / rbj4eq-teej < prev    next >
Text File  |  2007-02-22  |  7KB  |  281 lines

  1. // Copyright 2006, Thomas Scott Stillwell
  2. // All rights reserved.
  3. //
  4. //Redistribution and use in source and binary forms, with or without modification, are permitted 
  5. //provided that the following conditions are met:
  6. //
  7. //Redistributions of source code must retain the above copyright notice, this list of conditions 
  8. //and the following disclaimer. 
  9. //
  10. //Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
  11. //and the following disclaimer in the documentation and/or other materials provided with the distribution. 
  12. //
  13. //The name of Thomas Scott Stillwell may not be used to endorse or 
  14. //promote products derived from this software without specific prior written permission. 
  15. //
  16. //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR 
  17. //IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
  18. //FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 
  19. //BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
  20. //(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
  21. //PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
  22. //STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
  23. //THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  24. //
  25. //
  26. //This modified version of the fabulous SS:rbj4eq is presented by TJ Higley.  (2/18/07)
  27. //
  28. desc:4-band semi-parametric EQ, based on RBJ Filter Cookbook
  29.  
  30. slider1:0<0,400,5>HPF:
  31. slider2:0<0,10000,1>Freq 1:
  32. slider3:1<.5,10,0.1>Q 1:
  33. slider4:0<-12,6,0.5>Gain 1:
  34. slider5:0<0,10000,1>Freq 2:
  35. slider6:1<.5,10,0.1>Q 2:
  36. slider7:0<-12,6,0.5>Gain 2:
  37. slider8:0<0,10000,1>Freq 3:
  38. slider9:1<.5,10,0.1>Q 3:
  39. slider10:0<-12,6,0.5>Gain 3:
  40. slider11:0<0,10000,1>Freq 4:
  41. slider12:1<.5,10,0.1>Q 4:
  42. slider13:0<-12,6,0.5>Gain 4:
  43. slider14:22000<400,22000,5>LPF:
  44. slider15:0<-12,12,0.5>Output Gain:
  45.  
  46. @init
  47.   cDcAdd = 10^-30;
  48.   cDenorm = 10^-30;
  49.  
  50.  
  51. @slider
  52.  
  53.   gain = 10^(slider15/20);
  54.  
  55.   a0 = 1;
  56.   s0 = 1;
  57.   q0 = 1 / (sqrt((a0 + 1/a0)*(1/s0 - 1) + 2));
  58.   w00 = 2 * $pi * slider1/srate;
  59.   cosw00 = cos(w00);
  60.   sinw00 = sin(w00);
  61.   alpha0 = sinw00 / (2 * q0);
  62.  
  63.   b00 = (1 + cosw00)/2;
  64.   b10 = -(1 + cosw00);
  65.   b20 = (1 + cosw00)/2;
  66.   a00 = 1 + alpha0;
  67.   a10 = -2 * cosw00;
  68.   a20 = 1 - alpha0;
  69.   b00 /= a00;
  70.   b10 /= a00;
  71.   b20 /= a00;
  72.   a10 /= a00;
  73.   a20 /= a00;
  74.  
  75.   a1 = (10^(slider4/40));
  76.   q1 = slider3;
  77.   w01 = 2 * $pi * slider2/srate;
  78.   cosw01 = cos(w01);
  79.   sinw01 = sin(w01);
  80.   alpha1 = sinw01 / (2 * q1);
  81.  
  82.   b01 = 1 + alpha1 * a1;
  83.   b11 = -2 * cosw01;
  84.   b21 = 1 - alpha1 * a1;
  85.   a01 = 1 + alpha1 / a1;
  86.   a11 = -2 * cosw01;
  87.   a21 = 1 - alpha1 / a1;
  88.   b01 /= a01;
  89.   b11 /= a01;
  90.   b21 /= a01;
  91.   a11 /= a01;
  92.   a21 /= a01;
  93.  
  94.   a3 = (10^(slider7/40));
  95.   q3 = slider6;
  96.   w03 = 2 * $pi * slider5/srate;
  97.   cosw03 = cos(w03);
  98.   sinw03 = sin(w03);
  99.   alpha3 = sinw03 / (2 * q3);
  100.  
  101.   b03 = 1 + alpha3 * a3;
  102.   b13 = -2 * cosw03;
  103.   b23 = 1 - alpha3 * a3;
  104.   a03 = 1 + alpha3 / a3;
  105.   a13 = -2 * cosw03;
  106.   a23 = 1 - alpha3 / a3;
  107.   b03 /= a03;
  108.   b13 /= a03;
  109.   b23 /= a03;
  110.   a13 /= a03;
  111.   a23 /= a03;
  112.  
  113.   a5 = (10^(slider10/40));
  114.   q5 = slider9;
  115.   w05 = 2 * $pi * slider8/srate;
  116.   cosw05 = cos(w05);
  117.   sinw05 = sin(w05);
  118.   alpha5 = sinw05 / (2 * q5);
  119.  
  120.   b05 = 1 + alpha5 * a5;
  121.   b15 = -2 * cosw05;
  122.   b25 = 1 - alpha5 * a5;
  123.   a05 = 1 + alpha5 / a5;
  124.   a15 = -2 * cosw05;
  125.   a25 = 1 - alpha5 / a5;
  126.   b05 /= a05;
  127.   b15 /= a05;
  128.   b25 /= a05;
  129.   a15 /= a05;
  130.   a25 /= a05;
  131.  
  132.   a7 = (10^(slider13/40));
  133.   q7 = slider12;
  134.   w07 = 2 * $pi * slider11/srate;
  135.   cosw07 = cos(w07);
  136.   sinw07 = sin(w07);
  137.   alpha7 = sinw07 / (2 * q7);
  138.  
  139.   b07 = 1 + alpha7 * a7;
  140.   b17 = -2 * cosw07;
  141.   b27 = 1 - alpha7 * a7;
  142.   a07 = 1 + alpha7 / a7;
  143.   a17 = -2 * cosw07;
  144.   a27 = 1 - alpha7 / a7;
  145.   b07 /= a07;
  146.   b17 /= a07;
  147.   b27 /= a07;
  148.   a17 /= a07;
  149.   a27 /= a07;
  150.  
  151.  
  152.   a9 = 1;
  153.   s9 = 2;
  154.   q9 = 1 / (sqrt((a9 + 1/a9)*(1/s9 - 1) + 2));
  155.   w09 = 2 * $pi * slider14/srate;
  156.   cosw09 = cos(w09);
  157.   sinw09 = sin(w09);
  158.   alpha9 = sinw09 / (2 * q9);
  159.  
  160.   b09 = (1 - cosw09)/2;
  161.   b19 = (1 - cosw09);
  162.   b29 = (1 - cosw09)/2;
  163.   a09 = 1 + alpha9;
  164.   a19 = -2 * cosw09;
  165.   a29 = 1 - alpha9;
  166.   b09 /= a09;
  167.   b19 /= a09;
  168.   b29 /= a09;
  169.   a19 /= a09;
  170.   a29 /= a09;
  171.  
  172.  
  173.  
  174. @sample
  175.  
  176.   slider1 != 0 ? (
  177.   ospl0 = spl0;
  178.   spl0 = b00 * spl0 + b10 * xl10 + b20 * xl20 - a10 * yl10 - a20 * yl20;
  179.   xl20 = xl10;
  180.   xl10 = ospl0;
  181.   yl20 = yl10;
  182.   yl10 = abs(spl0) < cDenorm ? 0 : spl0;
  183.  
  184.   ospl1 = spl1;
  185.   spl1 = b00 * spl1 + b10 * xr10 + b20 * xr20 - a10 * yr10 - a20 * yr20;
  186.   xr20 = xr10;
  187.   xr10 = ospl1;
  188.   yr20 = yr10;
  189.   yr10 = abs(spl1) < cDenorm ? 0 : spl1;
  190.   );
  191.  
  192.  
  193.   spl0 += cDcAdd;
  194.   spl1 += cDcAdd;
  195.  
  196.  
  197.   slider4 != 0 && slider2 != 0 ? (
  198.   ospl0 = spl0;
  199.   spl0 = b01 * spl0 + b11 * xl11 + b21 * xl21 - a11 * yl11 - a21 * yl21;
  200.   xl21 = xl11;
  201.   xl11 = ospl0;
  202.   yl21 = yl11;
  203.   yl11 = spl0;
  204.  
  205.   ospl1 = spl1;
  206.   spl1 = b01 * spl1 + b11 * xr11 + b21 * xr21 - a11 * yr11 - a21 * yr21;
  207.   xr21 = xr11;
  208.   xr11 = ospl1;
  209.   yr21 = yr11;
  210.   yr11 = spl1;
  211.   );
  212.  
  213.   slider7 && slider5 != 0 ? (
  214.   ospl0 = spl0;
  215.   spl0 = b03 * spl0 + b13 * xl13 + b23 * xl23 - a13 * yl13 - a23 * yl23;
  216.   xl23 = xl13;
  217.   xl13 = ospl0;
  218.   yl23 = yl13;
  219.   yl13 = spl0;
  220.  
  221.   ospl1 = spl1;
  222.   spl1 = b03 * spl1 + b13 * xr13 + b23 * xr23 - a13 * yr13 - a23 * yr23;
  223.   xr23 = xr13;
  224.   xr13 = ospl1;
  225.   yr23 = yr13;
  226.   yr13 = spl1;
  227.   );
  228.  
  229.   slider10 && slider8 != 0 ? (
  230.   ospl0 = spl0;
  231.   spl0 = b05 * spl0 + b15 * xl15 + b25 * xl25 - a15 * yl15 - a25 * yl25;
  232.   xl25 = xl15;
  233.   xl15 = ospl0;
  234.   yl25 = yl15;
  235.   yl15 = spl0;
  236.  
  237.   ospl1 = spl1;
  238.   spl1 = b05 * spl1 + b15 * xr15 + b25 * xr25 - a15 * yr15 - a25 * yr25;
  239.   xr25 = xr15;
  240.   xr15 = ospl1;
  241.   yr25 = yr15;
  242.   yr15 = spl1;
  243.   );
  244.  
  245.   slider13 && slider11 != 0 ? (
  246.   ospl0 = spl0;
  247.   spl0 = b07 * spl0 + b17 * xl17 + b27 * xl27 - a17 * yl17 - a27 * yl27;
  248.   xl27 = xl17;
  249.   xl17 = ospl0;
  250.   yl27 = yl17;
  251.   yl17 = spl0;
  252.  
  253.   ospl1 = spl1;
  254.   spl1 = b07 * spl1 + b17 * xr17 + b27 * xr27 - a17 * yr17 - a27 * yr27;
  255.   xr27 = xr17;
  256.   xr17 = ospl1;
  257.   yr27 = yr17;
  258.   yr17 = spl1;
  259.   );
  260.  
  261.  
  262.   slider14 != 22000 ? (
  263.   ospl0 = spl0;
  264.   spl0 = b09 * spl0 + b19 * xl19 + b29 * xl29 - a19 * yl19 - a29 * yl29;
  265.   xl29 = xl19;
  266.   xl19 = ospl0;
  267.   yl29 = yl19;
  268.   yl19 = spl0;
  269.  
  270.   ospl1 = spl1;
  271.   spl1 = b09 * spl1 + b19 * xr19 + b29 * xr29 - a19 * yr19 - a29 * yr29;
  272.   xr29 = xr19;
  273.   xr19 = ospl1;
  274.   yr29 = yr19;
  275.   yr19 = spl1;
  276.   );
  277.  
  278.  
  279.   spl0 *= gain;
  280.   spl1 *= gain;
  281.