Understanding MIDI CC 0 and CC 32 Bank Select

Standard MIDI Program Change commands can only recall up to 128 presets, creating a severe bottleneck for modern hardware and software instruments with extensive sound libraries. MIDI Continuous Controllers CC 0 and CC 32 solve this limitation by serving as Bank Select controllers—specifically Bank Select MSB (Most Significant Byte) and Bank Select LSB (Least Significant Byte). Working directly alongside standard Program Change messages, these two controllers allow instruments to organize, address, and access thousands of sound banks and sub-banks.

The 128-Preset Limitation

The original MIDI 1.0 specification allocates 7 bits of data to Program Change (PC) messages. Because \(2^7\) equals 128, a single MIDI channel can natively address values only from 0 to 127. While sufficient for early synthesizers, modern sound modules and virtual instruments often host thousands of patches, requiring an expanded addressing scheme.

How CC 0 and CC 32 Function Together

To expand patch memory without rewriting the core MIDI protocol, the MIDI Manufacturers Association defined CC 0 and CC 32 as Bank Select controllers. Both use 7-bit values (0–127) and work in tandem using a dual-byte, coarse/fine adjustment hierarchy:

By pairing CC 0 (128 possibilities) with CC 32 (128 possibilities), MIDI creates a 14-bit addressing system yielding 16,384 possible banks (\(128 \times 128\)). Because each of these banks can contain 128 individual Program Change presets, a system can theoretically address up to 2,097,152 unique presets per MIDI channel.

Sub-Bank Navigation Architecture

In practice, hardware synthesizers and sample libraries use CC 32 to organize variations of a central instrument category. For example, a manufacturer might configure sounds using the following hierarchy:

  1. CC 0 = 0: Acoustic Instruments (Main Bank)
    • CC 32 = 0: Grand Pianos (Sub-bank 1)
    • CC 32 = 1: Electric Pianos (Sub-bank 2)
    • CC 32 = 2: Organs (Sub-bank 3)
  2. CC 0 = 1: Synthesizers (Main Bank)
    • CC 32 = 0: Bass Synths (Sub-bank 1)
    • CC 32 = 1: Lead Synths (Sub-bank 2)
    • CC 32 = 2: Pad Synths (Sub-bank 3)

In this structure, adjusting CC 32 allows the user to switch between specialized sub-banks within a primary instrument collection.

Required Transmission Order

MIDI devices typically do not load a patch immediately upon receiving CC 0 or CC 32. Instead, the device buffers these values until it receives a Program Change command. To successfully load a preset from a specific sub-bank, data must be transmitted in this exact sequence:

  1. Send CC 0 (Value 0–127): Selects the target master bank.
  2. Send CC 32 (Value 0–127): Selects the target sub-bank within that master bank.
  3. Send Program Change (Value 0–127): Activates the specific patch within that sub-bank and switches the sound engine to the new preset.

If this sequence is interrupted or sent out of order, the synthesizer may either switch to an unintended sound within the currently active bank or ignore the bank change request entirely.