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 / LoopSamplers / autoloop next >
Text File  |  2007-02-12  |  2KB  |  104 lines

  1. // This effect Copyright (C) 2004 and later Cockos Incorporated
  2. // License: GPL - http://www.gnu.org/licenses/gpl.html
  3.  
  4. desc:auto loop
  5.  
  6. slider1:0<-120,6,1>wet (dB)
  7. slider2:0<-120,6,1>dry (dB)
  8. slider3:-30<-100,60,1>threshold (dB)
  9. slider4:100<1,1000,20>thresh len (ms)
  10. slider5:60<0,400,10>edge overlap (ms)
  11. slider6:100<0,4000,30>min len (ms)
  12. slider7:0<-100,6,1>decay (dB)
  13. slider8:1<0,1,1{disabled,enabled}>record
  14. slider9:0<0,1,1,{disabled,enabled}>flush loop on playback start
  15. @init
  16.     isplay=1; 
  17.     silcnt=rbufpos=pbuflen=pbuf=0; 
  18.     rbuf=1000000/2;
  19.     sscnt=sstot=playfade=pbufpos=0;
  20.     ext_noinit=0;
  21.  
  22. @serialize
  23.  
  24. file_var(0,isplay);
  25. file_var(0,pbuf);
  26. file_var(0,pbuflen);
  27. file_var(0,playfade);
  28. isplay ? file_mem(0,pbuf,pbuflen);
  29.  
  30.  
  31.  
  32. @slider
  33.     wet=2 ^ (slider1/6);
  34.     dry=2 ^ (slider2/6);
  35.     silthres=2 ^ (slider3/6); 
  36.     sillen=srate*slider4/1000; 
  37.     olsize=srate*slider5/1000; 
  38.     minsize=slider6*srate/1000;
  39.     decay=2 ^ (slider7/6); 
  40.     playfade=0;
  41.     ext_noinit=slider9<0.5;
  42.  
  43. @sample
  44.  
  45. s0=spl0;
  46. issil=abs(spl0) < silthres;
  47.  
  48. slider8 ? (
  49.   isplay ? (
  50.      rbuf[sstot]=s0;
  51.      sstot+=1;
  52.  
  53.      issil ? (
  54.          sscnt+=1;
  55.          sscnt > sstot*0.5 ? sstot=sscnt=0; // if our silent samples are a significant percent
  56.      );
  57.     
  58.      sstot > sillen ? (rbufpos=sstot; isplay=sstot=sscnt=silcnt=0; );
  59.   ) : (
  60.  
  61.     rbuf[rbufpos]=spl0;
  62.  
  63.     (rbufpos+=1) >= 500000 ? (
  64.       isplay=1;
  65.       pbuflen=rbufpos-silcnt;
  66.       tmp=rbuf; rbuf=pbuf; pbuf=tmp;
  67.       rbufpos=pbufpos=0;
  68.     );
  69.  
  70.     issil ? (
  71.       (silcnt+=1) > sillen ? (
  72.          rbufpos > minsize ? (
  73.              isplay=1;
  74.              pbuflen=rbufpos-silcnt;
  75.              tmp=rbuf; rbuf=pbuf; pbuf=tmp;
  76.              rbufpos=0;
  77.              pbufpos=silcnt;
  78.          );
  79.          silcnt=0;
  80.       );
  81.     ) 
  82.     : 
  83.     silcnt=0;
  84.   );
  85. );
  86.  
  87. isplay || playfade > 0 ? (
  88.  
  89.   spl0= (pbuf[pbufpos]*=decay);
  90.  
  91.   pbufpos < olsize ? (
  92.     tmpsc=pbufpos/olsize;
  93.     spl0=spl0*tmpsc + pbuf[pbuflen-olsize+pbufpos]*(1-tmpsc);
  94.   );
  95.  
  96.   spl0=spl0*playfade;
  97.   playfade = isplay ? min(playfade+0.01,1) : max(playfade-0.01,0);
  98.   (pbufpos+=1) > (pbuflen-olsize-1) ? pbufpos=0;
  99. );
  100.  
  101. spl0=spl0*wet + s0*dry;
  102.  
  103. spl1=spl0;
  104.