home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 March / PCWorld_2007-03_cd.bin / audio-video / reaper / reaper174-install.exe / Effects / SStillwell / thunderkick < prev    next >
Text File  |  2007-01-22  |  2KB  |  73 lines

  1. // This effect Copyright (C) 2007 and later Thomas Scott Stillwell
  2. // Based on mdctfilter Copyright 2004 and later by Cockos Incorporated
  3. // License: GPL - http://www.gnu.org/licenses/gpl.html
  4. // 
  5.  
  6. desc: thunderkick - MDCT subsynthesis filter
  7.  
  8. slider1:-6<-40,40,0.1>effect (dB)
  9. slider2:4<1,30,1>Cutoff
  10. slider3:0<-40,40,0.1>Gain (dB)
  11. slider4:1<0,10,1>Shift
  12.  
  13. @init
  14.   fftsize=1024;
  15.   bucketsize = (srate * 0.5 ) / fftsize;
  16.   bufpos=bi1=0; 
  17.   bi2=fftsize*2; 
  18.   halfsize=fftsize*0.5;
  19.   bands = slider2;
  20.   gain = 2 ^ (slider3 / 6);
  21.   shift = slider4;
  22.  
  23. @slider
  24.   adj=2 ^ (slider1/6);
  25.   bands = slider2;
  26.   gain = 2 ^ (slider3 / 6);
  27.   shift = (slider4 < slider2 ? slider4 : slider2);
  28.   slider4 = shift;
  29.  
  30. @sample
  31. // bi2 was the previously transformed buffer, and by the time it
  32. // is bi2 we only touch the second half (the first was replaced when
  33. // it was bi1)
  34.  
  35. // bi1 is the most recently transformed buffer, we only touch the first
  36. // half, because the second will be used for the next overlap
  37.  
  38.  
  39. dry0=spl0;
  40. dry1=spl1;
  41. wet0=spl0+spl1;
  42.  
  43. t=bi1+bufpos;
  44. p0=t[0];
  45. t[0]=wet0;
  46.  
  47. t=bi2+halfsize+bufpos;
  48. p1=t[0];
  49. t[0]=wet0;
  50.  
  51. wet0 = p0 + p1; // our mdct handles windowing, so we just add
  52.  
  53. bufpos+=1;
  54.  
  55. bufpos >= halfsize ? (
  56.   // we hit our FFT size here
  57.   // swap bi1 and bi2
  58.   t=bi1; bi1=bi2; bi2=t;
  59.   // Map time -> frequency domain
  60.   mdct(bi1,fftsize);
  61.   // frequency-shift energy to lower bands
  62.   // memcpy(bi1,bi1+shift,bands);
  63.   i=0;
  64.   loop(bands, bi1[i]=bi1[i*shift+i]; i+=1;);
  65.   // zero out HF bands;
  66.   memset(bi1+bands,0,fftsize-bands);
  67.   imdct(bi1,fftsize);
  68.   bufpos=0;
  69. );
  70.  
  71.  
  72. spl0 = (dry0 + wet0 * adj) * gain;
  73. spl1 = (dry1 + wet0 * adj) * gain;