Surge-XT MIDI Program Changes for Live Performance (Linux)

I am enjoying Ardour (8.10.0 on Raspberry Pi OS 12, on Raspberry Pi 400, if it matters).

However I finding it hard to to find good information about getting plugin instruments to work well (such as getting them to respond to program change messages).

I installed Surge-XT from https://software.opensuse.org//download.html?project=home%3Asurge-synth-team&package=surge-xt-release (current version 1.3.4) and like a good boy I read the documentation on how program changes messages work.

But program change messages did not work!

Well apparently that’s because only the LV2 version of Surge-XT offers that feature - but I had used the VST3 version (why? because that’s the only one Ardour offered when I created my track).

I don’t want to erroneously generalize, but I had a similar problem with other plugin instruments, and I think maybe this is an issue with lots of VST3 plugin instruments. Regardless, it is definitely a problem with Surge-XT VST3.

So, use Surge-XT LV2, and then you can send in bank select and program change messages (and Surge-XT will respond to them as expected). Details:

  1. Surge-XT patches are files with an fxp extension

  2. You can select patches via a bank select + program change method for any fxp files that are stored in /home//Documents/Surge XT/Patches/MIDI Programs (or one of its subdirectories) - subject to limits described below.

(a) bank 0 consists of the first 128 fxp files that are in the root of this directory; the program numbers correspond to each files alphabetic order (program N = the Nth fxp file in the alphabetical sort).

(b) bank 1-128 consists of the first 128 fxp files that are stored in the first 128 subdirectories of home//Documents/Surge XT/Patches/MIDI Programs (bank N = the Nth folder in the alphabetical sort).

Thus you can have up to 128 banks of up to 128 programs each (that’s probably enough for most people…)

Since there are only 128 banks, you only need to send the bank MSB (0-127), not the bank LSB.

But program change messages did not work!

Blame VST3 spec.

On the plugin side, there are no Patch/Program Change nor Control Change MIDI messages anymore. The host has to translate those: CCs must be mapped to plugin controls, and Patch Changes to Plugin Presets.

The former makes some sense. It prevents ambiguities of automated controls vs MIDI messages, but preset management is somewhat fragile.

Whenever you send a patch-change message, under the hood the plugin receives a [factory] preset number on the kIsProgramChange Port.