home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 February / PCWorld_2008-02_cd.bin / audio-video / reaper / reaper2028-install.exe / Effects / LOSER / masterLimiter < prev    next >
Text File  |  2007-12-03  |  3KB  |  83 lines

  1. // (C) 2006, Michael Gruhn.
  2.  
  3. // NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
  4. // WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO,
  5. // ANY DIRECT OR INDIRECT,  SPECIAL,  INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING
  6. // OUT OF  THE  USE  OR INABILITY  TO  USE  THIS PLUG-IN,  COMPUTER FAILTURE  OF
  7. // MALFUNCTION INCLUDED.  THE USE OF THE SOURCE CODE,  EITHER  PARTIALLY  OR  IN
  8. // TOTAL, IS ONLY GRANTED,  IF USED IN THE SENSE OF THE AUTHOR'S INTENTION,  AND
  9. // USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A  THIRD
  10. // PARTY CONTRIBUTION,  EVEN IF INCLUDED IN REAPER(TM),  COCKOS INCORPORATED  OR
  11. // ITS AFFILIATES HAVE NOTHING TO DO WITH IT.  LAST BUT NOT LEAST, BY USING THIS
  12. // PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO
  13. // ENTRUST SOMEBODY ELSE WITH DOING SO.
  14.  
  15.  
  16. desc:Master Limiter
  17. slider1:-3<-20,-.1,.1>Treshold (dB)
  18. slider2:200<0,1000,1>Look Ahead [Delay!] (ns)
  19. slider3:100<0,1000,1>Attack (ns)
  20. slider4:0<0,10,.1>Hold (ms)
  21. slider5:250<0,1000,1>Release (ms)
  22. slider6:-.1<-6,0,.01>Limit (dB)
  23. slider7:0,REDUCTION
  24.  
  25.  
  26. @init
  27. gain = seekgain = 1;
  28. c_ampdB = 8.65617025;
  29.  
  30. @slider
  31. treshdB = min(slider1,-.1);
  32. tresh = exp(treshdB/c_ampdB);
  33.  
  34. treshdB == -.1 ? (gain = seekgain = 1; );
  35.  
  36. look = floor(max( min( slider2/1000000*srate , 500000) , 1));
  37. attack = exp( -treshdB/max( slider3/1000000*srate , 0) / c_ampdB  ) ;
  38. hold = slider4/1000*srate;
  39. under_tresh = 0;
  40. release = exp( -treshdB/max( slider5/1000*srate , 0) / c_ampdB ) ;
  41.  
  42. limit = exp(slider6/c_ampdB);
  43.  
  44. mode_make_up = 1;
  45.  
  46. volume = limit / (mode_make_up ? tresh : 1);
  47.  
  48. seekgain = 1;
  49.  
  50. @sample
  51. detect = max(abs(spl0),abs(spl1));
  52.  
  53. bufPos[0] = spl0;
  54. bufPos[look] = spl1;
  55. (bufPos += 1) >= look ? bufPos = 0 ;
  56. spl0 = bufPos[0];
  57. spl1 = bufPos[look];
  58.  
  59. // Prevent From Preopening, I Know There Might Be Transients In Between, But Fuck'Em :/
  60. detect = max(max(abs(spl0),abs(spl1)),detect);
  61.  
  62. detect > tresh ? (
  63.     under_tresh = 0;
  64.     hold ? seekgain = min( tresh/detect ,seekgain ) : seekgain = tresh/detect;
  65. ):(
  66.     (under_tresh+=1)>hold ? (seekgain = 1; );
  67. );
  68.  
  69. gain > seekgain ? gain=max(gain/attack,seekgain):gain=min(gain*release,seekgain);
  70.  
  71. spl0 *= gain * volume;
  72. spl1 *= gain * volume;
  73.  
  74. // Prevent From Unecessary Distortion, Better Distort Just Once Even Tho Hard :)
  75. max(abs(spl0),abs(spl1)) > limit ? gain = seekgain; // Uber Nifty Metering For This Doesn't Work :(
  76.  
  77. spl0 = max(min(spl0,limit),-limit);
  78. spl1 = max(min(spl1,limit),-limit); 
  79.  
  80. slider7 = log(gain)*c_ampdB;
  81. sliderchange(64);
  82.  
  83.