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

  1. // This effect Copyright (C) 2004 and later Cockos Incorporated
  2. // License: GPL - http://www.gnu.org/licenses/gpl.html
  3.  
  4. desc: MDCT shift
  5.  
  6. slider1:128<32,512,153.6>bands
  7. slider2:4<-512,512,1>band shift (positive is shift up)
  8.  
  9. @slider
  10. slider1=2 ^ (0|(0.5+log10(slider1)/log10(2)))|0; 
  11. slider1=min(512,max(slider1,32));
  12. fftsize!=slider1*2 ? (fftsize=slider1*2; bufpos=bi1=0;+bi2=fftsize*2; halfsize=fftsize*0.5);
  13. slider2=min(slider1,max(slider2,-slider1)); 
  14.  
  15. @sample
  16. // bi2 was the previously transformed buffer, and by the time it
  17. // is bi2 we only touch the second half (the first was replaced when
  18. // it was bi1)
  19.  
  20. // bi1 is the most recently transformed buffer, we only touch the first
  21. // half, because the second will be used for the next overlap
  22.  
  23.  
  24. t=bi1+bufpos;
  25. p0=t[0];
  26. t[0]=spl0;
  27.  
  28. t=bi2+halfsize+bufpos;
  29. p1=t[0];
  30. t[0]=spl0;
  31.  
  32. spl0 = p0 + p1; // our mdct handles windowing, so we just add
  33.  
  34. bufpos+=1;
  35.  
  36. bufpos >= halfsize ? 
  37. (
  38.   // swap bi1 and bi2
  39.   t=bi1; bi1=bi2; bi2=t;
  40.   // we hit our FFT size here
  41.  
  42.   mdct(bi1,fftsize);
  43.  
  44.   slider2 > 0 ? 
  45.   (
  46.        bufpos=bi1+halfsize;
  47.        loop(halfsize-slider2,
  48.           bufpos[0]=bufpos[-slider2];
  49.           bufpos-=1;
  50.        );
  51.        loop(slider2,bufpos[0]=0; bufpos-=1;)
  52.   ) : (
  53.        bufpos=bi1;
  54.        loop(halfsize+slider2,
  55.            bufpos[0]=bufpos[-slider2];
  56.            bufpos+=1;
  57.         );
  58.        loop(-slider2,bufpos[0]=0; bufpos+=1)
  59.   );
  60.      
  61.   imdct(bi1,fftsize);
  62.   bufpos=0;
  63. );
  64.  
  65. spl1=spl0;
  66.