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

  1. // (C) 2006-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.  
  16. desc:Digital Versatile Compressor JS 2
  17. slider1:-.1<-30,-.1,.1>Threshold (dB)
  18. slider2:1<1,20,.1>Ratio
  19. slider3:20<0,500,1>Attack (ms)
  20. slider4:200<0,1000,1>Release (ms)
  21. slider5:0<0,100,1>RMS Size (ms)
  22. slider6:0<0,1,1{NO,YES}>Auto Make Up
  23. slider7:0<-12,12,.1>Output (dB)
  24. slider8:0,REDUCTION (dB)
  25. slider9:0<0,1,1{COMP,LIMIT}>Character
  26.  
  27. @init
  28. gain = seekgain = 1;
  29. c = 8.65617025;
  30. dc = 10^-30;
  31.  
  32. gain = seekGain = 1;
  33. t = 0;
  34. b = -exp(-60 / srate );
  35. a = 1.0 + b;
  36.  
  37. gr_meter=1;
  38. gr_meter_decay = exp(1/(1*srate));
  39.  
  40. @slider
  41. threshDB = slider1;
  42. thresh = exp(threshDB/c);
  43. ratio = 1/slider2;
  44.  
  45. attack = exp( threshDB / (slider3*srate/1000) / c);
  46. release = exp( threshdB / (slider4*srate/1000) / c );
  47. rmsSize = floor(slider5/1000*srate);
  48.  
  49. rms_size = floor(slider5/1000*srate);
  50. rmsSqrSum = rmsPos = 0;
  51. memset(0,0,rmsSize);
  52.  
  53. volume = exp(slider7/c) / (slider6 ? exp(( threshDB -threshDB*ratio )/c)  : 1 );
  54.  
  55. seekgain = 1;
  56.  
  57. @sample
  58. rmsS = rms = max( abs(spl0) , abs(spl1) );
  59. rms = sqrt( (t = a*rms-b*t) );
  60. slider9 ? rms = max(rms,rmsS);
  61.  
  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*attack , seekGain ) : min( gain/release , seekGain ));
  71. spl0 *= gain * volume;
  72. spl1 *= gain * volume;
  73. slider8 = log(gain)*c;
  74. sliderchange(128);
  75.  
  76. gain < gr_meter ? gr_meter=gain : ( gr_meter*=gr_meter_decay; gr_meter>1?gr_meter=1; );
  77.  
  78. @gfx 0 24 // request horizontal/vertical heights (0 means dont care)
  79.  
  80.   gr_meter *= exp(1/30); gr_meter>1?gr_meter=1; // decay meter here so if the audio processing stops it doesnt "stick"
  81.   gfx_r=1; gfx_g=gfx_b=0; gfx_a=0.8;
  82.   
  83.   meter_bot=20;
  84.   meter_h=min(gfx_h,32);
  85.   xscale=gfx_w*20/meter_bot;
  86.  
  87.   gfx_y=0;
  88.   gfx_x=gfx_w + log10(gr_meter)*xscale;
  89.   gfx_rectto(gfx_w,meter_h);
  90.  
  91.   gfx_r=gfx_g=gfx_b=1.0; gfx_a=0.6;
  92.  
  93.   s2=sqrt(2)/2;
  94.   g = s2;
  95.   while(
  96.     gfx_x=gfx_w + log10(g)*xscale;
  97.     gfx_x >= 0 ? 
  98.     (
  99.       gfx_y=0;
  100.       gfx_lineto(gfx_x,meter_h,0);
  101.       gfx_y=meter_h-gfx_texth;
  102.       gfx_x+=2;
  103.       gfx_drawnumber(log10(g)*20,0);
  104.       gfx_drawchar($'d');
  105.       gfx_drawchar($'B');
  106.     );
  107.     g*=s2;
  108.     gfx_x >=0;
  109.   );
  110.   gfx_a=1;
  111.  
  112.   gfx_x=0; gfx_y=meter_h/2 - gfx_texth/2;
  113.   gfx_drawnumber(log10(gr_meter)*20,1);
  114.   gfx_drawchar($'d');
  115.   gfx_drawchar($'B');