Sending Midi program changes to Cubase

Cubase specific issue here. Cubase starts program change values at 1.

O-s-c starts at 0 (is this called 0 based indexing?)

This means osc sends out PC0 but cubase receives PC1.

Would it be possible/advisable /or just silly to have a setting to have o-s-c start PC messages at 1?

Have you tried monitoring the midi messages sent by OSC with another application such as rtoMidi to check what’s actually sent ? Midi program change 0 does exists, so this might just be a bug or particularity in cubase.

You can filter outgoing messages with a custom module to circumvent the issue.

if (address === '/program') {
    args[0].value -= 1;
}

From what I’ve read, there are indeed different implementations, some display 1-128, other display 0-127, the actual internal MIDI value being always 0-127 I’d rather keep the current behavior as default.

I appreciate the args[0].value -= 1; advice. I just feel it could get messy when sending lots of PC values and not having them align correctly in the Daw. Is some kind of toggle possible…I guess that would clog the interface…I think having some kind of option to match the daw’s implementation of PC messages would be great…

It could be implemented as an optional keyword option in the server’s --midi option.

Oh yes! That would be awesome!

Is it true in both directions ? When cubase sends program 1, does it actually send program 0 ?

Midi pc_offset option is available in v0.46.0. https://openstagecontrol.ammd.net/docs/midi/#setup

This seems to be an issue when using Expression Maps (unique to Cubase). It’s all working beautifully now. Thank you for the super fast implementation of pc_offset! 2 things:

We seem to have lost MIDI info in the console. Irrespective of whether pc_offset is used

And the OSC value shown is the original program change value, not the offset one.

Thanks again!

Capture

We seem to have lost MIDI info in the console. Irrespective of whether pc_offset is used

Ok it should be easy to fix.

And the OSC value shown is the original program change value, not the offset one.

It's expected, this value offset only is only applied when converting osc<>midi