M7 Docs Using MIDI Bank Selects & Program Changes   

When you want to select another program (AKA sound, patch, preset, ...) on your synth or effect unit via MIDI, you need to send a Program Change.

A Program Change has only 1 parameter value, which can go from 0 to 127. And so a single Program Change can select 1 out of 128 programs.

However some synths or effects have more than 128 programs.

And that's where the Bank Select message comes into play.

There are 2 Bank Select messages:

Bank Select MSB (Most Significant Byte) = MIDI Controller 0
Bank Select LSB (Least Significant Byte) = MIDI Controller 32

Also a Bank Select message has 1 parameter value which can go from 0 to 127. (It's typical for MIDI)

When combined, these Bank Select messages can select 1 out of 128 * 128 = 16384 banks!
And as each bank can contain up to 128 programs, that means more than 2 million possible programs! Not bad huh

Ok, back to reality.

For example, let's say that a synth has 512 programs. It may divide these into 4 banks of 128 programs each.

Now if you want program 160, which is the 32nd program within the second bank, you need to send a Bank Select to switch to the second bank, then send a Program Change with value 31 to select that 32nd program in the selected bank. (MIDI values start from 0 so value 31 is the 32nd value!)

In MuLab, you can insert Bank Selects and Program changes in the Event List Editor.

As in this example:

You can ignore the numeric decimals in the above picture.
MuLab is a modern DAW and allows for more precise values for MIDI Controllers than the standard 0-127 range.
But in case you're sending out MIDI, these values are rounded to the nearest integer anyway for MIDI can only handle the 0-127 data range.

Now which Bank Select and Program Change messages do you effectively have to send to select e.g. program 578 out of 2048 programs?

Well, it depends on the manufacturer of the synth/effect how they divided their programs into banks, and which Bank Select messages should be sent to select a proper bank. So you have to look that up in the documentation of your synth/effect.

Last but not least: Note that a Bank Select selects the bank for the next Program Change message. This means the program does not change until the Program Change is received, i.e. bank messages alone are not enough to change a program!

Table Of Contents