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

  1. // (C) 2007, 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. desc:Upward Expander
  16. slider1:0<-30,0,.1>Threshold (dB)
  17. slider2:1<0.25,1,.01>Ratio (x:1)
  18. slider3:20<0,250,1>Attack (ms)
  19. slider4:200<0,500,1>Release (ms)
  20. slider5:0<0,250,1>RMS Size (ms)
  21. slider6:0<-6,50,.1>Output (dB)
  22. slider7:0<0,1,1{FF (1+2),SIDE (3+4)}>Feed
  23. slider8:0,EXPANSION (dB)
  24. slider9:-120<-120,0,.1>Dry Mix (dB)
  25.  
  26. @init
  27. gain = seekgain = 1;
  28. c = 8.65617025;
  29. dc = 10^-30;
  30.  
  31. t = 0;
  32. b = -exp(-120 / srate );
  33. a = 1.0 + b;
  34.  
  35. @block
  36. slider8=slid8;
  37. sliderchange(64);
  38. slid8=0;
  39.  
  40. @slider
  41. threshDB = slider1;
  42. thresh = exp(threshDB/c);
  43. ratio = 1/slider2;
  44.  
  45. attack = exp( -60 / (slider3*srate/1000) / c);
  46. release = exp( -30 / (slider4*srate/1000) / c );
  47.  
  48. rmsSize = floor(slider5/1000*srate);
  49. rmsSqrSum = rmsPos = 0;
  50. memset(0,0,rmsSize);
  51.  
  52. volume = exp(slider6/c) / exp(( threshDB -threshDB*ratio )/c) ;
  53.  
  54. dry = exp(slider9/c);
  55.  
  56. seekgain = 1;
  57.  
  58. @sample
  59. slider7 == 0 ? rms = max( abs(spl0) , abs(spl1) ):rms = max( abs(spl2) , abs(spl3) );
  60.  
  61. rms = max( sqrt( (t = a*rms-b*t) ) , rms);    
  62.  
  63. rmsSize > 1 ? (
  64.   rmsSqrSum = max(rmsSqrSum - rmsPos[0],0) + (rmsPos[0] = sqr(rms));
  65.   (rmsPos+=1) >= rmsSize ? rmsPos=0;
  66.   rms = sqrt(rmsSqrSum/rmsSize);
  67. );
  68.  
  69. seekGain =  (rms > thresh) ? exp((threshDB + (log(rms)*c-threshDB)*ratio) /c) / rms : 1;
  70. gain = ((gain > seekGain) ? max( gain*release , seekGain ) : min( gain/attack , seekGain ));
  71. spl0 = spl0 * gain * volume + spl0 * dry;
  72. spl1 = spl1 * gain * volume + spl1 * dry;
  73. slid8 = max(log(gain)*c,slid8);
  74.  
  75.