home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 February / PCWorld_2008-02_cd.bin / audio-video / reaper / reaper2028-install.exe / Effects / Analysis / zoomanalyzer < prev   
Text File  |  2007-12-15  |  3KB  |  150 lines

  1. desc:simple vis
  2. /*
  3. Copyright (C) 2007 Cockos Incorporated
  4. License: GPL - http://www.gnu.org/licenses/gpl.html
  5. */
  6.  
  7.  
  8. @init
  9. recpos=0;
  10. fftsize=32768;
  11. gfx_clear=-1;
  12. windowtype=-1;
  13.  
  14. histsize=128*1024;
  15. window=histsize;
  16. fftworkspace=window+65536;
  17. lrecpos=0;
  18.  
  19.  
  20. @slider
  21. lfft=fftsize;
  22. fftsize=4096;
  23.  
  24. @block
  25.  
  26. ifftsize=1/fftsize;
  27.  
  28. @sample
  29. recpos[]=spl(0)+spl(1);
  30. recpos+=1;
  31. recpos >= histsize ? recpos=0;
  32.  
  33. @gfx 640 400
  34.  
  35. // only update if new fft data is there or if the size changed
  36. recpos != lrecpos || old_w != gfx_w || old_h!=gfx_h? (
  37.  
  38.   gfx_mode=0;
  39.  
  40. old_w=gfx_w; old_h=gfx_h;
  41.  
  42. gfx_r=gfx_g=gfx_b=0; gfx_a=0.01;
  43. gfx_x=gfx_y=0;
  44. gfx_rectto(gfx_w,gfx_h);
  45. gfx_x=gfx_y=0;
  46. gfx_blurto(gfx_w,gfx_h);
  47. gfX_a=0.5;
  48. blitparms=2*1024*1024;
  49. blitparms[0]=blitparms[1]=0;
  50. blitparms[2]=gfx_w;
  51. blitparms[3]=gfx_h;
  52.  
  53. blitparms[4]=-gfx_w*0.05; blitparms[5]=-gfx_h*0.05;
  54. blitparms[6]=gfx_w-blitparms[4]*2; 
  55. blitparms[7]=gfx_h-blitparms[5]*2;
  56. blitparms[8]=cos(colorang2*0.03)*gfx_w*0.09;
  57. blitparms[9]=cos(colorang*3.5)*gfx_h*0.09;
  58. gfx_blitext(-1,blitparms,sin(blitang)*$pi*0.1);
  59.  
  60. blitang+=0.01*cos(colorang);
  61.  
  62.  
  63. sc=(gfx_h-20)*20/(120 * log(10));
  64.  
  65. wsc=gfx_w/log(1+400);
  66.  
  67. lrecpos=recpos;
  68.  
  69. (
  70.   windowsize != fftsize ? (
  71.     windowsize=fftsize;
  72.     i=0;
  73.     dwindowpos = $pi*2/fftsize;
  74.     windowpos=-dwindowpos * m_fft_size / 4;
  75.  
  76.     loop(fftsize,
  77.        window[i] = (0.42 - 0.50 * cos(windowpos) + 0.08 * cos(2.0*windowpos) )*ifftsize*0.5;
  78.        windowpos+=dwindowpos;
  79.        i+=1;
  80.     );
  81.   );
  82.  
  83.   gfx_mode=1;
  84.  
  85.   gfx_a=0.7;
  86.   gfx_x=gfx_w/2; gfx_y=gfx_h/2;
  87.   gfx_getpixel(r,g,b);
  88.   stupidcnt > 10 ? gfx_a=-gfx_a;
  89.  
  90.   r>0.6 && g>0.6 && b>0.6 ? 
  91.   ( 
  92.     stupidcnt+=1; stupidcnt==9 ? stupidcnt=100;
  93.   )
  94.   : 
  95.   (  
  96.     stupidcnt-=1;
  97.     stupidcnt==10 ? stupidcnt=0;
  98.   );
  99.   colorang2+=cos(colorang);
  100.  
  101.   gfX_r=1+sin(colorang*7);
  102.   gfx_g=1+cos(colorang*3.132+3);
  103.   gfx_b=1+cos(colorang*0.3125+1);
  104.   colorang+=0.005;
  105.  
  106.   buf1=lrecpos-fftsize;
  107.   buf1<0 ? buf1+=histsize;
  108.   buf2=window;
  109.   buf3=fftworkspace;
  110.   loop(fftsize,
  111.     buf3[] = buf1[]*buf2[];
  112.     buf3[1]=0;
  113.     buf3+=2;
  114.  
  115.     buf2+=1;
  116.     (buf1+=1) >= histsize ? buf1 -= histsize;
  117.   );
  118.   fft(fftworkspace,fftsize);
  119.   fft_permute(fftworkspace,fftsize);
  120.  
  121.   i=0;
  122.   ascale=gfx_h/$pi*0.25;
  123.   xscale=800/(fftsize-1);
  124.   loop(fftsize*0.5-1,
  125.     aa=fftworkspace[i*2+2]; bb=fftworkspace[i*2+3];
  126.     dv=aa*aa+bb*bb;
  127.     dv<0.00000000000000000001 ? dv=0.0000000000000000000001;
  128.     ty= (-log(dv)*0.5)*sc+20;
  129.  
  130.     ang=-atan2(aa,bb);
  131.  
  132.     ty2=ang*ascale + gfx_h*0.5;
  133.  
  134.     tx = log(1.0+i*xscale)*wsc;
  135.  
  136.  
  137.  
  138.     i ? 
  139.     ( 
  140.  
  141.       gfx_x=lx; gfx_y=ly; gfx_lineto(tx,ty,1) ;
  142.     );
  143.  
  144.     lx=tx; ly=ty; ly2=ty2;
  145.     i+=1;
  146.   );
  147. );
  148.  
  149.  
  150. );