desc:mustgroove's MIDI chorderizer
slider1:5<1,24,1>Voice 1 offset (st)
slider2:100<0,100,1>Voice 1 Velocity Scaling(%)
slider3:0<1,24,1>Voice 2 offset (st)
slider4:100<0,100,1>Voice 2 Velocity Scaling(%)
slider5:0<1,24,1>Voice 3 offset (st)
slider6:100<0,100,1>Voice 3 Velocity Scaling(%)
slider7:0<1,24,1>Voice 4 offset (st)
slider8:100<0,100,1>Voice 4 Velocity Scaling(%)
slider11:0<0,127,1>Note range low (passthru other notes)
slider12:127<0,127,1>Note range high (passthru other notes)

@init 


@slider
slider1|=0;
slider3|=0;
slider5|=0;
slider7|=0;

@block

while (
midirecv(ts,msg1,msg23) ? 
(
  m=msg1&240;
  note=msg23&127;

  (m == 8*16 || m==9*16) && note >= slider11 && note <= slider12 ? 
  (

    slider1 ? (
      note2 = note+slider1;
    ) : note2=-1;

    slider3 ?  (
      note3 = note+slider3;
    ) : note3=-1;

    slider5 ? (
      note4 = note+slider5;
    ) : note4=-1;

    slider7 ? (
      note5 = note+slider7;
    ) : note5=-1;

    (m == 9*16 && msg23>=256) ? 
    (
      vel=(msg23/256)|0;
      vel<0?vel=0:vel>=127?vel=127:vel|=0;
      ov=vel;
      vel *= 256.0;
     
   
      note >= 0 && note < 128 ? midisend(ts,9*16,note+vel); // send note on
      note2 >= 0 && note2 < 128 ? (
        sc=slider2*0.01;  vel2=ov*sc; vel2<0?vel2=0:vel2>=127?vel2=127:vel2|=0; vel2 *= 256.0;
        midisend(ts,9*16,note2+vel2); // send note on
      );
      note3 >= 0 && note3 < 128 ? (
        sc=slider4*0.01;  vel2=ov*sc; vel2<0?vel2=0:vel2>=127?vel2=127:vel2|=0; vel2 *= 256.0;
        midisend(ts,9*16,note3+vel2); // send note on
      );
      note4 >= 0 && note4 < 128 ? (
        sc=slider6*0.01;  vel2=ov*sc; vel2<0?vel2=0:vel2>=127?vel2=127:vel2|=0; vel2 *= 256.0;
        midisend(ts,9*16,note4+vel2); // send note on
      );
      note5 >= 0 && note5 < 128 ? (
        sc=slider8*0.01;  vel2=ov*sc; vel2<0?vel2=0:vel2>=127?vel2=127:vel2|=0; vel2 *= 256.0;
        midisend(ts,9*16,note5+vel2); // send note on
      );
    ) : (m == 8*16 || m == 9*16) ? (
      note >= 0 && note < 128 ? midisend(ts,8*16,note); // send note off
      note2 >= 0 && note2 < 128 ? midisend(ts,8*16,note2); // send note off
      note3 >= 0 && note3 < 128 ? midisend(ts,8*16,note3); // send note off
      note4 >= 0 && note4 < 128 ? midisend(ts,8*16,note4); // send note off
      note5 >= 0 && note5 < 128 ? midisend(ts,8*16,note5); // send note off    
    );
  ) : 
  (
    midisend(ts,msg1,msg23);
  );
  bla=1;
);
);


@sample



