home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 February / PCWorld_2008-02_cd.bin / audio-video / reaper / reaper2028-install.exe / Effects / SStillwell / fairlychildish < prev    next >
Text File  |  2007-12-03  |  4KB  |  141 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>Threshold (dB)
  27. slider2:70<0.1,100,0.1>Bias
  28. slider3:0<-30,30,0.1>Makeup gain
  29. slider4:0<0,1,1{Left/Right,Lat/Vert}>AGC
  30. slider5:1<1,6,1>Time Constant
  31. slider6:100<1,10000,1>Level detector RMS window
  32. slider7:1<1,50,0.1>Current comp. ratio
  33. slider8:0<-90,0,0.1>Gain reduction
  34.  
  35. @init
  36.   log2db = 8.6858896380650365530225783783321; // 20 / ln(10)
  37.   db2log = 0.11512925464970228420089957273422; // ln(10) / 20 
  38.   i=0;
  39.   attime=0.0002; //200us
  40.   reltime=0.300; //300ms
  41.   rmstime=0.000050; //50us
  42.   maxover=0;
  43.   ratio=0;
  44.   cratio=0;
  45.   rundb=0;
  46.   overdb=0;
  47.   maxover=0;
  48.   atcoef=exp(-1/(attime * srate));
  49.   relcoef=exp(-1/(reltime * srate));
  50.   rmscoef=exp(-1/(rmstime * srate));
  51.   leftright = 0;
  52.   latvert = 1;
  53.  
  54. @slider
  55.   thresh = slider1;
  56.   threshv = exp(thresh * db2log);
  57.   ratio = 20;
  58.   bias = 80 * slider2 / 100;
  59.   cthresh = thresh - bias;
  60.   cthreshv = exp(cthresh * db2log);
  61.   makeup = slider3;
  62.   makeupv = exp(makeup * db2log);
  63.   agc = slider4;
  64.   timeconstant = slider5;
  65.   timeconstant == 1 ? (
  66.     attime = 0.0002;
  67.     reltime = 0.300;
  68.   );
  69.   timeconstant == 2 ? (
  70.     attime = 0.0002;
  71.     reltime = 0.800;
  72.   );
  73.   timeconstant == 3 ? (
  74.     attime = 0.0004;
  75.     reltime = 2.000;
  76.   );
  77.   timeconstant == 4 ? (
  78.     attime = 0.0008;
  79.     reltime = 5.000;
  80.   );
  81.   timeconstant == 5 ? (
  82.     attime = 0.0002;
  83.     reltime = 10.000;
  84.   );
  85.   timeconstant == 6 ? (
  86.     attime = 0.0004;
  87.     reltime = 25.000;
  88.   );
  89.   atcoef = exp(-1 / (attime * srate));
  90.   relcoef = exp(-1 / (reltime * srate));
  91.   
  92.   rmstime = slider6 / 1000000; 
  93.   rmscoef=exp(-1/(rmstime * srate));
  94.  
  95. @sample
  96.   agc == leftright ? (
  97.     aspl0 = abs(spl0);
  98.     aspl1 = abs(spl1);
  99.   ) : (  
  100.     aspl0 = abs(spl0+spl1)/2;
  101.     aspl1 = abs(spl0-spl1)/2;
  102.   );
  103.  
  104.   maxspl = max(aspl0, aspl1);
  105.   maxspl = maxspl * maxspl;
  106.  
  107.   runave = maxspl + rmscoef * (runave - maxspl);
  108.   det = sqrt(max(0,runave));
  109.  
  110.   overdb = 2.08136898 * log(det/threshv) * log2db;
  111.   overdb = max(0,overdb);
  112.  
  113.   overdb > rundb ? (
  114.     rundb = overdb + atcoef * (rundb - overdb);
  115.   ) : (
  116.     rundb = overdb + relcoef * (rundb - overdb);
  117.   );
  118.   overdb = max(rundb,0);
  119.  
  120.   bias == 0 ? (
  121.     cratio = ratio;
  122.   ) : (
  123.     cratio = 1 + (ratio-1) * sqrt((overdb + dcoffset) / (bias + dcoffset));
  124.   );
  125.   slider7 = cratio;
  126.   
  127.   gr = -overdb * (cratio-1)/cratio;
  128.   slider8 = -gr;
  129.   grv = exp(gr * db2log);
  130.   
  131.   agc == leftright ? (
  132.     spl0 *= grv * makeupv;
  133.     spl1 *= grv * makeupv;
  134.   ) : (
  135.     sav0 = (spl0 + spl1) * grv;
  136.     sav1 = (spl0 - spl1) * grv;
  137.     spl0 = makeupv * (sav0 + sav1) * 0.5;
  138.     spl1 = makeupv * (sav0 - sav1) * 0.5;
  139.   );
  140.  
  141.