# Banks and Selectors > Original: [Bank support](https://tttapa.github.io/Control-Surface/Doxygen/db/dbd/classBank.html) Banks allow a single physical control to address multiple MIDI parameters by switching the active bank. ## How banks work `Bank` manages N settings. Bankable elements compute their effective address as: effective_address = base_address + (bank_setting × offset) The offset is set when constructing the bank, and the base address is set per-element. ```cpp pico Bank<4> bank(2); // 4 settings, offset 2 between each ``` With base address 16, the four banks produce addresses 16, 18, 20, 22. ## Bank types - `BankType::ChangeAddress` — shifts the CC/note number - `BankType::ChangeChannel` — shifts the MIDI channel ## Selectors Selectors control which bank setting is active: | Class | Description | |-------|-------------| | `EncoderSelector` | Rotary encoder cycles banks | | `IncrementDecrementSelector` | Two buttons: up/down | | `IncrementSelector` | Single button, wraps around | | `ManyButtonsSelector` | One button per bank | | `SwitchSelector` | Two-position toggle | | `ProgramChangeSelector` | Incoming MIDI PC selects bank | ```cpp pico IncrementDecrementSelector<4> selector {bank, {2, 3}, Wrap::Wrap}; ``` ## Transposer `Transposer` is a specialized bank that offsets note numbers: ```cpp pico Transposer<-12, 12> transposer; IncrementDecrementSelector<25> transposeSelect {transposer, {2, 3}, Wrap::Clamp}; ``` ## Bankable input elements All input elements (`CCValue`, `NoteLED`, etc.) have bankable variants: ```cpp pico Bankable::CCValue<4> cc {{bank, BankType::ChangeAddress}, {16, Channel_1}}; ``` ## Bankable output elements Bankable output elements (`Bankable::NoteButton`, `Bankable::CCPotentiometer`, etc.) are not yet implemented (Phase 11). Bank switching currently works with input elements and selectors only.