MIDI program changes

The way the PC4 handles incoming MIDI program changes is a bit complicated, and isn't completely specified in the documentation.

So, first, the PC4 always works with 16 MIDI channels.

In Program mode, the way it uses those 16 channels is very simple: each channel has a single program associated with it. You can only play only one of those 16 channels from the PC4's keyboard at a time. You choose that current channel using the Channel Up and Down buttons. You can also change the program associated with the current channel from the keyboard.

An external controller can play any of those 16 channels by sending MIDI messages. It can also change the program associated with each channel by sending a program change message on the corresponding channel.

In MULTI mode MIDI messages are routed to zones from MIDI channels in a more complicated way, and the MIDI channels used by the zone do not respond to program changes at all.

Note that if you switch into Multi mode and then back into Program mode, the same 16 channels you last chose will be restored to what they were before you switched to Multi mode.

What the PC4 does when it receives a MIDI program change depends on how you set the globals "Local Keyboard Channel" and "Program Change Mode".

Note that to the PC4, LSB and MSB bank change messages are interchangeable, by default you can use either one and ignore the other.

When "Program Change Mode" is set to "Extended", a bank change with value X together with a program change of value Y is interpreted as choosing a program with ID number X *128 + Y. As said above, by default, if you're in program mode, that will change the program associated with the channel over which the program change message was sent. So, if you're playing from the PC4 keyboard, you won't see the effect of that change until you switch into program mode and change the current channel to the one that was affected. If you're in multi mode, program changes sent over channels used by the multi are ignored.

"Local Keyboard Channel" defaults to None. If you instead set it to a channel, then it changes the behavior of program changes sent over that channel. Program changes sent over other channels will behave as normally, but program changes sent over that special channel will only set the program of the keyboard's *current* channel, if you're in program mode. If you're in multi mode, and get a program change over that special channel, then the program change value will be interpreted as the ID of a multi, and you'll be switched to that multi.

If "Local Keyboard Mode" is set to None, but "Program Change Mode" is set to "Quick Access", then program change values over any MIDI channel are acted on, and the MIDI channel they arrive over is irrelevant to the results. The value of the program change is no longer a program or multi ID, instead it references QA banks: a (bank change, program change) value of (X, YZ) references slot Z+1 of QA bank 10X+Y. So, for example, bank 3 program change 58 will refer to QA bank 35, slot 9.

That slot may hold either a multi or a program. If the program change refers to a program, then it will switch the keyboard into program mode and change the program associated with the keyboard's *current* channel. (The channel that the message was sent over is irrelevant.) If the slot holds a multi, then the keyboard switches to multi mode and the chosen multi.