home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 February / PCWorld_2008-02_cd.bin / audio-video / reaper / reaper2028-install.exe / Effects / Utility / bitred next >
Text File  |  2007-12-03  |  1KB  |  66 lines

  1. desc:bit depth reduction
  2.  
  3. slider1:16<1,32,1>resolution (bits)
  4. slider2:0<-48,48,1>input gain (dB)
  5. slider3:0<0,1,1{off,on}>dither
  6. slider4:0<0,1,1{off,on}>noiseshape
  7. slider5:0<0,2,1{rect,tri,gauss}>dither type
  8. slider6:0<0,1,1{off,on}>highpass dither
  9. slider7:1<0,4,.01>dither amplitude (lsb)
  10. slider8:0<-2,2,.01>DC shift (lsb)
  11.  
  12. @slider
  13. resol=2^((slider1|0)-1); 
  14. invresl=1/resol; 
  15. gain=2^(slider2/6);
  16. dit=slider3?1:0;
  17. s=slider4>0.5?0.5:0;
  18. s1l=s1r=s2l=s2r=0;
  19. ldv=0;
  20. dcshift = slider8+0.5;
  21. GAUSSIAN_UNINITIALIZED = -9999;  // Magic number.
  22. z0 = z1 = GAUSSIAN_UNINITIALIZED;
  23.  
  24. @sample
  25.  
  26. s0 = spl0*gain + s * (s1l+s1l - s2l);
  27. s1 = spl1*gain + s * (s1r+s1r - s2r);
  28.  
  29. slider6 ? dv2 = dv:dv2=0;
  30. dit ? (
  31.   slider5==0 ? dv=rand(20000)/10000 - 1;
  32.   slider5==1 ? dv=(rand(10000)+rand(10000))/10000 - 1;
  33.  
  34.   slider5==2 ? (
  35.     (z1 == GAUSSIAN_UNINITIALIZED) ? (
  36.       // Box-Muller twofer.
  37.       w = 0;
  38.       while (
  39.         z0 = 2.0 * rand(1) - 1.0;
  40.         z1 = 2.0 * rand(1) - 1.0;
  41.         w = z0 * z0 + z1 * z1;
  42.         w >= 1.0;
  43.       );
  44.       w = sqrt(-2.0 * log(w) / w);
  45.       z0 *= w;
  46.       z1 *= w;
  47.       dv = z0*0.25;
  48.     ) : (
  49.       dv = z1*0.25;
  50.       z0 = z1 = GAUSSIAN_UNINITIALIZED;
  51.     );
  52.   );
  53. ) : dv=0;
  54.  
  55. noise = (dv-dv2) * slider7 + dcShift;
  56.  
  57. spl0 = max(min((floor(s0*resol + noise))*invresl,1),-1);
  58. spl1 = max(min((floor(s1*resol + noise))*invresl,1),-1);
  59.  
  60. s2l=s1l;
  61. s2r=s1r;
  62.  
  63. s1l = s0 - spl0;
  64. s1r = s1 - spl1;
  65.  
  66.