home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 February / PCWorld_2008-02_cd.bin / audio-video / reaper / reaper2028-install.exe / Effects / SStillwell / fairlychildish2 < prev    next >
Text File  |  2007-12-03  |  9KB  |  304 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. desc:compressor/limiter, similar to F670
  25.  
  26. slider1:0<-60,0,0.1>L/Lat Threshold (dB)
  27. slider2:0<-60,0,0.1>R/Vert Threshold (dB)
  28. slider3:70<0,100,0.1>L/Lat Bias
  29. slider4:70<0,100,0.1>R/Vert Bias
  30. slider5:0<-30,30,0.1>L/Lat Makeup gain
  31. slider6:0<-30,30,0.1>R/Vert Makeup gain
  32. slider7:0<0,1,1{Left/Right,Lat/Vert}>AGC
  33. slider8:1<1,6,1>L/Lat Time Constant
  34. slider9:1<1,6,1>R/Vert Time Constant
  35. slider10:100<1,10000,1>L/Lat RMS window
  36. slider11:100<1,10000,1>R/Vert RMS window
  37. //slider13:1<1,50,0.1>L/Lat Current comp. ratio
  38. //slider14:1<1,50,0.1>R/Vert Current comp. ratio
  39. //slider15:0<-90,0,0.1>L/Lat Gain reduction
  40. //slider16:0<-90,0,0.1>R/Vert Gain reduction
  41.  
  42. @init
  43.   log2db = 8.6858896380650365530225783783321; // 20 / ln(10)
  44.   db2log = 0.11512925464970228420089957273422; // ln(10) / 20 
  45.   i=0;
  46.   lattime=0.0002; //200us
  47.   lreltime=0.300; //300ms
  48.   lrmstime=0.000050; //50us
  49.   lmaxover=0;
  50.   lratio=0;
  51.   lcratio=0;
  52.   lrundb=0;
  53.   loverdb=0;
  54.   lmaxover=0;
  55.   latcoef=exp(-1/(attime * srate));
  56.   lrelcoef=exp(-1/(reltime * srate));
  57.   lrmscoef=exp(-1/(rmstime * srate));
  58.   rattime=0.0002; //200us
  59.   rreltime=0.300; //300ms
  60.   rrmstime=0.000050; //50us
  61.   rmaxover=0;
  62.   rratio=0;
  63.   rcratio=0;
  64.   rrundb=0;
  65.   roverdb=0;
  66.   rmaxover=0;
  67.   ratcoef=exp(-1/(attime * srate));
  68.   rrelcoef=exp(-1/(reltime * srate));
  69.   rrmscoef=exp(-1/(rmstime * srate));
  70.   leftright = 0;
  71.   latvert = 1;
  72.  
  73. @slider
  74.   agc = slider7;
  75.  
  76.   agc == leftright ? (
  77.     lthresh = slider1;
  78.     lthreshv = exp(lthresh * db2log);
  79.     lratio = 20;
  80.     lbias = 80 * slider3 / 100;
  81.     lcthresh = lthresh - lbias;
  82.     lcthreshv = exp(lcthresh * db2log);
  83.     lmakeup = slider5;
  84.     lmakeupv = exp(lmakeup * db2log);
  85.     ltimeconstant = slider8;
  86.     ltimeconstant == 1 ? (
  87.       lattime = 0.0002;
  88.       lreltime = 0.300;
  89.     );
  90.     ltimeconstant == 2 ? (
  91.       lattime = 0.0002;
  92.       lreltime = 0.800;
  93.     );
  94.     ltimeconstant == 3 ? (
  95.       lattime = 0.0004;
  96.       lreltime = 2.000;
  97.     );
  98.     ltimeconstant == 4 ? (
  99.       lattime = 0.0008;
  100.       lreltime = 5.000;
  101.     );
  102.     ltimeconstant == 5 ? (
  103.       lattime = 0.0002;
  104.       lreltime = 10.000;
  105.     );
  106.     ltimeconstant == 6 ? (
  107.       lattime = 0.0004;
  108.       lreltime = 25.000;
  109.     );
  110.     latcoef = exp(-1 / (lattime * srate));
  111.     lrelcoef = exp(-1 / (lreltime * srate));
  112.     
  113.     lrmstime = slider10 / 1000000; 
  114.     lrmscoef=exp(-1/(lrmstime * srate));
  115.  
  116.     slider2 = slider1;
  117.     slider4 = slider3;
  118.     slider6 = slider5;
  119.     slider9 = slider8;
  120.     slider11 = slider10;
  121.   ) : (
  122.     lthresh = slider1;
  123.     lthreshv = exp(lthresh * db2log);
  124.     lratio = 20;
  125.     lbias = 80 * slider3 / 100;
  126.     lcthresh = lthresh - lbias;
  127.     lcthreshv = exp(lcthresh * db2log);
  128.     lmakeup = slider5;
  129.     lmakeupv = exp(lmakeup * db2log);
  130.     ltimeconstant = slider8;
  131.     ltimeconstant == 1 ? (
  132.       lattime = 0.0002;
  133.       lreltime = 0.300;
  134.     );
  135.     ltimeconstant == 2 ? (
  136.       lattime = 0.0002;
  137.       lreltime = 0.800;
  138.     );
  139.     ltimeconstant == 3 ? (
  140.       lattime = 0.0004;
  141.       lreltime = 2.000;
  142.     );
  143.     ltimeconstant == 4 ? (
  144.       lattime = 0.0008;
  145.       lreltime = 5.000;
  146.     );
  147.     ltimeconstant == 5 ? (
  148.       lattime = 0.0002;
  149.       lreltime = 10.000;
  150.     );
  151.     ltimeconstant == 6 ? (
  152.       lattime = 0.0004;
  153.       lreltime = 25.000;
  154.     );
  155.     latcoef = exp(-1 / (lattime * srate));
  156.     lrelcoef = exp(-1 / (lreltime * srate));
  157.     
  158.     lrmstime = slider10 / 1000000; 
  159.     lrmscoef=exp(-1/(lrmstime * srate));
  160.     rthresh = slider2;
  161.     rthreshv = exp(rthresh * db2log);
  162.     rratio = 20;
  163.     rbias = 80 * slider4 / 100;
  164.     rcthresh = rthresh - rbias;
  165.     rcthreshv = exp(rcthresh * db2log);
  166.     rmakeup = slider6;
  167.     rmakeupv = exp(rmakeup * db2log);
  168.     rtimeconstant = slider9;
  169.     rtimeconstant == 1 ? (
  170.       rattime = 0.0002;
  171.       rreltime = 0.300;
  172.     );
  173.     rtimeconstant == 2 ? (
  174.       rattime = 0.0002;
  175.       rreltime = 0.800;
  176.     );
  177.     rtimeconstant == 3 ? (
  178.       rattime = 0.0004;
  179.       rreltime = 2.000;
  180.     );
  181.     rtimeconstant == 4 ? (
  182.       rattime = 0.0008;
  183.       rreltime = 5.000;
  184.     );
  185.     rtimeconstant == 5 ? (
  186.       rattime = 0.0002;
  187.       rreltime = 10.000;
  188.     );
  189.     rtimeconstant == 6 ? (
  190.       rattime = 0.0004;
  191.       rreltime = 25.000;
  192.     );
  193.     ratcoef = exp(-1 / (rattime * srate));
  194.     rrelcoef = exp(-1 / (rreltime * srate));
  195.     
  196.     rrmstime = slider11 / 1000000; 
  197.     rrmscoef=exp(-1/(rrmstime * srate));
  198.   );
  199.  
  200. @sample
  201.   agc == leftright ? (
  202.     aspl0 = abs(spl0);
  203.     aspl1 = abs(spl1);
  204.     lmaxspl = max(aspl0, aspl1);
  205.     lmaxspl = lmaxspl * lmaxspl;
  206.  
  207.     lrunave = lmaxspl + lrmscoef * (lrunave - lmaxspl);
  208.     ldet = sqrt(max(0,lrunave));
  209.  
  210.     loverdb = 2.08136898 * log(ldet/lthreshv) * log2db;
  211.     loverdb = max(0,loverdb);
  212.  
  213.     loverdb > lrundb ? (
  214.       lrundb = loverdb + latcoef * (lrundb - loverdb);
  215.     ) : (
  216.       lrundb = loverdb + lrelcoef * (lrundb - loverdb);
  217.     );
  218.     loverdb = max(lrundb,0);
  219.  
  220.     lbias == 0 ? (
  221.       lcratio = lratio;
  222.     ) : (
  223.       lcratio = 1 + (lratio-1) * sqrt((loverdb + dcoffset) / (lbias + dcoffset));
  224.     );
  225.     //slider13 = lcratio;
  226.     //slider14 = lcratio;
  227.   
  228.     lgr = -loverdb * (lcratio-1)/lcratio;
  229.     //slider15 = -lgr;
  230.     //slider16 = -lgr;
  231.     lgrv = exp(lgr * db2log);
  232.   
  233.   ) : (  
  234.     aspl0 = abs(spl0+spl1)/2;
  235.     aspl1 = abs(spl0-spl1)/2;
  236.     lmaxspl = aspl0;
  237.     lmaxspl = lmaxspl * lmaxspl;
  238.  
  239.     lrunave = lmaxspl + lrmscoef * (lrunave - lmaxspl);
  240.     ldet = sqrt(max(0,lrunave));
  241.  
  242.     loverdb = 2.08136898 * log(ldet/lthreshv) * log2db;
  243.     loverdb = max(0,loverdb);
  244.  
  245.     loverdb > lrundb ? (
  246.       lrundb = loverdb + latcoef * (lrundb - loverdb);
  247.     ) : (
  248.       lrundb = loverdb + lrelcoef * (lrundb - loverdb);
  249.     );
  250.     loverdb = max(lrundb,0);
  251.  
  252.     lbias == 0 ? (
  253.       lcratio = lratio;
  254.     ) : (
  255.       lcratio = 1 + (lratio-1) * sqrt((loverdb + dcoffset) / (lbias + dcoffset));
  256.     );
  257.  
  258.     rmaxspl = aspl1;
  259.     rmaxspl = rmaxspl * rmaxspl;
  260.  
  261.     rrunave = rmaxspl + rrmscoef * (rrunave - rmaxspl);
  262.     rdet = sqrt(max(0,rrunave));
  263.  
  264.     roverdb = 2.08136898 * log(rdet/rthreshv) * log2db;
  265.     roverdb = max(0,roverdb);
  266.  
  267.     roverdb > rrundb ? (
  268.       rrundb = roverdb + ratcoef * (rrundb - roverdb);
  269.     ) : (
  270.       rrundb = roverdb + rrelcoef * (rrundb - roverdb);
  271.     );
  272.     roverdb = max(rrundb,0);
  273.  
  274.     rbias == 0 ? (
  275.       rcratio = rratio;
  276.     ) : (
  277.       rcratio = 1 + (rratio-1) * sqrt((roverdb + dcoffset) / (rbias + dcoffset));
  278.     );
  279.  
  280.     //slider13 = lcratio;
  281.     //slider14 = rcratio;
  282.   
  283.     lgr = -loverdb * (lcratio-1)/lcratio;
  284.     rgr = -roverdb * (rcratio-1)/rcratio;
  285.     //slider15 = -lgr;
  286.     //slider16 = -rgr;
  287.     lgrv = exp(lgr * db2log);
  288.     rgrv = exp(rgr * db2log);
  289.   
  290.   );
  291.  
  292.   agc == leftright ? (
  293.     spl0 *= lgrv * lmakeupv;
  294.     spl1 *= lgrv * lmakeupv;
  295.   ) : (
  296.     sav0 = (spl0 + spl1) * lgrv;
  297.     sav1 = (spl0 - spl1) * rgrv;
  298.     sav0 *= lmakeupv;
  299.     sav1 *= rmakeupv;
  300.     spl0 = (sav0 + sav1) * 0.5;
  301.     spl1 = (sav0 - sav1) * 0.5;
  302.   );
  303.  
  304.