home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 July & August / PCWorld_2007-07-08_cd.bin / audio-video / reaper / reaper1861-install.exe / Effects / Delay / delay_chfun < prev    next >
Text File  |  2007-02-12  |  2KB  |  64 lines

  1. // This effect Copyright (C) 2004 and later Cockos Incorporated
  2. // License: GPL - http://www.gnu.org/licenses/gpl.html
  3. desc: stereo bounce delay
  4. slider1:300<0,4000,20>delay (ms)
  5. slider2:-6<-120,6,1>upd wet (dB)
  6. slider3:-6<-120,6,1>upd dry (dB)
  7. slider4:-6<-120,6,1>out wet (dB)
  8. slider5:-6<-120,6,1>out dry (dB)
  9. slider6:0<0,1,1{off,on}>resample on length change
  10. @init
  11. delaypos=0;
  12. @slider
  13. odelay=delaylen;
  14. delaylen=min(slider1 * srate / 1000,500000);
  15. odelay != delaylen ? (
  16.   slider6 && odelay > delaylen ? (
  17.       // resample down delay buffer, heh
  18.       rspos=0; rspos2=0;
  19.       drspos=odelay/delaylen;
  20.       loop(delaylen,
  21.          
  22.          tpos = ((rspos)|0)*2;
  23.          rspos2[0]=tpos[0];
  24.          rspos2[1]=tpos[1];
  25.          rspos2+=2;
  26.          rspos+=drspos;
  27.       );
  28.       delaypos /= drspos;
  29.       delaypos|=0;
  30.   ) : (
  31.     slider6 && odelay < delaylen ? (
  32.         // resample up delay buffer, heh
  33.         drspos=odelay/delaylen;
  34.         rspos=odelay; 
  35.         rspos2=delaylen*2;
  36.         loop(delaylen,
  37.            rspos-=drspos;
  38.            rspos2-=2;
  39.          
  40.            tpos = ((rspos)|0)*2;
  41.            rspos2[0]=tpos[0];
  42.            rspos2[1]=tpos[1];
  43.         );
  44.         delaypos /= drspos;
  45.         delaypos|=0;
  46.     ) : (!slider6 && delaypos >= delaylen ? delaypos = 0);
  47.   );
  48.   delaypos<0?delaypos=0;
  49.   freembuf(delaylen*2);
  50. );
  51. wetmix = 2 ^(slider2/6);
  52. drymix = (2 ^(slider3/6)) * 0.5;
  53. wetmix2 = 2 ^(slider4/6);
  54. drymix2 = 2 ^(slider5/6);
  55. @sample
  56. dpint = delaypos*2;
  57. os1=dpint[0];
  58. os2=dpint[1];
  59. dpint[0]=min(max((spl0+spl1)*drymix + os2*wetmix,-4),4);
  60. dpint[1]=min(max(os1*wetmix,-4),4);
  61. (delaypos+=1) >= delaylen ? delaypos=0;
  62. spl0=spl0*drymix2 + os1*wetmix2;
  63. spl1=spl0*drymix2 + os2*wetmix2;
  64.