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:

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:

  1. CC 0 (MSB): Identifies the primary bank group.
  2. CC 32 (LSB): Identifies the sub-bank within that group.
  3. 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:

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.