Program change parameter value change

Hi there,

Working with Cubase Essentials (trial), debugging what is going on in my plugin for implementing presets.
The value change for one program (preset) seems to be: 1 / (#programs -1). That is for 100 programs it is 0.0101010101 …
Is this parameter delta [ 1 / (#programs -1).] a general required standard other host should follow ?

If every host does a different implementation it will may become hard job to support presets across hosts and that would
make coding complex (how to know the host/version ?) For example, VSTHost sends weird values and many host don’t send program change parameters at all (FL, Carla, Tracktion).

BTW Wish there was a perpetual demo version of Cubase (like Bitwig) to keep development testing ongoing w/o needing to buy every DAW on the planet. Cubase seems to be the only host supporting program changes in a reasonable fashion. Are there any others ? The Steinberg VST test application does not support a knob to test this special parameter.

Confirmed the program changes implementation is inconsistent between major DAWS

For example for 5 programs:

Cakewalk SONAR Pro

parameter ProgramListId change to 0.000000
parameter ProgramListId change to 0.200000
parameter ProgramListId change to 0.400000
parameter ProgramListId change to 0.600000
parameter ProgramListId change to 0.800000

Cubase Elements

parameter ProgramListId change to 0.000000
parameter ProgramListId change to 0.250000
parameter ProgramListId change to 0.500000
parameter ProgramListId change to 0.750000
parameter ProgramListId change to 1.000000

So far I could only find these two host working with program parameters, other hosts could implement this differently as well.
Now that two major DAW software package have a different implementation, is there a list which host implement program changes and is there a way to detect in the plugin the host and it’s version ?

P.S: It really costs a fortune to buy all major DAWs to assure program changes work as Cubase and Cakewal both do not provide
perpetual free demo version to test VST’s. So my fate is to throw in a lot of money now to test VSTs because hosts implement things in their own way, is that correct ?

In the VST3 SDK the normalized value [0, 1] to discrete value and its inverse function discrete value to normalized value is defined like this:

double normalized = discreteValue / (double) stepCount;

Denormalize :
int discreteValue = min (stepCount, normalized * (stepCount + 1));

for example:
a value representing 100 programs, its stepCount is 99 and its possible discrete value is in [0, 99] so the conversion is like this:

double normalized = discreteValue / 99.0;
int discreteValue = min (stepCount, normalized * 100);

0 => 0
1 => 0.01010101…
2 => 0.02020202…
3 => 0.03030303…

97 => 0,9797979…
98 => 0.9898989…
99 => 1.0

[0.00, 0.01[ => 0
[0.01, 0.02[ => 1
[0.02, 0.03[ => 2
[0.03, 0.04[ => 3

[0.97, 0.98[ => 97
[0.98, 0.99[ => 98
[0.99, 1.00] => 99


i have contacted Cakewalk, and they will provide soon an new update including this fix.

This has been fixed in our upcoming 2016.09 release. Thanks for bringing this to our attention.