desc: pedal CC-to-Note conveter

//converts pedal CC message to note-on message
//whenever you reach the specified value (on the way up only)

slider1:1<0,127,1{0 Bank Sel M,1 Mod Wheel M,2 Breath M,3,4 Foot P M,5 Porta M,6 Data Entry M,7 Vol M,8 Balance M,9,10 Pan M,11 Expression M,12 Ctrl 1 M,13 Ctrl 2 M,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,32 Bank Sel L,33 Mod Wheel L,34 Breath L,35,36 Foot P L,37 Porta L,38 Data Entry L,39 Vol L,40 Balance L,41,42 Pan L,43 Expression L,44 Ctrl 1 L,45 Ctrl 2 L,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64 Hold P sw,65 Porta sw,66 Sustenuto sw,67 Soft P sw,68 Legato P sw,69 Hold 2 P sw,70 S.Variation,71 S.Timbre,72 S.Release,73 S.Attack,74 S.Brightness,75 S.Ctrl 6,76 S.Ctrl 7,77 S.Ctrl 8,78 S.Ctrl 9,79 S.Ctrl 10,80 GP B.1 sw,81 GP B.2 sw,82 GP B.3 sw,83 GP B.4 sw,84,85,86,87,88,89,90,91 Effects Lv,92 Trem Lv,93 Chorus Lv,94 Celeste Lv,95 Phaser Lv,96 Data B. Inc,97 Data B. Dec,98 NRP L,99 NRP M,100 RP L,101 RP M,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127}>Controller source
slider2:0<0,127,1>CC value to trigger note
slider3:0<0,127,1>Output MIDI note
slider4:0<0,127,1>Output Velocity

@init
CC_MSG =11;
pedalup = 0;
CCValue = 0;

@slider
ccsrc = slider1;
minCCVal = slider2;
note = slider3;
vel = slider4;

@block
while (
  midirecv(mpos, msg1, msg23) ? (
    CCValue = (msg23/256)|0;
    statusHi = (msg1/16)|0;
    msg3 = (msg23/256)|0;
    msg2 = msg23-(msg3*256);
    (statusHi == CC_MSG && msg2 == ccsrc) ? (
      CCValue > minCCVal ? (
        CCValue > LastCCVal && trig == 0 ? (
          msg1 = 9*16;
          msg2 = note; 
          msg3 = vel;
          trig = 1;
          msg23 = (msg3*256+msg2)|0;
          midisend(mpos,msg1, msg23);
        );
      ): trig = 0;
      LastCCVal = CCValue;
    ):midisend(mpos,msg1, msg23);
  );
);
