View Single Post
Old 01-09-2012, 11:33 AM   #21
stephane
Human being with feelings
 
Join Date: May 2010
Location: France
Posts: 97
Default

maybe this code will help you to find a solution. this one seems to work.
nb: i'm not the author of this script

Code:
desc:MIDI Keyboard Channel Switcher

// Keyboard Channel Switcher - DarkStar March 2011

in_pin:none
out_pin:none

slider1:1<1,16,1>Monitor: Channel in use
slider2:0<0,1,1>Reset all channels

/////////////////////////////////////////////////////////////////////
@init

// .................................................................. to be set by the user
//                                                                    for your own keyboard   
    first_switch = 41; // = note F1
    noof_switches = 7; // F1 .. B1
// .................................................................. 

    ext_noinit = 1; 
    out_channel = 0;

    NOTE_ON = 9;
    NOTE_OFF = 8;
    CC_MSG = 11;
    ALL_NOTES_OFF = 123;
    ALL_SOUND_OFF = 120;


// ========================================================
@slider

// ========================================================
@sample
while (
    midirecv(mpos, msg1, msg23) ? (
// --------------------------------------------- for EVERY MIDI msg received
        msg = (msg1 / 16) | 0;
        channel = 1 + msg1 - (msg * 16);     
        msg_num = msg23 & 127;
        msg_value = (msg23 / 256) | 0;

// is the note a channel change request ?
        change = (msg == NOTE_ON && msg_value > 0 && msg_num - first_switch >= 0 && msg_num - first_switch < noof_switches);  
// if so, change the channel
        change ? ( 
            msg1 = (CC_MSG * 16) + out_channel;
            midisend(mpos,msg1,ALL_NOTES_OFF);
            out_channel = msg_num - first_switch; 
            slider1 = out_channel +1;
        ):(
            msg1 = (msg * 16) + out_channel;
            midisend(mpos, msg1, msg23);
        );
 
// Reset received ? 
        slider2 == 1 ? (
            slider2 = 0;
dbg_ano +=1;
            msg1 = (CC_MSG * 16);
            midisend(mpos,msg1 + 0,ALL_NOTES_OFF);
            midisend(mpos,msg1 + 1,ALL_NOTES_OFF);
            midisend(mpos,msg1 + 2,ALL_NOTES_OFF);
            midisend(mpos,msg1 + 3,ALL_NOTES_OFF);
            midisend(mpos,msg1 + 4,ALL_NOTES_OFF);
            midisend(mpos,msg1 + 5,ALL_NOTES_OFF);
            midisend(mpos,msg1 + 6,ALL_NOTES_OFF);
            midisend(mpos,msg1 + 7,ALL_NOTES_OFF);
            midisend(mpos,msg1 + 8,ALL_NOTES_OFF);
            midisend(mpos,msg1 + 9,ALL_NOTES_OFF);
            midisend(mpos,msg1 + 10,ALL_NOTES_OFF);
            midisend(mpos,msg1 + 11,ALL_NOTES_OFF);
            midisend(mpos,msg1 + 12,ALL_NOTES_OFF);
            midisend(mpos,msg1 + 13,ALL_NOTES_OFF);
            midisend(mpos,msg1 + 14,ALL_NOTES_OFF);
            midisend(mpos,msg1 + 15,ALL_NOTES_OFF);
        );
    );
);
stephane is offline   Reply With Quote