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);
);
);
);