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

  1. desc:awesome sequencer
  2. slider1:0<0,15,1{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}>pattern
  3. slider2:60<0,127,1>note start
  4.  
  5. @init
  6. listlength=16;
  7. numnotes=16;
  8. lbeatpos=-1;
  9. npatterns=16;
  10. mstate=-1;
  11. lastpreviewsel=-1;
  12. gfx_clear=-1;
  13. ext_noinit=1;
  14. noteonstate=0;
  15. want_preview=-1;
  16. want_previewoff=0;
  17.  
  18.  
  19. @slider
  20. basenote=slider2|0; 
  21. p=slider1|0;
  22. p<0?p=0:p>=npatterns?p=npatterns-1;
  23.  
  24. notelist=listlength*p;
  25.  
  26. @serialize
  27. file_mem(0,0,listlength*npatterns);
  28.  
  29. @block
  30.  
  31. want_previewoff && last_preview >=0 ? (
  32.   midisend(0,$x80,last_preview+basenote);
  33.   last_preview=-1;
  34. );
  35. want_previewoff=0;
  36.  
  37.  
  38. want_preview >=0 ?
  39. (
  40.   midisend(0,$x90,want_preview+basenote+127*256);
  41.   last_preview=want_preview;
  42.   want_preview=-1;
  43. );
  44.  
  45. beatpos=(play_state&1) ? (beat_position*4)%listlength : -100;
  46. beatpos != lbeatpos || !(play_state&1) ? (
  47.   a = (play_state&1) ? notelist[beatpos] : 0;
  48.   npos=basenote;
  49.   noneed=noteonstate;
  50.   noteonstate=0;
  51.   while(
  52.     (noneed&1) ? (
  53.        midisend(0,$x80,npos);  
  54.     );
  55.     (a&1) ? (
  56.       midisend(0,$x90,npos + 127*256);
  57.       noteonstate+=2^(npos-basenote);
  58.     );
  59.     npos+=1;
  60.     noneed*=0.5;
  61.     (a*=0.5) >=1 || noneed >= 1;
  62.   );
  63.   lbeatpos=beatpos;
  64. );
  65.  
  66. @sample
  67.  
  68. @gfx 400 300
  69.  
  70. y = numnotes - 1 - (((mouse_y / gfx_h)*numnotes )|0);
  71.  
  72. (mouse_cap&2) ? (
  73.   y != lastpreviewsel && y >= 0 && y < numnotes ? 
  74.   (
  75.     lastpreviewsel>=0 ? want_previewoff=1;
  76.     want_preview=lastpreviewsel=y; 
  77.   );
  78. ):(
  79.   want_previewoff=1;
  80.   lastpreviewsel=-1;
  81. );
  82.  
  83. (mouse_cap&1) ? ( 
  84.     x = ((mouse_x/gfx_w)*listlength)|0;
  85.     x >= 0 && x < listlength && y >= 0 && y < numnotes? (
  86.  
  87.       mask = 2^y;
  88.       nlm=(notelist[x] & mask);
  89.       mstate<0 ? ( 
  90.         mstate=nlm?0:1;
  91.       );
  92.       mstate==0 && nlm ? notelist[x]-=mask;
  93.       mstate==1 && !nlm ? notelist[x]+=mask;
  94.     
  95.     );
  96. ) : mstate=-1;
  97.  
  98.  
  99. ly=0;
  100.  
  101. notepos=0;
  102. loop(numnotes,
  103.  
  104. ty=((notepos+1)*gfx_h)/(numnotes);
  105. lx=0;
  106. xpos=0;
  107. mask = 2^(numnotes-1-notepos);
  108. cidx=(slider1&7);
  109. gfx_a=1;
  110.  
  111. use_r=(cidx&1) ? 0.6 : 0.2;
  112. use_g=(cidx&2) ? 0.6 : 0.2;
  113. use_b=(cidx&4) ? 0.2 : 0.6;
  114. cidx==3  ? use_r*=2;
  115. cidx==4 ? use_g*=2;
  116.  
  117. loop(listlength,
  118.   tx = ((xpos+1)*gfx_w)/listlength;
  119.  
  120.   sel=(notelist[xpos]&mask);
  121.  
  122.   gfx_r=use_r; gfx_g=use_g; gfx_b=use_b;  
  123.  
  124.   !(xpos&3) ? ( gfx_g=gfx_r; gfx_r=gfx_b; gfx_b=use_g;);
  125.  
  126.   lbeatpos == xpos ? ( gfx_r=gfx_g=gfx_b=sel?0.8:0.4; ) :
  127.       !sel ? (gfx_r*=0.55; gfx_g*=0.55; gfx_b*=0.55; );
  128.  
  129.   
  130.   gfx_x=lx; gfx_y=ly; gfx_rectto(tx,ty);
  131.   
  132.   lx=tx+2;
  133.   xpos+=1;
  134. );  
  135.  
  136. ly=ty+2;
  137. notepos+=1;
  138. );