How Synths Evaluate MIDI Bank Select MSB and LSB

Standard MIDI Program Change messages are limited to accessing only 128 sounds, a restriction modern synthesizers overcome using MIDI Bank Select. By combining two standard Control Change (CC) messages—Most Significant Byte (MSB, CC 0) and Least Significant Byte (LSB, CC 32)—a synthesizer can address up to 16,384 banks, each containing 128 patches. This article explains how a synthesizer receives, calculates, and applies these two 7-bit values to execute a seamless sound bank switch.

The 7-Bit Constraint and the 14-Bit Solution

MIDI 1.0 transmits data bytes using 7-bit integers, restricting any single parameter to a range between 0 and 127. Consequently, a standalone Program Change (PC) command can only call up 128 presets (0–127).

To expand sound capacity, the MIDI specification allocates two continuous controllers to act as a coarse/fine tuning pair for preset banks:

When combined, these two 7-bit values form a single 14-bit integer, expanding the addressing space to \(128 \times 128 = 16,384\) potential banks.

The Mathematical Evaluation

When a synthesizer receives CC 0 and CC 32, its internal microprocessor evaluates the combined bank index using bitwise operations or simple arithmetic:

\[\text{Bank Number} = (\text{MSB} \times 128) + \text{LSB}\]

In binary and microcode execution, this is handled via a 7-bit left shift on the MSB, followed by a bitwise OR operation with the LSB:

\[\text{Bank Number} = (\text{MSB} \ll 7) \mid \text{LSB}\]

Example Calculation:

If a sequencer transmits:

The synthesizer evaluates the target bank as: \[(2 \times 128) + 5 = 261\]

The instrument now targets Bank 261.

Staging and Execution via Program Change

A critical architectural rule of MIDI Bank Select is that receiving CC 0 or CC 32 does not immediately switch the active sound. Immediate switching could cause audio dropouts, voice stealing, or abrupt tone cutoffs while a sequence is running.

Instead, the evaluation follows a staged three-step process:

  1. Buffering: When the synthesizer receives CC 0 and CC 32, it stores these numbers in temporary internal memory registers (often labeled Pending_MSB and Pending_LSB). The currently playing sound remains unchanged.
  2. Arming: Once both bytes are read, the internal engine registers the pending target bank.
  3. Execution: The sound engine executes the bank switch only when it receives a standard Program Change message. At that moment, the synthesizer loads the patch designated by the Program Change number directly from the pre-calculated bank address.
[CC 0 (MSB)]  ---> Stores in MSB register
[CC 32 (LSB)] ---> Stores in LSB register (Bank calculated)
[Program Change] ---> Synthesizer loads Patch X from Bank Y into voice architecture

Hardware Implementation and Variations

Synthesizer manufacturers implement the MSB/LSB evaluation according to the architecture and memory layout of their instruments:

Regardless of whether a device utilizes all 16,384 banks, the evaluation mechanism remains identical: the synthesizer pairs the coarse 7-bit MSB and fine 7-bit LSB into a unified 14-bit index, held in a buffer until the next Program Change message triggers the sound load.