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:
- CC 0 (Bank Select MSB): Acts as the coarse or higher-order value.
- CC 32 (Bank Select LSB): Acts as the fine or lower-order value.
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:
- CC 0 (MSB): 2
- CC 32 (LSB): 5
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:
- Buffering: When the synthesizer receives CC 0 and
CC 32, it stores these numbers in temporary internal memory registers
(often labeled
Pending_MSBandPending_LSB). The currently playing sound remains unchanged. - Arming: Once both bytes are read, the internal engine registers the pending target bank.
- 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:
- MSB-Only Instruments: Synths containing 128 or fewer banks often only evaluate CC 0 (MSB) and ignore CC 32 (LSB), or default the LSB to 0.
- LSB-Only Instruments: Some hardware prioritizes CC 32 for sub-bank variations and ignores CC 0.
- Manufacturer Standards: Protocols like General MIDI 2 (GM2), Roland GS, and Yamaha XG use specific conventions. For example, Yamaha XG traditionally uses CC 0 to designate voice architecture (Normal Voices vs. Drum Kits) and CC 32 to select specific variation banks.
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.