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 / Meters / tuner < prev    next >
Text File  |  2007-02-12  |  3KB  |  119 lines

  1. // This effect Copyright (C) 2004 and later Cockos Incorporated
  2. // License: GPL - http://www.gnu.org/licenses/gpl.html
  3. // this algorithm is based on the one used by gtkguituner, the schmitt-triggering.
  4.  
  5. desc: schmitt-triggering tuner
  6.  
  7. slider1:0.5<0.001,0.990>trigger factor
  8. slider2:1024<128,16384>numsamples
  9. slider4:0,octaves from a110
  10. slider5:0<0,12,1{-,A,A#,B,C,C#,D,D#,E,F,F#,G,G#}>note
  11. slider6:0<0,10,1{-,[*----|-----],[-*---|-----],[--*--|-----],[---*-|-----],[----*|-----],[-----*-----],[-----|*----],[-----|-*---],[-----|--*--],[-----|---*-],[-----|----*]}>tune
  12. slider7:0,freq (Hz)
  13.  
  14. @init
  15.  
  16.   volthresh=2^(-60/6);
  17.  
  18. @slider 
  19.   state=0;
  20.   splpos=0;
  21.   trigfact=slider1;
  22.   numsamples=slider2;
  23.   ufreq = (srate/numsamples)/3;
  24.   freqcnt=0;
  25.  
  26.  
  27. @sample
  28.  
  29.  
  30. state ? 
  31. (
  32.   // track minimum and maximum values for sample
  33.   a1=max(a1,spl0);
  34.   a2=min(a2,spl0);
  35.  
  36.   splpos[0]=spl0;
  37.   maxvol = max(maxvol,spl0);
  38.   splpos += 1;
  39.   splpos >= numsamples ? 
  40.   (
  41.     splpos=0;
  42.     state=0;
  43.     a2 *= trigfact;
  44.     a1 *= trigfact;
  45.  
  46.     lst=0;
  47.     startp=1;
  48.     loop(numsamples-1, 
  49.         lst == 0 && startp[0] > a1 ? lst=1;
  50.         lst == 1 && startp[0] >= a2 && startp[1] < a2 ? lst=2;
  51.         lst != 2 ? startp+=1;       
  52.     );
  53.     smtrig=0;
  54.     endp=startp+1;
  55.     tc=0;
  56.     i=startp;
  57.     loop(numsamples-startp,
  58.        smtrig ? 
  59.        ( 
  60.           i[0] >= a2 && i[1] < a2 ? (
  61.             endp=i;
  62.             tc+=1;
  63.             smtrig=0;
  64.           )
  65.        )
  66.        :
  67.        (
  68.           smtrig = i[0] >= a1;
  69.        );
  70.        i+=1;
  71.  
  72.     );
  73.     endp == startp ? endp += 1;
  74.  
  75.     s = srate * tc / (endp-startp);
  76.     s > 4 ? slider7=s;
  77.  
  78.     (freqcnt += 1) >= ufreq ? (
  79.       freqcnt=0;
  80.  
  81.       oofs=log(slider7/110)/log(2);
  82.       slider4=oofs|0;
  83.       slider5=(oofs*12)%12;
  84.  
  85.       slider6=((oofs*12)*100)%100;
  86.       slider6 >= 50 ? ( slider5 += 1; slider6 -= 100; );
  87.  
  88.       oofs < 0 ? ( slider5 = 12-slider5; slider4-=1;);
  89.  
  90.       slider5 >= 12 ? (slider5-=12; slider4+=1; );
  91.  
  92.       maxvol >= volthresh ? (
  93.       abs(slider6)>=25 ? slider6=sign(slider6)*50 : slider6*=2;
  94.       slider6 += 50; slider6/=10; // 0-10 for funny lookin meter
  95.       slider6=max(min(slider6+1,10),0);
  96.       slider5+=1;
  97.       ) : slider5=slider6=0;
  98.       
  99.     );
  100.  
  101.     sliderchange(8+16+32+64);
  102.     maxvol =0;
  103.     
  104.   );
  105. )
  106. :
  107. (
  108.   0[0] <= 0 && spl0 > 0 ?
  109.   (
  110.     state=1;
  111.     1[0]=spl0;
  112.     splpos=2;
  113.     a1=spl0;
  114.     a2=0[0];
  115.   );
  116. );
  117.  
  118.  
  119.