How MIDI Bank Select Accesses More Than 128 Presets
The original MIDI specification limits sound selection to 128 patches due to the 7-bit architecture of standard Program Change messages. To overcome this limitation, the MIDI Manufacturers Association introduced the Bank Select protocol, which uses standard Continuous Controller (CC) messages to organize patches into hierarchical folders or "banks." By transmitting Bank Select messages immediately before a Program Change message, modern synthesizers, virtual instruments, and sound modules can access over two million distinct sound presets across a single MIDI channel.
The Original 7-Bit Limitation
When the MIDI standard was established in 1983, sound modules rarely contained more than a few dozen sounds. Data bytes in standard MIDI channel messages were defined using 7 bits, providing a numerical range of 0 to 127. Consequently, the standard Program Change (PC) command can only address a maximum of 128 unique values (\(2^7 = 128\)). As sample libraries and digital synthesis advanced, hardware modules quickly exceeded this capacity, requiring an addressing system that retained backward compatibility with legacy MIDI hardware.
The Role of CC 0 and CC 32
Bank Select solves the addressing bottleneck by combining standard Control Change (CC) messages with the standard Program Change message. Rather than replacing the 7-bit Program Change command, Bank Select repurposes two existing MIDI CC controllers to act as bank pointers:
- CC 0 (Bank Select MSB): Represents the Most Significant Byte, providing coarse bank selection across 128 values (0–127).
- CC 32 (Bank Select LSB): Represents the Least Significant Byte, providing fine bank selection across 128 values (0–127).
Combining both 7-bit controllers creates a 14-bit addressing space (\(128 \times 128\)), yielding 16,384 possible sound banks. Because each individual bank retains the ability to hold 128 Program Change patches, the theoretical capacity expands significantly:
\[\text{16,384 Banks} \times \text{128 Patches} = \text{2,097,152 Total Presets}\]
Execution Order in MIDI Transmission
Bank Select commands do not load a sound on their own. Instead, they tell the receiving device which directory or bank to cue up. The module will not switch its active patch until it receives the final Program Change instruction.
For a sound module to properly load a patch located outside the base 128 presets, the transmitting device (such as a DAW or MIDI controller) must send data in this exact sequential order:
- CC 0 (MSB): Identifies the primary bank group.
- CC 32 (LSB): Identifies the sub-bank within that group.
- Program Change: Triggers the specific patch (0–127) within that selected bank.
If a module receives a Program Change without prior Bank Select messages, it simply swaps patches within the currently active bank.
Manufacturer Variations
While the protocol is standard, hardware manufacturers implement Bank Select according to their specific preset structures:
- MSB Only: Devices with 128 banks or fewer often only listen to CC 0 (MSB) and ignore CC 32 (LSB), allowing access to up to 16,384 sounds (\(128 \times 128\)).
- LSB Only: Some manufacturers, particularly in older legacy devices, map banks primarily through CC 32 while holding CC 0 at a constant value of 0.
- General MIDI Level 2 (GM2): The GM2 standard strictly specifies that CC 0 must be set to 121 (for melodic instruments) or 120 (for drum kits), while CC 32 dictates the specific bank variation, ensuring uniform patch recall across different brands.
By layering CC 0 and CC 32 ahead of the standard Program Change command, MIDI provides a flexible, modular addressing system that accommodates modern multi-gigabyte preset libraries while maintaining full compatibility with the core MIDI standard.