home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 January / PCWorld_2007-01_cd.bin / temacd / reaper / reaper147-install.exe / Effects / SStillwell / dirtsqueeze < prev    next >
Text File  |  2006-09-11  |  4KB  |  119 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.  
  14. //
  15. //The name of Thomas Scott Stillwell may not be used to endorse or 
  16. //promote products derived from this software without specific prior written permission. 
  17.  
  18.  
  19. //
  20.  
  21.  
  22. //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR 
  23. //IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
  24. //FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 
  25. //BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
  26. //(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
  27. //PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
  28. //STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
  29. //THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30. desc:prog. dependent comp. with saturation
  31.  
  32. slider1:0<-60,0,0.1>Threshold (dB)
  33. slider2:1<1,20,0.1>Ratio
  34. slider3:0<0,1,1{No,Yes}>Auto-makeup
  35. slider4:0<-20,20,0.1>Manual gain
  36.  
  37. @init
  38.   i=0;
  39.   loop(
  40.     120,
  41.     attimes[i] = ((0.08924 / i) + (0.60755 / (i ^ 2)) - 0.00006)*srate;
  42.     i+=1;
  43.   );
  44.   overthresh = 0;
  45.   compressing = 0;
  46.   relfactor = 2 ^ (-20.833333333 / srate);
  47.   attime=0;
  48.   atctr=0;
  49.   prevmax=0;
  50.   maxover=0;
  51.   relctr=0;
  52.   cratio=0;
  53.   ratio=0;
  54.  
  55. @slider
  56.   thresh = slider1;
  57.   threshv = 2^(thresh/6);
  58.   ratio = slider2;
  59.   cratio = ratio;
  60.   autogain = slider3;
  61.   makeup = autogain ? (((abs(thresh) - (abs(thresh) / ratio))/2) + slider4) : slider4;
  62.   makeupv = 2^(makeup / 6);
  63.  
  64. @sample
  65.   aspl0 = abs(spl0);
  66.   aspl1 = abs(spl1);
  67.   maxspl = max(aspl0,aspl1);
  68.   maxspl > threshv ? (
  69.     overthresh = 1;
  70.     overdb = log(6 * maxspl / threshv) / log(2);
  71.     overdb > maxover ? (
  72.         maxover = overdb;
  73.         prevattime = attime;
  74.         attime = attimes[floor(overdb+0.5)];
  75.         prevattime > 0 ? (atctr += prevattime - attime);
  76.      atctr = min(atctr,attime);
  77.         reltime = srate * overdb / 125;
  78.         relctr = 0;
  79.         cratio = ratio;
  80.     );
  81.     relctr = 0;
  82.     releasing = 0;
  83.     atctr == 0 ? atctr = attimes[floor(overdb)];
  84.   );
  85.   overthresh ? (
  86.      atctr += 1;
  87.      atctr >= attime ? (
  88.        compressing = 1;
  89.        relctr = 0;
  90.      );
  91.   );
  92.   compressing ? (
  93.     overthresh = 0;
  94.     atctr = 0;
  95.     thresh0 = threshv * sign(spl0);
  96.     thresh1 = threshv * sign(spl1);
  97.     spl0 = (aspl0 <= threshv ? spl0 : (thresh0 + (spl0-thresh0) / cratio));
  98.     spl1 = (aspl1 <= threshv ? spl1 : (thresh1 + (spl1-thresh1) / cratio));
  99.   );
  100.   maxspl <= threshv ? (
  101.     relctr += 1;
  102.     releasing = 1;
  103.     relctr >= (reltime - 1000) ? (
  104.       compressing = 0;
  105.       overthresh = 0;
  106.       relctr = 0;
  107.       reltime = 0;
  108.       atctr = 0;
  109.       attime = 0;
  110.       releasing = 0;
  111.       cratio = ratio;
  112.     );
  113.   );
  114.   releasing ? (
  115.     cratio = max(1,cratio * relfactor);
  116.   );
  117.   spl0 = spl0 * makeupv;
  118.   spl1 = spl1 * makeupv;  
  119.