English

MIDI Program Change: Switch Patches Without Guessing the Message

Program Change bytes 0 and 4 placed before the same middle-C note.

A MIDI Program Change selects a patch on the receiving channel. It is a channel voice message with one data byte, not a Control Change number. Interfaces sometimes label the control “program,” “patch,” “PC” or “preset.” Those labels do not turn the message into CC0, CC32 or another controller.

Use this page when you need to change the sound with Program Change alone. If the correct sound lives in another bank, continue with MIDI Bank Select after you confirm Program Change itself is arriving.

Program Change is not Control Change

MessageTypical status (channel 1)DataJob
Program ChangeC0program 0–127Choose a patch in the active bank
Control ChangeB0controller number + valueMove continuous or switch controls
Bank Select MSB/LSBB0 with CC0 / CC32bank componentsChoose which bank the next Program Change addresses

The MIDI Association summary of MIDI 1.0 messages lists Program Change separately from Control Change. A “program change CC” search often mixes those families. Inspect the status byte or the event-list type rather than searching only the controller table.

Check numbering before you edit

Receivers document program data as 0–127 or as display numbers 1–128. Sending data byte 4 may appear as “program 5” in a one-based list. Confirm the instrument’s convention before adding or subtracting one. HARMAN’s MIDI programming overview shows zero-based program data in the message itself.

Also confirm the channel. A Program Change on channel 2 will not retarget an instrument listening only on channel 1.

Compare two constructed examples

Download program-change-0.mid and program-change-4.mid. Both hold middle C (note 60, velocity 80) for one beat at 120 BPM after a Program Change at tick 0. They differ only in the program data byte: 0 versus 4. Neither file includes Bank Select.

FileProgram dataNote
program-change-00Note 60 from tick 480 to 960
program-change-44Same note timing

Import each into a project copy aimed at a GM-compatible or documented multi-timbral instrument. Inspect the event list before auditioning. A different sound between the two files shows that Program Change is reaching a mapped patch table. An identical sound does not prove the message failed; the receiver may ignore unused programs or map both numbers to the same preset.

These are original constructed files checked with a MIDI parser. They do not install a manufacturer bank or prove how your particular synth labels programs.

When Program Change seems ignored

  1. Watch a MIDI monitor while triggering the event. Confirm Program Change, channel and value.
  2. Check whether a later region sends another Program Change or restores a track preset on playback.
  3. If ordinary programs work but the sound you need does not, look for a bank requirement and use the bank-select order guide.
  4. Distinguish host preset recall from MIDI Program Change. Opening a plug-in’s preset browser may not emit a MIDI program message to another device.
  5. After export, reopen the file and verify the Program Change remains. SoundToMIDI’s note editor does not preserve arbitrary program automation on re-export.

For renaming or remapping instruments in an already correct MIDI file, see changing a MIDI instrument. If the problem is silence rather than the wrong patch, start with MIDI file no sound.