home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 February / PCWorld_2008-02_cd.bin / audio-video / reaper / reaper2028-install.exe / Effects / Teej / rbj4notch-teej < prev   
Text File  |  2007-12-03  |  8KB  |  327 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. //The depth of each notch is customizable by modifying 'notchCut' in line 40.
  29. //The width of each notch is customizable by modifying 'notchQ' in line 41.
  30. //The boost provided by the Sweep slider is customizable by modifying 'sweepBoost' in line 42.
  31. //The width of of the Sweep boost is customizable by modifying 'sweepQ' in line 43.
  32.  
  33. desc:4-band notch filter, based on RBJ Filter Cookbook
  34.  
  35. slider1:0<0,400,1>HPF:
  36. slider2:0<0,10000,5>Sweep:
  37. slider3:0<0,10000,5>Notch 1:
  38. slider4:0<0,10000,5>Notch 2:
  39. slider5:0<0,10000,5>Notch 3:
  40. slider6:0<0,10000,5>Notch 4:
  41. slider7:22000<400,22000,5>LPF:
  42. slider8:0<-12,12,0.5>Output Gain:
  43.  
  44.  
  45. @init
  46.   cDcAdd = 10^-30;
  47.   cDenorm = 10^-30;
  48.   notchCut = -9;
  49.   notchQ = 8;
  50.   sweepBoost = 9;
  51.   sweepQ = 2;
  52.  
  53.  
  54. @slider
  55.  
  56.   gain = 10^(slider8/20);
  57.  
  58.   aHPF = 1;
  59.   sHPF = 1;
  60.   qHPF = 1 / (sqrt((aHPF + 1/aHPF)*(1/sHPF - 1) + 2));
  61.   w0HPF = 2 * $pi * slider1/srate;
  62.   cosw0HPF = cos(w0HPF);
  63.   sinw0HPF = sin(w0HPF);
  64.   alphaHPF = sinw0HPF / (2 * qHPF);
  65.  
  66.   b0HPF = (1 + cosw0HPF)/2;
  67.   b1HPF = -(1 + cosw0HPF);
  68.   b2HPF = (1 + cosw0HPF)/2;
  69.   a0HPF = 1 + alphaHPF;
  70.   a1HPF = -2 * cosw0HPF;
  71.   a2HPF = 1 - alphaHPF;
  72.   b0HPF /= a0HPF;
  73.   b1HPF /= a0HPF;
  74.   b2HPF /= a0HPF;
  75.   a1HPF /= a0HPF;
  76.   a2HPF /= a0HPF;
  77.  
  78.  
  79.   aSWP = (10^(sweepBoost/40));
  80.   qSWP = sweepQ;
  81.   w0SWP = 2 * $pi * slider2/srate;
  82.   cosw0SWP = cos(w0SWP);
  83.   sinw0SWP = sin(w0SWP);
  84.   alphaSWP = sinw0SWP / (2 * qSWP);
  85.  
  86.   b0SWP = 1 + alphaSWP * aSWP;
  87.   b1SWP = -2 * cosw0SWP;
  88.   b2SWP = 1 - alphaSWP * aSWP;
  89.   a0SWP = 1 + alphaSWP / aSWP;
  90.   a1SWP = -2 * cosw0SWP;
  91.   a2SWP = 1 - alphaSWP / aSWP;
  92.   b0SWP /= a0SWP;
  93.   b1SWP /= a0SWP;
  94.   b2SWP /= a0SWP;
  95.   a1SWP /= a0SWP;
  96.   a2SWP /= a0SWP;
  97.  
  98.  
  99.   aA = (10^(notchCut/40));
  100.   qA = notchQ;
  101.   w0A = 2 * $pi * slider3/srate;
  102.   cosw0A = cos(w0A);
  103.   sinw0A = sin(w0A);
  104.   alphaA = sinw0A / (2 * qA);
  105.  
  106.   b0A = 1 + alphaA * aA;
  107.   b1A = -2 * cosw0A;
  108.   b2A = 1 - alphaA * aA;
  109.   a0A = 1 + alphaA / aA;
  110.   a1A = -2 * cosw0A;
  111.   a2A = 1 - alphaA / aA;
  112.   b0A /= a0A;
  113.   b1A /= a0A;
  114.   b2A /= a0A;
  115.   a1A /= a0A;
  116.   a2A /= a0A;
  117.  
  118.  
  119.   aB = (10^(notchCut/40));
  120.   qB = notchQ;
  121.   w0B = 2 * $pi * slider4/srate;
  122.   cosw0B = cos(w0B);
  123.   sinw0B = sin(w0B);
  124.   alphaB = sinw0B / (2 * qB);
  125.  
  126.   b0B = 1 + alphaB * aB;
  127.   b1B = -2 * cosw0B;
  128.   b2B = 1 - alphaB * aB;
  129.   a0B = 1 + alphaB / aB;
  130.   a1B = -2 * cosw0B;
  131.   a2B = 1 - alphaB / aB;
  132.   b0B /= a0B;
  133.   b1B /= a0B;
  134.   b2B /= a0B;
  135.   a1B /= a0B;
  136.   a2B /= a0B;
  137.  
  138.  
  139.   aC = (10^(notchCut/40));
  140.   qC = notchQ;
  141.   w0C = 2 * $pi * slider5/srate;
  142.   cosw0C = cos(w0C);
  143.   sinw0C = sin(w0C);
  144.   alphaC = sinw0C / (2 * qC);
  145.  
  146.   b0C = 1 + alphaC * aC;
  147.   b1C = -2 * cosw0C;
  148.   b2C = 1 - alphaC * aC;
  149.   a0C = 1 + alphaC / aC;
  150.   a1C = -2 * cosw0C;
  151.   a2C = 1 - alphaC / aC;
  152.   b0C /= a0C;
  153.   b1C /= a0C;
  154.   b2C /= a0C;
  155.   a1C /= a0C;
  156.   a2C /= a0C;
  157.  
  158.  
  159.   aD = (10^(notchCut/40));
  160.   qD = notchQ;
  161.   w0D = 2 * $pi * slider6/srate;
  162.   cosw0D = cos(w0D);
  163.   sinw0D = sin(w0D);
  164.   alphaD = sinw0D / (2 * qD);
  165.  
  166.   b0D = 1 + alphaD * aD;
  167.   b1D = -2 * cosw0D;
  168.   b2D = 1 - alphaD * aD;
  169.   a0D = 1 + alphaD / aD;
  170.   a1D = -2 * cosw0D;
  171.   a2D = 1 - alphaD / aD;
  172.   b0D /= a0D;
  173.   b1D /= a0D;
  174.   b2D /= a0D;
  175.   a1D /= a0D;
  176.   a2D /= a0D;
  177.  
  178.  
  179.   aLPF = 1;
  180.   sLPF = 2;
  181.   qLPF = 1 / (sqrt((aLPF + 1/aLPF)*(1/sLPF - 1) + 2));
  182.   w0LPF = 2 * $pi * slider7/srate;
  183.   cosw0LPF = cos(w0LPF);
  184.   sinw0LPF = sin(w0LPF);
  185.   alphaLPF = sinw0LPF / (2 * qLPF);
  186.  
  187.   b0LPF = (1 - cosw0LPF)/2;
  188.   b1LPF = (1 - cosw0LPF);
  189.   b2LPF = (1 - cosw0LPF)/2;
  190.   a0LPF = 1 + alphaLPF;
  191.   a1LPF = -2 * cosw0LPF;
  192.   a2LPF = 1 - alphaLPF;
  193.   b0LPF /= a0LPF;
  194.   b1LPF /= a0LPF;
  195.   b2LPF /= a0LPF;
  196.   a1LPF /= a0LPF;
  197.   a2LPF /= a0LPF;
  198.  
  199. @sample
  200.  
  201.  
  202.   slider1 != 0 ? (
  203.   osplHPF = spl0;
  204.   spl0 = b0HPF * spl0 + b1HPF * xl1HPF + b2HPF * xl2HPF - a1HPF * yl1HPF - a2HPF * yl2HPF;
  205.   xl2HPF = xl1HPF;
  206.   xl1HPF = osplHPF;
  207.   yl2HPF = yl1HPF;
  208.   yl1HPF = abs(spl0) < cDenorm ? 0 : spl0;
  209.  
  210.   ospl1 = spl1;
  211.   spl1 = b0HPF * spl1 + b1HPF * xr1HPF + b2HPF * xr2HPF - a1HPF * yr1HPF - a2HPF * yr2HPF;
  212.   xr2HPF = xr1HPF;
  213.   xr1HPF = ospl1;
  214.   yr2HPF = yr1HPF;
  215.   yr1HPF = abs(spl1) < cDenorm ? 0 : spl1;
  216.   );
  217.   
  218.  
  219.   spl0 += cDcAdd;
  220.   spl1 += cDcAdd;
  221.  
  222.  
  223.   slider2 != 0 ? (
  224.   ospl0 = spl0;
  225.   spl0 = b0SWP * spl0 + b1SWP * xl1SWP + b2SWP * xl2SWP - a1SWP * yl1SWP - a2SWP * yl2SWP;
  226.   xl2SWP = xl1SWP;
  227.   xl1SWP = ospl0;
  228.   yl2SWP = yl1SWP;
  229.   yl1SWP = spl0;
  230.  
  231.   ospl1 = spl1;
  232.   spl1 = b0SWP * spl1 + b1SWP * xr1SWP + b2SWP * xr2SWP - a1SWP * yr1SWP - a2SWP * yr2SWP;
  233.   xr2SWP = xr1SWP;
  234.   xr1SWP = ospl1;
  235.   yr2SWP = yr1SWP;
  236.   yr1SWP = spl1;
  237.   );
  238.  
  239.  
  240.   slider3 != 0 ? (
  241.   ospl0 = spl0;
  242.   spl0 = b0A * spl0 + b1A * xl1A + b2A * xl2A - a1A * yl1A - a2A * yl2A;
  243.   xl2A = xl1A;
  244.   xl1A = ospl0;
  245.   yl2A = yl1A;
  246.   yl1A = spl0;
  247.  
  248.   ospl1 = spl1;
  249.   spl1 = b0A * spl1 + b1A * xr1A + b2A * xr2A - a1A * yr1A - a2A * yr2A;
  250.   xr2A = xr1A;
  251.   xr1A = ospl1;
  252.   yr2A = yr1A;
  253.   yr1A = spl1;
  254.   );
  255.  
  256.  
  257.   slider4 != 0? (
  258.   ospl0 = spl0;
  259.   spl0 = b0B * spl0 + b1B * xl1B + b2B * xl2B - a1B * yl1B - a2B * yl2B;
  260.   xl2B = xl1B;
  261.   xl1B = ospl0;
  262.   yl2B = yl1B;
  263.   yl1B = spl0;
  264.  
  265.   ospl1 = spl1;
  266.   spl1 = b0B * spl1 + b1B * xr1B + b2B * xr2B - a1B * yr1B - a2B * yr2B;
  267.   xr2B = xr1B;
  268.   xr1B = ospl1;
  269.   yr2B = yr1B;
  270.   yr1B = spl1;
  271.   );
  272.  
  273.  
  274.   slider5 != 0? (
  275.   ospl0 = spl0;
  276.   spl0 = b0C * spl0 + b1C * xl1C + b2C * xl2C - a1C * yl1C - a2C * yl2C;
  277.   xl2C = xl1C;
  278.   xl1C = ospl0;
  279.   yl2C = yl1C;
  280.   yl1C = spl0;
  281.  
  282.   ospl1 = spl1;
  283.   spl1 = b0C * spl1 + b1C * xr1C + b2C * xr2C - a1C * yr1C - a2C * yr2C;
  284.   xr2C = xr1C;
  285.   xr1C = ospl1;
  286.   yr2C = yr1C;
  287.   yr1C = spl1;
  288.   );
  289.  
  290.  
  291.   slider6 != 0? (
  292.   ospl0 = spl0;
  293.   spl0 = b0D * spl0 + b1D * xl1D + b2D * xl2D - a1D * yl1D - a2D * yl2D;
  294.   xl2D = xl1D;
  295.   xl1D = ospl0;
  296.   yl2D = yl1D;
  297.   yl1D = spl0;
  298.  
  299.   ospl1 = spl1;
  300.   spl1 = b0D * spl1 + b1D * xr1D + b2D * xr2D - a1D * yr1D - a2D * yr2D;
  301.   xr2D = xr1D;
  302.   xr1D = ospl1;
  303.   yr2D = yr1D;
  304.   yr1D = spl1;
  305.   );
  306.  
  307.  
  308.   slider7 != 22000 ? (
  309.   ospl0 = spl0;
  310.   spl0 = b0LPF * spl0 + b1LPF * xl1LPF + b2LPF * xl2LPF - a1LPF * yl1LPF - a2LPF * yl2LPF;
  311.   xl2LPF = xl1LPF;
  312.   xl1LPF = ospl0;
  313.   yl2LPF = yl1LPF;
  314.   yl1LPF = spl0;
  315.  
  316.   ospl1 = spl1;
  317.   spl1 = b0LPF * spl1 + b1LPF * xr1LPF + b2LPF * xr2LPF - a1LPF * yr1LPF - a2LPF * yr2LPF;
  318.   xr2LPF = xr1LPF;
  319.   xr1LPF = ospl1;
  320.   yr2LPF = yr1LPF;
  321.   yr1LPF = spl1;
  322.   );
  323.  
  324.  
  325.   spl0 *= gain;
  326.   spl1 *= gain;
  327.