home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 February / PCWorld_2008-02_cd.bin / audio-video / reaper / reaper2028-install.exe / Effects / LOSER / DDC < prev    next >
Text File  |  2007-12-03  |  3KB  |  101 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. // Also Useable For None Digital Drums ;)
  17.  
  18. desc:Digital Drum Compressor (DDC)
  19. slider1:-20<-60,0,.1>Treshold (dB)
  20. slider2:20<0,50,.1>Ratio
  21. slider3:20<0,500,1>Attack (ms)
  22. slider4:.5<0,500,.1>Hold (ms)
  23. slider5:200<0,1000,1>Release (ms)
  24. slider6:0<0,1000,1>RMS Size (ms) 
  25. slider7:0<0,2,1{FF,FBQ,SIDECHAIN}>Feed
  26. slider8:1<0,1,1{NO,YES}>Auto Make Up
  27. slider9:0<-120,60,1>Output (dB)
  28. slider10:0,REDUCTION (dB)
  29.  
  30. @init
  31. gain = seekgain = 1;
  32. c_ampdB = 8.65617025;
  33.  
  34. @slider
  35. treshdB = min(slider1,-.1);
  36. tresh = exp(treshdB/c_ampdB);
  37. ratio_1 = ratio;
  38. ratio = max(slider2,0.0001);
  39.  
  40. treshdB == -.1 || ratio_1 < .1  ? (gain = seekgain = 1; );
  41.  
  42. attack = exp( -treshdB/max( slider3*srate/1000 , 0) / c_ampdB  ) ;
  43. hold = slider4/1000*srate;
  44. under_tresh = 0;
  45. release = exp( -treshdB/max( slider5*srate/1000 , 0) / c_ampdB ) ;
  46.  
  47. rms_size_1 = rms_size;
  48. rms_size = min( max(slider6/1000*srate,1) , 1000000);
  49. rms_size_1 != rms_size ? (
  50.     rms_sqr_sum = rms_bpos = 0;
  51.     memset(0,0,rms_size);
  52. );
  53.  
  54. feed = slider7;
  55.  
  56. mode_make_up = ratio < .5 ? 1:slider8;
  57.  
  58. rms_size == 1 ? (
  59.     volume = exp(slider9/c_ampdB) / (mode_make_up ? tresh+(1-tresh)/ratio : 1);
  60. ):(
  61.     volume = exp(slider9/c_ampdB) / (mode_make_up ? tresh+(1-tresh)/ratio * 2.828427125 : 1);
  62. );
  63.  
  64. seekgain = 1;
  65.  
  66. @sample
  67. feed == 0 ? (maxsamples = max(abs(spl0),abs(spl1)); );
  68. feed == 1 ? (maxsamples = max(abs(spl0_out),abs(spl1_out)); );
  69. feed == 2 ? (maxsamples = max(abs(spl2),abs(spl3)); );
  70.  
  71. rms_sqr_sum = max(rms_sqr_sum - rms_bpos[0],0) + (rms_bpos[0] = sqr(maxsamples));
  72. (rms_bpos+=1) >= rms_size ? rms_bpos=0;
  73. rms = sqrt(rms_sqr_sum/rms_size);
  74.  
  75. rms > tresh ? (
  76.     hold ?
  77.     (
  78.         ratio > 1 ? (
  79.             seekgain = min( (tresh+(rms-tresh)/ratio)/rms ,seekgain );
  80.         ):(
  81.             seekgain = max( (tresh+(rms-tresh)/ratio)/rms ,seekgain );
  82.         );
  83.     ):(
  84.         seekgain = (tresh+(rms-tresh)/ratio)/rms;
  85.     );
  86.     under_tresh = 0;
  87. ):(
  88.     (under_tresh+=1)>hold ? (seekgain = 1; );
  89. );
  90.  
  91.  
  92. gain > seekgain ? gain=max(gain/attack,seekgain):gain=min(gain*release,seekgain);
  93.  
  94.  
  95. spl0_out = (spl0 *= gain * volume) ;
  96. spl1_out = (spl1 *= gain * volume) ;
  97.  
  98. slider10 = log(gain)*c_ampdB;
  99. sliderchange(512);
  100.  
  101.