Unable to call song parts via MIDI program changes


In a particular situation, I am forced to call GP song parts with MIDI messages. Luckily, this functionality is built into setlist mode. Unfortunately, I cannot get it to work.
To illustrate this, I have built a small example gigfile, which has the following contents:

  • Rackspaces
    • Rackspace1 with only one variation:
      • Default: Mapped to Bank 0 / PC 1
    • Rackspace2: with only one variation:
      • Default: Mapped to Bank 0 / PC 2
  • Songs
    • Song1 with only one part:
      • part1: Mapped to Bank 1 / PC 1
    • Song2 with two parts:
      • part2: Mapped to Bank 2 / PC 1
      • part1: Mapped to Bank 2 / PC 2

I would expect to be able to call rackspaces and/or songs via incoming Bank Select (CC0) and Program Change messages. This does work for rackspaces, however it does not work for songs. I did make sure that the messages arrive in GP (see screenshot). What am I missing here?

I am using GP 3.2.7 on Windows 10.

variationrecall-test.gig (16.9 KB)


How do your Global Midi settings look?

You should not check “Only accept change messages on specific channel”

And Important:
In Gig Performer when you set PC 1 you have to send PC 0 from your controller.


I see nothing unusual…

Is this the behavior that can be altered by checking Use zero-based PC numbers?


Banks are divided into two parts, an MSB and an LSB. MSB values are always multiples of 128

MSB values are sent using CC 0 and LSB values are sent using CC 32. So if you only send out the MSB, i.e,

CC 0 1

you have actually selected bank 128

If, for example you sent out

CC 0 1
CC 32 2

You would actually be selecting bank 130 (i.e, 128 because of your CC 0 1 message) plus 2 due to your CC 32 2 message

So Song1 (using your example) is actually bank 128 and Song2 is bank 256.

Does that help?

1 Like

CC0 Bank Select MSB (MOST significant byte) and CC32 Bank Select (LEAST significant byte) are important when switching banks.

A MIDI bank number is a combination of these two numbers where

Here are examples with MSB/LSB numbers and the actual bank selected
Then when you send the PC value you get a certain number.

000 000 000 // Default bank 0 
001 000 128 // Bank is 128
000 001 001 // This is what you set this to

That is how one constructs Program Change numbers beyond the 0-127 range in the MIDI world. The caveat is to understand that there are TWO numbers that determine the bank, both are the in range of 0…127, but one of them is MSB (jumping in increments of 128) and the another is LSB (jumping in increments of 1)

If GP displays the program change number 1 and the little “1” in the top right corner - it means that the LSB is set to 1 and MSB to 0
If you want to use the MSB (CC0) here you will have to make the bank numbers jump by 128.

Hope this helps a bit.

1 Like

That did solve the problem. Thank you very much, all of you! :smiley:

1 Like