Program Change - How to Convert PC1 to PC0

I want to write a Scriptlet or Script that will use the ‘On ProgramChangeEvent’, then subtract 1 from the PC#, then send that PC to 8 different MIDI Channels.

I can’t seem to get off the ground because I haven’t played with scripting for a long time. Can someone plz help with the Script Code. It should be extremely simple, but I guess I am getting old and forgot how to program. LOL!

Send out to different MIDI channels is easy, there is a channel constrainer Plugin where you can map channels.

And here the scriptlet code

//Called when a program change message is received
On ProgramChangeEvent(m : ProgramChangeMessage)
 SendNow(MakeProgramChangeMessage(GetProgramChangeNumber(m)-1))
End
2 Likes

BEAUTIFUL. That is exactly what I want to do. Much appreciated!

Use the scriptlet and the MIDI Channel constrainer.

What is the syntax for sending to MIDI Channel 8?

This is done by the MIDI Channel Constrainer Plugin.

The orange plugins connected to the scriptlet.
Open the MIDI Channel constrainer Plugin to set the mapping of Channels.

This is well documented in the user documentation.

Thanks, I have done it with the MIDI Channel Constrainer but I also can do it directly:

SendNow(MakeProgramChangeMessageEx(GetProgramChangeNumber(m)-1, 8))

The Advantage of MIDI Channel Constrainer is, you can change the settings via mapped widgets.
And you can block MIDI Traffic when needed.

@pianopaul I have a Rackspace that is using 8 DEXED plugins. I am trying to simulate a TX816 just for practice. I want to be able to display the patch name on a Text Label Widget, but it doesn’t seem to be offered:

image

Do you know any way around this?

Sorry there is only a very stupid workaround.
In scripting send a pc message to the plugin and as you know what preset you choose you set the label via scripting…

I have never seen a plugin provide its current patch name as a host parameter

Recently, I came across the function “GetGPPresetList”. Wow, how useful is this!

I saw this function used in the following context:

Var
MYPLUGIN : PluginBlock
PRESETS : String Array

Initialization
PRESETS = GetGPPresetList(MYPLUGIN, 0)
End

This worked when using the plugin “TripleCheese”, but I cannot get it to work using other plugins?

For reference: see RackSpace “Select Preset via Widget”

Had you created GP User presets for the other plugins?

Could it be that it is related to this?

Count from zero or from one

MIDI Program Change messages always go from 0 to 127. Since some hardware and software devices count the first program change as PC0 (the range is 0-127) and the others as PC1 (the range is 1-128), Gig Performer allows you to set the starting point for display purposes. This behavior can be changed in the Global MIDI Options:

I am not sure what you are asking, “Had you created GP User presets for the other plugins?”?

What is a “GP User Preset” and how do I create one?

I am aware of “GetActivePreset” and “GetGPPresetListCount”, but they do not retrieve the names of the Plugin’s Presets for me?

Here a link to the documentation

That is exactly the tool I need and of course answers my questions. :slight_smile:
Now, I just have to create my own list as the Plugin itself as David says, will most likely not provide the names of its Presets.

Thanks you. I am a happy camper now!

There’s lots of useful stuff in the documentation :innocent:

2 Likes

You are assuming I can read! :rofl:

Actually, I can’t believe I have not come across this sooner … as I use the hell out of GP and love it!

I think it is time for a re-read. :slight_smile: