W. J. Melvin
W. J. Melvin Musician, producer, sound engineer, composer, chief of MIDI technology @beat_bars

What is Program Change?

What is Program Change?

We devoted the previous article to the Control Change MIDI message.

In conclusion — most commonly referred to as CC, this message consists of a controller number and a value ranging from 0 to 127. Most hardware encoders, such as knobs, faders, pedals, wheels and switches, will send these types of messages. A value sets the parameter in the MIDI device that receives it. Often encoders will have the ability to configure the Control Change number. This flexibility allows a single encoder to control different parameters such as volume, filter cutoff, effect mix, etc.

When using software which supports MIDI mapping, you can assign any Control Change number to any available parameter via mapping.

MainStage patches

Today we will discuss the Program Change message in detail.

This message is used to change the instrument / patch / sound, or the program — you will find different names which mean the same thing.

This is a seemingly very simple type of message, but it really is very difficult to understand, especially in connection with Bank Select messages, but this will be discussed later on.

The Program Change takes values from 0 to 127 (such values are sent in MIDI packages), but on displays in controllers, instruments and DAWs they are usually shown as 1–128. It is simply more user-friendly.

The sound module, or DAW, after receiving such a signal, switches the instrument to another one with the indicated number (or does not switch if this instrument is currently selected), e.g. Grand Piano to Alto Saxophone. The hardware modules usually have hard-coded numbers for individual sounds, while in DAWs they can be freely configured.

However, Program Change, as the name suggests, changes (or can change) something more than just the instrument. It changes “Programs” — sets of not only sounds, but also related plugins — effects, compressors, EQ settings, etc.

guitar amp sim

This is especially convenient when using e.g. a guitar amp simulator with a pedalboard. You can change the entire set of effects, the amp and cabinet, which together form one program, with one switch. You can define only one other pedal in another program — e.g. a whammy instead of a wah-wah, in order to be able to use the same controller in both programs to change the parameters of these two different effects. It is also possible to replace one pedal with an identical model, but with different settings, such as the depth and length of the reverb. What you define as “Program” is up to you.

The ease in changing Programs is key for live performances. It works well in situations when you want to change more than one parameter with one switch (contrary to CC). The key here is not so much the hardware itself as the flexibility and capabilities of its embedded software.


Let’s take the configuration of the FS2M device as an example. This is an analog footswitch adapter which transforms it into a digital MIDI footswitch. It features 3 modes for the Program Change message: Impulse, Toggle and Up/Down.

In <Impulse> mode, regardless of whether the footswitch is in the ON or OFF position, it always sends the program number assigned earlier, which is important when you have two switches and on each of them you want to have a different Program set. You can also use a single switch and assign one program number to ON, and another number to OFF — this is the <Toggle> mode. And what if you want to switch between more than 2 Programs?

You can choose the <Up/Down> mode, select the <Link switches> checkbox and then one switch will increment the program number and the second one will decrement it by the specified step (most often by 1).

Based on what we have discussed so far, it may seem that you can only choose from among 128 Programs. It is not a small number, but considering today’s sound modules, which may contain gigabytes of samples for hundreds of instruments, or thousands of synthesizer patches — this is quite a significant limitation. Fortunately, when creating MIDI specifications in the 1980s, this was taken into account. By means of a clever trick, the number of possible Programs is over 2 million (exactly 2,097,152).

MIDI banks

This procedure involves first selecting the Bank and then the Program.

One Bank is a virtual collection of 128 patches (instruments). Virtual means that it is not a memory cell, sector on the disk, directory, flash-drive, or anything physical. It’s just a group of 128 programs. They may be somehow logically related, e.g. one Bank has Piano sounds, another Horns, and yet another Strings, but this is not a rule. There can be a maximum of 16,384 Banks, which multiplied by 128 instrument sounds in each Bank gives over 2 million possible sounds (which does not necessarily mean that a given device has so many sounds, but only that it can have so many).

When a single MIDI Program Change message is sent with the program number, the recipient — be it software or hardware — already has a Bank set (to 1 by default) and selects the Program with the given number from it, which results in a change in the sound.

In order to change the Bank itself beforehand, you have to send two consecutive CC messages — the first with the controller number 0 and the second with the controller number 32 (therefore they are not standard controller numbers, as we mentioned in the previous article). The controller numbers are one aspect, while the values of parameters in these two messages together indicate the bank number. Why are two messages needed to indicate one bank number? Because in one message we can send values only in the range of 0–127. Sending two messages increases this range to 128x128, that is 16,384.

Bank select event

After sending such two messages, the MIDI device sets the Bank to the appropriate number, but it does NOT change the patch yet! Incoming Note-On messages will select and play the previously selected sound. Only after receiving the Program Change message, the appropriate Program from the Bank set using the previous CC #0 and CC #32 messages will be selected. This is the biggest difficulty in understanding how Program Change works. MIDI controllers, in order to avoid misunderstandings, when sending a Program Change event often precede it with the appropriate two CC Bank Select messages to clearly identify the program number from over 2 million possibilities.

In the following articles, we will cover the other types of Channel Voice Messages, which we have not yet discussed, and they will be: Pitch Bend and two types of Aftertouch — key pressure and channel pressure.