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 / MIDI / midi_note_repeater < prev    next >
Text File  |  2007-02-12  |  1KB  |  60 lines

  1. desc:simple MIDI note repeater
  2. slider1:1<0.1,4>size (beats)
  3.  
  4. @init 
  5. status=0;
  6. status2=128;
  7. memset(status,-1,128);
  8. memset(status2,0,128);
  9.  
  10. @slider 
  11. div=slider1;
  12.  
  13. @block
  14.  
  15. while (
  16. midirecv(ts,msg1,msg23) ? 
  17. (
  18.   m=msg1&240;
  19.   note=msg23&127;
  20.   (m == 9*16 && msg23>=256) ? (
  21.     status[note]=0;
  22.     vel=(msg23/256);
  23.     vel<1?vel=1:vel>=127?vel=127:vel|=0;
  24.     status2[note]=vel;
  25.     midisend(ts,9*16,note+vel*256); // send note on
  26.   ) : (m == 8*16 || m == 9*16) ? (
  27.     status[note]=-1;
  28.     status2[note]>0.0 ? (
  29.       midisend(ts,8*16,note); // send note off
  30.       status2[note]=0;
  31.     );
  32.   ) : (
  33.     midisend(ts,msg1,msg23); 
  34.   );
  35.   bla=1;
  36. );
  37. );
  38.  
  39. inc = samplesblock/srate*(tempo/60)*2/div;
  40. x=0;
  41. loop(128,
  42.   status[x]>=0.0 ? 
  43.   (
  44.     status[x] += inc;
  45.     status[x] >= 1.0 ? 
  46.     (
  47.       status[x] -= 1.0;
  48.       status2[x]>0.0 ? midisend(0,8*16,x) : midisend(0,9*16,x - status2[x]*256); 
  49.       status2[x]*=-1;
  50.     );
  51.   );
  52.   x+=1;
  53. );
  54.  
  55.  
  56. @sample
  57.  
  58.  
  59.  
  60.