Questions

What is a MIDI Program Change?

A Program Change is the MIDI message that tells a device to switch to another sound, patch or preset. It carries one number, from 0 to 127, and nothing else. Send program 0 to a General MIDI device and you get the piano; send 40 and you get the violin. To reach more than 128 sounds, a Bank Select is sent first.

I make InputConfig, a free Mac app that sends and receives MIDI, so the last sections cover sending a Program Change from a button and using one to switch layouts.

On this page: 9 sections
  1. Steps
  2. Read the message
  3. Count from 0 or from 1
  4. Reach more than 128 sounds with Bank Select
  5. Tell it apart from a Control Change
  6. Send one from a button
  7. Use one to switch layouts
  8. The short version
  9. Questions

Steps

  1. Find the program number of the sound you want in the device's patch list.
  2. Check whether the device counts programs from 0 or from 1, and subtract 1 if it counts from 1.
  3. If the sound is in another bank, send Bank Select first: CC 0, then CC 32.
  4. Send the Program Change on the channel the device listens to.

Read the message

PartValueMeaning
Status byte0xC0 to 0xCFProgram Change, on channel 1 to 16
Data byte0 to 127The program number

Two bytes in all. Program 5 on channel 1 is C0 05 in hex. A Program Change has no value attached: the number is the whole message.

Download InputConfig on the Mac App StoreInputConfig is free on the Mac App Store. macOS 14 or later, no account, no tracking, open source.

Count from 0 or from 1

The message carries 0 to 127. Many keyboards and patch lists show 1 to 128. Both describe the same 128 programs, so the piano is program 0 on the wire and program 1 on the front panel. If the sound that comes up is one away from the sound you asked for, the two ends are counting from different numbers. The General MIDI instrument list shows both columns side by side.

Reach more than 128 sounds with Bank Select

A Program Change picks one of 128 programs in the current bank. Bank Select chooses the bank, and it is sent as two Control Change messages before the Program Change.

  • CC 0. Bank Select, the coarse half. Many devices use only this one.
  • CC 32. Bank Select, the fine half.
  • Then the Program Change. The bank takes effect when the next Program Change arrives.

Bank Select alone changes nothing you can hear, because it waits for the Program Change that follows. Which bank numbers a device uses is in its own manual.

Tell it apart from a Control Change

Program ChangeControl Change
What it doesSwitches to another sound or presetMoves one control: a knob, a fader, a pedal
What it carriesOne number, 0 to 127A controller number and a value, each 0 to 127
How oftenOnce, when you want the changeContinuously, while the control moves

Program Change picks the sound, and Control Change shapes it. The MIDI CC list has every controller number.

Send one from a button

On a Mac, InputConfig sends a Program Change from a game controller button, a keyboard key, a foot pedal or a MIDI pad, through its own virtual MIDI port. Each press recalls one patch by number, counted from 0. One button per patch changes sounds without a hand leaving the instrument. MIDI output has the setup.

Use one to switch layouts

It works the other way too. A Program Change coming in from a MIDI controller can be the input on an InputConfig row, where it fires once each time the patch changes, and that row can activate a preset. A patch button on the controller then flips the whole set of shortcuts its pads send. A controller's patch buttons become layout switches. MIDI to keystroke on a Mac covers it.

The short version

  • What. A two-byte message that switches sounds: status 0xC0 plus the channel, then a number from 0 to 127.
  • More than 128. Bank Select first, CC 0 and CC 32, then the Program Change.
  • Off by one. The wire counts from 0 and many screens count from 1.

One number, one channel, and the sound changes.

Questions

What is a MIDI Program Change message?

A two-byte message that tells a device to switch to another sound or preset. The first byte is 0xC0 plus the channel, and the second is the program number, 0 to 127.

What is the difference between Program Change and Control Change?

A Program Change switches to another sound and carries one number. A Control Change moves a single control, such as volume or a filter, and carries a controller number and a value.

How do I select a sound above program 128?

Send Bank Select first, as CC 0 and usually CC 32, then the Program Change. The bank numbers a device uses are listed in its manual.

Why does my Program Change select the wrong patch?

Usually an off by one. The message counts programs from 0 and many devices display them from 1, so subtract 1 from the number on the screen. If it is far off, the device is in a different bank.

How many MIDI programs are there?

128 in each bank, numbered 0 to 127 in the message. Bank Select multiplies that by the number of banks a device has.

Download InputConfig on the Mac App StoreFree. macOS 14 or later. No account, nothing leaves your Mac. Open source on GitHub.

Updated