This is my first post to the Steinberg forum - so apologies for possibly rehashing old ground, or missing the correct forum.
I am developing a simple VST3 host using the VST3SDK on macos. I am loading the VST3 Halion Sonic SE3 plugin which came as part of a Dorico Pro installation. I have had some success generating audio. However I have the following persistent issues, and could use some guidance.
What is the definitive way for the host to programmatically generate a program change? Based on searches, this is a very confusing topic. I’ve tried using LegacyMIDICCOutEvent using kCtrlProgramChange for the controller, and have tried input parameter changes, using a ParamID given by midiMapping->getMidiControllerAssignment(…, ControllerNumbers::kCtrlProgramChange, …). But these approaches are not working for me.
For instruments with keyswitches, such as “Violins 1 A Combi”, as I iterate through ProcessData blocks, I note that:
a) For the first process block, all input NoteOn events are effectively ignored.
b) On the second process block, new NoteOn events are accepted, but the first (lowest) keyswitch seems to be activated - in the case above for example, “Trills WT”.
c) On subsequent process blocks, that mentioned keyswitch is set off, new NoteOn events are accepted, and sounds seem to play normally, although I don’t know which keyswitch is active. Also, channel volume seems to work fine, using input param changes.
I don’t seem to have issues with instruments without keyswitches.
Also, does anyone have a reference point to relevant documentation (outside of that in the sdk) or host (code) examples?