MIDI Program Change

In the thread at https://www.steinberg.net/forums/viewtopic.php?f=250&t=153909 I read that a VST3 plug-in should be able to pass through MIDI Program Change messages.

The sample code available in the VST3 SDK only shows how to implement a program list - which is limited to one (or several) lists per plugin, not per channel and midi port. Implementing this, I can select and automate the program from track automation - but adding legacy MIDI program change messages on the MIDI regions themselves, results in no parameter changes.

Could you point me in a direction where legacy MIDI program change handling for VST3 is explained?


Thanks,

Martin Saleteg
Vienna Symphonic Library

Hi,
you basically have to do the following:

  • create a parameter per channel and bus that is your program list for that channel
  • create a unit per channel/bus and set the parameter from above as the program list.

This should give you a program list per channel/bus.

I hope this helps.
Arne

Thanks Arne,

we have implemented it as you suggested, and we now have legacy Program Change working fine with VST3.


/Martin

I’m attempting to get notification of MIDI ProgramChange events, without success. I gather that this is the same requirement desired in this forum post. My VST3 plugin is running fine in Cubase: the GUI appears, all GUI controls work, automation works, CCs work, note on/offs happen, the audio is outstanding …

… but I cannot receive notification of the ProgramChange events. I understand that having plugins receive the PC directly as an event is discouraged, but it is a requirement for our plugin.

I’ve read the VST3 HTML help on this, including the sections on Units, Programs, and Multi-Timbral. Still no luck.

When the plugin defines the parameters for the Program Change in ::getParameterInfo() I’m using:

     info.flags = ParameterInfo::kCanAutomate | ParameterInfo::kIsProgramChange  | ParameterInfo::kIsList ;
     info.unitId = channel;

The “validator” test program reports 100% success, and some of the output is copied below.

After doing all that: when I run the plugin and click a ProgramChange button on the MIDI keyboard: no parameter event is received by my Processor::process() method. That method does successfully receive all other parameters such as from automation, CC, etc, so I know the overall ::process() method is working.

I’ve tried a many combinations of differing number of units and parameters … just a single unit; one unit per channel, etc. Nothing works.

Any suggestions what to look for?


[Scan Parameters]
Info:  ===Scan Parameters ====================================
....
Info:     Param 3129 (ID = 3129): [title="MIDI PC 0:0"] [unit=""] [type = D, default = 0.500000, unit = 0]
Info:     Param 3130 (ID = 3130): [title="MIDI PC 0:1"] [unit=""] [type = D, default = 0.500000, unit = 1]
Info:     Param 3131 (ID = 3131): [title="MIDI PC 0:2"] [unit=""] [type = D, default = 0.500000, unit = 2]
Info:     Param 3132 (ID = 3132): [title="MIDI PC 0:3"]  [unit=""] [type = D, default = 0.500000, unit = 3]
Info:     Param 3133 (ID = 3133): [title="MIDI PC 0:4"] [unit=""] [type = D, default = 0.500000, unit = 4]
Info:     Param 3134 (ID = 3134): [title="MIDI PC 0:5"] [unit=""] [type = D, default = 0.500000, unit = 5]
Info:     Param 3135 (ID = 3135): [title="MIDI PC 0:6"] [unit=""] [type = D, default = 0.500000, unit = 6]
Info:     Param 3136 (ID = 3136): [title="MIDI PC 0:7"] [unit=""] [type = D, default = 0.500000, unit = 7]
Info:     Param 3137 (ID = 3137): [title="MIDI PC 0:8"] [unit=""] [type = D, default = 0.500000, unit = 8]
Info:     Param 3138 (ID = 3138): [title="MIDI PC 0:9"] [unit=""] [type = D, default = 0.500000, unit = 9]
Info:     Param 3139 (ID = 3139): [title="MIDI PC 0:10"] [unit=""] [type = D, default = 0.500000, unit = 10]
Info:     Param 3140 (ID = 3140): [title="MIDI PC 0:11"] [unit=""] [type = D, default = 0.500000, unit = 11]
Info:     Param 3141 (ID = 3141): [title="MIDI PC 0:12"] [unit=""] [type = D, default = 0.500000, unit = 12]
Info:     Param 3142 (ID = 3142): [title="MIDI PC 0:13"] [unit=""] [type = D, default = 0.500000, unit = 13]
Info:     Param 3143 (ID = 3143): [title="MIDI PC 0:14"] [unit=""] [type = D, default = 0.500000, unit = 14]
Info:     Param 3144 (ID = 3144): [title="MIDI PC 0:15"] [unit=""] [type = D, default = 0.500000, unit = 15]



[MIDI Mapping]
Info:  ===MIDI Mapping ====================================
Info:  getBusInfo supplied for an unknown event bus
[Succeeded]

[MIDI Learn]
Info:  ===MIDI Learn ====================================
Info:  No MIDI Learn interface supplied!
[Succeeded]

[Scan Units]
Info:  ===Scan Units ====================================
Info:  This component has 17 unit(s).
Info:     Unit000 (ID = 0): "Part 1" (parent ID = -1, programlist ID = -1)
Info:     Unit001 (ID = 1): "Part 2" (parent ID = 0, programlist ID = 0)
Info:     Unit002 (ID = 2): "Part 3" (parent ID = 0, programlist ID = 1)
Info:     Unit003 (ID = 3): "Part 4" (parent ID = 0, programlist ID = 2)
Info:     Unit004 (ID = 4): "Part 5" (parent ID = 0, programlist ID = 3)
Info:     Unit005 (ID = 5): "Part 6" (parent ID = 0, programlist ID = 4)
Info:     Unit006 (ID = 6): "Part 7" (parent ID = 0, programlist ID = 5)
Info:     Unit007 (ID = 7): "Part 8" (parent ID = 0, programlist ID = 6)
Info:     Unit008 (ID = 8): "Part 9" (parent ID = 0, programlist ID = 7)
Info:     Unit009 (ID = 9): "Part 10" (parent ID = 0, programlist ID = 8)
Info:     Unit010 (ID = 10): "Part 11" (parent ID = 0, programlist ID = 9)
Info:     Unit011 (ID = 11): "Part 12" (parent ID = 0, programlist ID = 10)
Info:     Unit012 (ID = 12): "Part 13" (parent ID = 0, programlist ID = 11)
Info:     Unit013 (ID = 13): "Part 14" (parent ID = 0, programlist ID = 12)
Info:     Unit014 (ID = 14): "Part 15" (parent ID = 0, programlist ID = 13)
Info:     Unit015 (ID = 15): "Part 16" (parent ID = 0, programlist ID = 14)
Info:     Unit016 (ID = 16): "Part 17" (parent ID = 0, programlist ID = 15)
[Succeeded]

[Scan Programs]
Info:  ===Scan Programs ====================================
Info:  Programlist000 (ID = 0):  "Program List A" (16 programs).
Info:  Programlist000-Program000: "Program 0-0" (instrument = "Synth Lead")
Info:  Programlist000-Program001: "Program 0-1" (instrument = "Synth Lead")
Info:  Programlist000-Program002: "Program 0-2" (instrument = "Synth Lead")
Info:  Programlist000-Program003: "Program 0-3" (instrument = "Synth Lead")
Info:  Programlist000-Program004: "Program 0-4" (instrument = "Synth Lead")
Info:  Programlist000-Program005: "Program 0-5" (instrument = "Synth Lead")
Info:  Programlist000-Program006: "Program 0-6" (instrument = "Synth Lead")
Info:  Programlist000-Program007: "Program 0-7" (instrument = "Synth Lead")
Info:  Programlist000-Program008: "Program 0-8" (instrument = "Synth Lead")
Info:  Programlist000-Program009: "Program 0-9" (instrument = "Synth Lead")
Info:  Programlist000-Program010: "Program 0-10" (instrument = "Synth Lead")
Info:  Programlist000-Program011: "Program 0-11" (instrument = "Synth Lead")
Info:  Programlist000-Program012: "Program 0-12" (instrument = "Synth Lead")
Info:  Programlist000-Program013: "Program 0-13" (instrument = "Synth Lead")
Info:  Programlist000-Program014: "Program 0-14" (instrument = "Synth Lead")
Info:  Programlist000-Program015: "Program 0-15" (instrument = "Synth Lead")
Info:  Programlist001 (ID = 1):  "Program List A" (16 programs).
Info:  Programlist001-Program000: "Program 1-0" (instrument = "Synth Lead")
Info:  Programlist001-Program001: "Program 1-1" (instrument = "Synth Lead")
Info:  Programlist001-Program002: "Program 1-2" (instrument = "Synth Lead")
Info:  Programlist001-Program003: "Program 1-3" (instrument = "Synth Lead")
Info:  Programlist001-Program004: "Program 1-4" (instrument = "Synth Lead")
Info:  Programlist001-Program005: "Program 1-5" (instrument = "Synth Lead")
Info:  Programlist001-Program006: "Program 1-6" (instrument = "Synth Lead")
Info:  Programlist001-Program007: "Program 1-7" (instrument = "Synth Lead")
Info:  Programlist001-Program008: "Program 1-8" (instrument = "Synth Lead")
Info:  Programlist001-Program009: "Program 1-9" (instrument = "Synth Lead")
Info:  Programlist001-Program010: "Program 1-10" (instrument = "Synth Lead")
Info:  Programlist001-Program011: "Program 1-11" (instrument = "Synth Lead")
Info:  Programlist001-Program012: "Program 1-12" (instrument = "Synth Lead")
Info:  Programlist001-Program013: "Program 1-13" (instrument = "Synth Lead")
Info:  Programlist001-Program014: "Program 1-14" (instrument = "Synth Lead")
Info:  Programlist001-Program015: "Program 1-15" (instrument = "Synth Lead")
Info:  Programlist002 (ID = 2):  "Program List A" (16 programs).
Info:  Programlist002-Program000: "Program 2-0" (instrument = "Synth Lead")
Info:  Programlist002-Program001: "Program 2-1" (instrument = "Synth Lead")
Info:  Programlist002-Program002: "Program 2-2" (instrument = "Synth Lead")
Info:  Programlist002-Program003: "Program 2-3" (instrument = "Synth Lead")
Info:  Programlist002-Program004: "Program 2-4" (instrument = "Synth Lead")
Info:  Programlist002-Program005: "Program 2-5" (instrument = "Synth Lead")
Info:  Programlist002-Program006: "Program 2-6" (instrument = "Synth Lead")
Info:  Programlist002-Program007: "Program 2-7" (instrument = "Synth Lead")
Info:  Programlist002-Program008: "Program 2-8" (instrument = "Synth Lead")
Info:  Programlist002-Program009: "Program 2-9" (instrument = "Synth Lead")
Info:  Programlist002-Program010: "Program 2-10" (instrument = "Synth Lead")
Info:  Programlist002-Program011: "Program 2-11" (instrument = "Synth Lead")
Info:  Programlist002-Program012: "Program 2-12" (instrument = "Synth Lead")
Info:  Programlist002-Program013: "Program 2-13" (instrument = "Synth Lead")
Info:  Programlist002-Program014: "Program 2-14" (instrument = "Synth Lead")
Info:  Programlist002-Program015: "Program 2-15" (instrument = "Synth Lead")
Info:  Programlist003 (ID = 3):  "Program List A" (16 programs).
Info:  Programlist003-Program000: "Program 3-0" (instrument = "Synth Lead")
Info:  Programlist003-Program001: "Program 3-1" (instrument = "Synth Lead")
Info:  Programlist003-Program002: "Program 3-2" (instrument = "Synth Lead")
Info:  Programlist003-Program003: "Program 3-3" (instrument = "Synth Lead")
Info:  Programlist003-Program004: "Program 3-4" (instrument = "Synth Lead")
Info:  Programlist003-Program005: "Program 3-5" (instrument = "Synth Lead")
Info:  Programlist003-Program006: "Program 3-6" (instrument = "Synth Lead")
Info:  Programlist003-Program007: "Program 3-7" (instrument = "Synth Lead")
Info:  Programlist003-Program008: "Program 3-8" (instrument = "Synth Lead")
Info:  Programlist003-Program009: "Program 3-9" (instrument = "Synth Lead")
Info:  Programlist003-Program010: "Program 3-10" (instrument = "Synth Lead")
Info:  Programlist003-Program011: "Program 3-11" (instrument = "Synth Lead")
Info:  Programlist003-Program012: "Program 3-12" (instrument = "Synth Lead")
Info:  Programlist003-Program013: "Program 3-13" (instrument = "Synth Lead")
Info:  Programlist003-Program014: "Program 3-14" (instrument = "Synth Lead")
Info:  Programlist003-Program015: "Program 3-15" (instrument = "Synth Lead")
Info:  Programlist004 (ID = 4):  "Program List A" (16 programs).
Info:  Programlist004-Program000: "Program 4-0" (instrument = "Synth Lead")
Info:  Programlist004-Program001: "Program 4-1" (instrument = "Synth Lead")
Info:  Programlist004-Program002: "Program 4-2" (instrument = "Synth Lead")
Info:  Programlist004-Program003: "Program 4-3" (instrument = "Synth Lead")
Info:  Programlist004-Program004: "Program 4-4" (instrument = "Synth Lead")
Info:  Programlist004-Program005: "Program 4-5" (instrument = "Synth Lead")
Info:  Programlist004-Program006: "Program 4-6" (instrument = "Synth Lead")
Info:  Programlist004-Program007: "Program 4-7" (instrument = "Synth Lead")
Info:  Programlist004-Program008: "Program 4-8" (instrument = "Synth Lead")
Info:  Programlist004-Program009: "Program 4-9" (instrument = "Synth Lead")
Info:  Programlist004-Program010: "Program 4-10" (instrument = "Synth Lead")
Info:  Programlist004-Program011: "Program 4-11" (instrument = "Synth Lead")
Info:  Programlist004-Program012: "Program 4-12" (instrument = "Synth Lead")
Info:  Programlist004-Program013: "Program 4-13" (instrument = "Synth Lead")
Info:  Programlist004-Program014: "Program 4-14" (instrument = "Synth Lead")
Info:  Programlist004-Program015: "Program 4-15" (instrument = "Synth Lead")
Info:  Programlist005 (ID = 5):  "Program List A" (16 programs).
Info:  Programlist005-Program000: "Program 5-0" (instrument = "Synth Lead")
Info:  Programlist005-Program001: "Program 5-1" (instrument = "Synth Lead")
Info:  Programlist005-Program002: "Program 5-2" (instrument = "Synth Lead")
Info:  Programlist005-Program003: "Program 5-3" (instrument = "Synth Lead")
Info:  Programlist005-Program004: "Program 5-4" (instrument = "Synth Lead")
Info:  Programlist005-Program005: "Program 5-5" (instrument = "Synth Lead")
Info:  Programlist005-Program006: "Program 5-6" (instrument = "Synth Lead")
Info:  Programlist005-Program007: "Program 5-7" (instrument = "Synth Lead")
Info:  Programlist005-Program008: "Program 5-8" (instrument = "Synth Lead")
Info:  Programlist005-Program009: "Program 5-9" (instrument = "Synth Lead")
Info:  Programlist005-Program010: "Program 5-10" (instrument = "Synth Lead")
Info:  Programlist005-Program011: "Program 5-11" (instrument = "Synth Lead")
Info:  Programlist005-Program012: "Program 5-12" (instrument = "Synth Lead")
Info:  Programlist005-Program013: "Program 5-13" (instrument = "Synth Lead")
Info:  Programlist005-Program014: "Program 5-14" (instrument = "Synth Lead")
Info:  Programlist005-Program015: "Program 5-15" (instrument = "Synth Lead")
Info:  Programlist006 (ID = 6):  "Program List A" (16 programs).
Info:  Programlist006-Program000: "Program 6-0" (instrument = "Synth Lead")
Info:  Programlist006-Program001: "Program 6-1" (instrument = "Synth Lead")
Info:  Programlist006-Program002: "Program 6-2" (instrument = "Synth Lead")
Info:  Programlist006-Program003: "Program 6-3" (instrument = "Synth Lead")
Info:  Programlist006-Program004: "Program 6-4" (instrument = "Synth Lead")
Info:  Programlist006-Program005: "Program 6-5" (instrument = "Synth Lead")
Info:  Programlist006-Program006: "Program 6-6" (instrument = "Synth Lead")
Info:  Programlist006-Program007: "Program 6-7" (instrument = "Synth Lead")
Info:  Programlist006-Program008: "Program 6-8" (instrument = "Synth Lead")
Info:  Programlist006-Program009: "Program 6-9" (instrument = "Synth Lead")
Info:  Programlist006-Program010: "Program 6-10" (instrument = "Synth Lead")
Info:  Programlist006-Program011: "Program 6-11" (instrument = "Synth Lead")
Info:  Programlist006-Program012: "Program 6-12" (instrument = "Synth Lead")
Info:  Programlist006-Program013: "Program 6-13" (instrument = "Synth Lead")
Info:  Programlist006-Program014: "Program 6-14" (instrument = "Synth Lead")
Info:  Programlist006-Program015: "Program 6-15" (instrument = "Synth Lead")
Info:  Programlist007 (ID = 7):  "Program List A" (16 programs).
Info:  Programlist007-Program000: "Program 7-0" (instrument = "Synth Lead")
Info:  Programlist007-Program001: "Program 7-1" (instrument = "Synth Lead")
Info:  Programlist007-Program002: "Program 7-2" (instrument = "Synth Lead")
Info:  Programlist007-Program003: "Program 7-3" (instrument = "Synth Lead")
Info:  Programlist007-Program004: "Program 7-4" (instrument = "Synth Lead")
Info:  Programlist007-Program005: "Program 7-5" (instrument = "Synth Lead")
Info:  Programlist007-Program006: "Program 7-6" (instrument = "Synth Lead")
Info:  Programlist007-Program007: "Program 7-7" (instrument = "Synth Lead")
Info:  Programlist007-Program008: "Program 7-8" (instrument = "Synth Lead")
Info:  Programlist007-Program009: "Program 7-9" (instrument = "Synth Lead")
Info:  Programlist007-Program010: "Program 7-10" (instrument = "Synth Lead")
Info:  Programlist007-Program011: "Program 7-11" (instrument = "Synth Lead")
Info:  Programlist007-Program012: "Program 7-12" (instrument = "Synth Lead")
Info:  Programlist007-Program013: "Program 7-13" (instrument = "Synth Lead")
Info:  Programlist007-Program014: "Program 7-14" (instrument = "Synth Lead")
Info:  Programlist007-Program015: "Program 7-15" (instrument = "Synth Lead")
Info:  Programlist008 (ID = 8):  "Program List A" (16 programs).
Info:  Programlist008-Program000: "Program 8-0" (instrument = "Synth Lead")
Info:  Programlist008-Program001: "Program 8-1" (instrument = "Synth Lead")
Info:  Programlist008-Program002: "Program 8-2" (instrument = "Synth Lead")
Info:  Programlist008-Program003: "Program 8-3" (instrument = "Synth Lead")
Info:  Programlist008-Program004: "Program 8-4" (instrument = "Synth Lead")
Info:  Programlist008-Program005: "Program 8-5" (instrument = "Synth Lead")
Info:  Programlist008-Program006: "Program 8-6" (instrument = "Synth Lead")
Info:  Programlist008-Program007: "Program 8-7" (instrument = "Synth Lead")
Info:  Programlist008-Program008: "Program 8-8" (instrument = "Synth Lead")
Info:  Programlist008-Program009: "Program 8-9" (instrument = "Synth Lead")
Info:  Programlist008-Program010: "Program 8-10" (instrument = "Synth Lead")
Info:  Programlist008-Program011: "Program 8-11" (instrument = "Synth Lead")
Info:  Programlist008-Program012: "Program 8-12" (instrument = "Synth Lead")
Info:  Programlist008-Program013: "Program 8-13" (instrument = "Synth Lead")
Info:  Programlist008-Program014: "Program 8-14" (instrument = "Synth Lead")
Info:  Programlist008-Program015: "Program 8-15" (instrument = "Synth Lead")
Info:  Programlist009 (ID = 9):  "Program List A" (16 programs).
Info:  Programlist009-Program000: "Program 9-0" (instrument = "Synth Lead")
Info:  Programlist009-Program001: "Program 9-1" (instrument = "Synth Lead")
Info:  Programlist009-Program002: "Program 9-2" (instrument = "Synth Lead")
Info:  Programlist009-Program003: "Program 9-3" (instrument = "Synth Lead")
Info:  Programlist009-Program004: "Program 9-4" (instrument = "Synth Lead")
Info:  Programlist009-Program005: "Program 9-5" (instrument = "Synth Lead")
Info:  Programlist009-Program006: "Program 9-6" (instrument = "Synth Lead")
Info:  Programlist009-Program007: "Program 9-7" (instrument = "Synth Lead")
Info:  Programlist009-Program008: "Program 9-8" (instrument = "Synth Lead")
Info:  Programlist009-Program009: "Program 9-9" (instrument = "Synth Lead")
Info:  Programlist009-Program010: "Program 9-10" (instrument = "Synth Lead")
Info:  Programlist009-Program011: "Program 9-11" (instrument = "Synth Lead")
Info:  Programlist009-Program012: "Program 9-12" (instrument = "Synth Lead")
Info:  Programlist009-Program013: "Program 9-13" (instrument = "Synth Lead")
Info:  Programlist009-Program014: "Program 9-14" (instrument = "Synth Lead")
Info:  Programlist009-Program015: "Program 9-15" (instrument = "Synth Lead")
Info:  Programlist010 (ID = 10):  "Program List A" (16 programs).
Info:  Programlist010-Program000: "Program 10-0" (instrument = "Synth Lead")
Info:  Programlist010-Program001: "Program 10-1" (instrument = "Synth Lead")
Info:  Programlist010-Program002: "Program 10-2" (instrument = "Synth Lead")
Info:  Programlist010-Program003: "Program 10-3" (instrument = "Synth Lead")
Info:  Programlist010-Program004: "Program 10-4" (instrument = "Synth Lead")
Info:  Programlist010-Program005: "Program 10-5" (instrument = "Synth Lead")
Info:  Programlist010-Program006: "Program 10-6" (instrument = "Synth Lead")
Info:  Programlist010-Program007: "Program 10-7" (instrument = "Synth Lead")
Info:  Programlist010-Program008: "Program 10-8" (instrument = "Synth Lead")
Info:  Programlist010-Program009: "Program 10-9" (instrument = "Synth Lead")
Info:  Programlist010-Program010: "Program 10-10" (instrument = "Synth Lead")
Info:  Programlist010-Program011: "Program 10-11" (instrument = "Synth Lead")
Info:  Programlist010-Program012: "Program 10-12" (instrument = "Synth Lead")
Info:  Programlist010-Program013: "Program 10-13" (instrument = "Synth Lead")
Info:  Programlist010-Program014: "Program 10-14" (instrument = "Synth Lead")
Info:  Programlist010-Program015: "Program 10-15" (instrument = "Synth Lead")
Info:  Programlist011 (ID = 11):  "Program List A" (16 programs).
Info:  Programlist011-Program000: "Program 11-0" (instrument = "Synth Lead")
Info:  Programlist011-Program001: "Program 11-1" (instrument = "Synth Lead")
Info:  Programlist011-Program002: "Program 11-2" (instrument = "Synth Lead")
Info:  Programlist011-Program003: "Program 11-3" (instrument = "Synth Lead")
Info:  Programlist011-Program004: "Program 11-4" (instrument = "Synth Lead")
Info:  Programlist011-Program005: "Program 11-5" (instrument = "Synth Lead")
Info:  Programlist011-Program006: "Program 11-6" (instrument = "Synth Lead")
Info:  Programlist011-Program007: "Program 11-7" (instrument = "Synth Lead")
Info:  Programlist011-Program008: "Program 11-8" (instrument = "Synth Lead")
Info:  Programlist011-Program009: "Program 11-9" (instrument = "Synth Lead")
Info:  Programlist011-Program010: "Program 11-10" (instrument = "Synth Lead")
Info:  Programlist011-Program011: "Program 11-11" (instrument = "Synth Lead")
Info:  Programlist011-Program012: "Program 11-12" (instrument = "Synth Lead")
Info:  Programlist011-Program013: "Program 11-13" (instrument = "Synth Lead")
Info:  Programlist011-Program014: "Program 11-14" (instrument = "Synth Lead")
Info:  Programlist011-Program015: "Program 11-15" (instrument = "Synth Lead")
Info:  Programlist012 (ID = 12):  "Program List A" (16 programs).
Info:  Programlist012-Program000: "Program 12-0" (instrument = "Synth Lead")
Info:  Programlist012-Program001: "Program 12-1" (instrument = "Synth Lead")
Info:  Programlist012-Program002: "Program 12-2" (instrument = "Synth Lead")
Info:  Programlist012-Program003: "Program 12-3" (instrument = "Synth Lead")
Info:  Programlist012-Program004: "Program 12-4" (instrument = "Synth Lead")
Info:  Programlist012-Program005: "Program 12-5" (instrument = "Synth Lead")
Info:  Programlist012-Program006: "Program 12-6" (instrument = "Synth Lead")
Info:  Programlist012-Program007: "Program 12-7" (instrument = "Synth Lead")
Info:  Programlist012-Program008: "Program 12-8" (instrument = "Synth Lead")
Info:  Programlist012-Program009: "Program 12-9" (instrument = "Synth Lead")
Info:  Programlist012-Program010: "Program 12-10" (instrument = "Synth Lead")
Info:  Programlist012-Program011: "Program 12-11" (instrument = "Synth Lead")
Info:  Programlist012-Program012: "Program 12-12" (instrument = "Synth Lead")
Info:  Programlist012-Program013: "Program 12-13" (instrument = "Synth Lead")
Info:  Programlist012-Program014: "Program 12-14" (instrument = "Synth Lead")
Info:  Programlist012-Program015: "Program 12-15" (instrument = "Synth Lead")
Info:  Programlist013 (ID = 13):  "Program List A" (16 programs).
Info:  Programlist013-Program000: "Program 13-0" (instrument = "Synth Lead")
Info:  Programlist013-Program001: "Program 13-1" (instrument = "Synth Lead")
Info:  Programlist013-Program002: "Program 13-2" (instrument = "Synth Lead")
Info:  Programlist013-Program003: "Program 13-3" (instrument = "Synth Lead")
Info:  Programlist013-Program004: "Program 13-4" (instrument = "Synth Lead")
Info:  Programlist013-Program005: "Program 13-5" (instrument = "Synth Lead")
Info:  Programlist013-Program006: "Program 13-6" (instrument = "Synth Lead")
Info:  Programlist013-Program007: "Program 13-7" (instrument = "Synth Lead")
Info:  Programlist013-Program008: "Program 13-8" (instrument = "Synth Lead")
Info:  Programlist013-Program009: "Program 13-9" (instrument = "Synth Lead")
Info:  Programlist013-Program010: "Program 13-10" (instrument = "Synth Lead")
Info:  Programlist013-Program011: "Program 13-11" (instrument = "Synth Lead")
Info:  Programlist013-Program012: "Program 13-12" (instrument = "Synth Lead")
Info:  Programlist013-Program013: "Program 13-13" (instrument = "Synth Lead")
Info:  Programlist013-Program014: "Program 13-14" (instrument = "Synth Lead")
Info:  Programlist013-Program015: "Program 13-15" (instrument = "Synth Lead")
Info:  Programlist014 (ID = 14):  "Program List A" (16 programs).
Info:  Programlist014-Program000: "Program 14-0" (instrument = "Synth Lead")
Info:  Programlist014-Program001: "Program 14-1" (instrument = "Synth Lead")
Info:  Programlist014-Program002: "Program 14-2" (instrument = "Synth Lead")
Info:  Programlist014-Program003: "Program 14-3" (instrument = "Synth Lead")
Info:  Programlist014-Program004: "Program 14-4" (instrument = "Synth Lead")
Info:  Programlist014-Program005: "Program 14-5" (instrument = "Synth Lead")
Info:  Programlist014-Program006: "Program 14-6" (instrument = "Synth Lead")
Info:  Programlist014-Program007: "Program 14-7" (instrument = "Synth Lead")
Info:  Programlist014-Program008: "Program 14-8" (instrument = "Synth Lead")
Info:  Programlist014-Program009: "Program 14-9" (instrument = "Synth Lead")
Info:  Programlist014-Program010: "Program 14-10" (instrument = "Synth Lead")
Info:  Programlist014-Program011: "Program 14-11" (instrument = "Synth Lead")
Info:  Programlist014-Program012: "Program 14-12" (instrument = "Synth Lead")
Info:  Programlist014-Program013: "Program 14-13" (instrument = "Synth Lead")
Info:  Programlist014-Program014: "Program 14-14" (instrument = "Synth Lead")
Info:  Programlist014-Program015: "Program 14-15" (instrument = "Synth Lead")
Info:  Programlist015 (ID = 15):  "Program List A" (16 programs).
Info:  Programlist015-Program000: "Program 15-0" (instrument = "Synth Lead")
Info:  Programlist015-Program001: "Program 15-1" (instrument = "Synth Lead")
Info:  Programlist015-Program002: "Program 15-2" (instrument = "Synth Lead")
Info:  Programlist015-Program003: "Program 15-3" (instrument = "Synth Lead")
Info:  Programlist015-Program004: "Program 15-4" (instrument = "Synth Lead")
Info:  Programlist015-Program005: "Program 15-5" (instrument = "Synth Lead")
Info:  Programlist015-Program006: "Program 15-6" (instrument = "Synth Lead")
Info:  Programlist015-Program007: "Program 15-7" (instrument = "Synth Lead")
Info:  Programlist015-Program008: "Program 15-8" (instrument = "Synth Lead")
Info:  Programlist015-Program009: "Program 15-9" (instrument = "Synth Lead")
Info:  Programlist015-Program010: "Program 15-10" (instrument = "Synth Lead")
Info:  Programlist015-Program011: "Program 15-11" (instrument = "Synth Lead")
Info:  Programlist015-Program012: "Program 15-12" (instrument = "Synth Lead")
Info:  Programlist015-Program013: "Program 15-13" (instrument = "Synth Lead")
Info:  Programlist015-Program014: "Program 15-14" (instrument = "Synth Lead")
Info:  Programlist015-Program015: "Program 15-15" (instrument = "Synth Lead")
[Succeeded]

[Terminate/Initialize]
Info:  ===Terminate/Initialize ====================================
ThreadPool:  starting threads
ThreadPool:  starting threads
terminateCaptureLearnTimer:  resetting mTableEntryOfInProgressCapture to -1 
[Succeeded]

[Check Unit Structure]
Info:  ===Check Unit Structure ====================================
Info:  All units have valid parent IDs.
[Succeeded]

....

-------------------------------------------------------------
Result: 40 tests passed, 0 tests failed
-------------------------------------------------------------

Here is more detail on our situation. This is the list of parameters we are using for Program Change, as displayed by the VST3PluginTestHost. Again, the issue is that we are not receiving any notification at all of Program Change events …we want the host to relay PC events to our plugin via a parameter notification. But nothing is arriving.

Hi,
I don’t see any issues with your implementation. Maybe Cubase was not setup correctly ?

Cheers,
Arne

did you implement the IUnitInfo->getUnitByBus interface ?
this allows the host to associate a “MIDI” input bus + channel to a unitID
it should help…
Cheers

We also managed to implement this so that our plug-ins finally receive program change messages in VST3, but for some reason, if the parameters have a program list attached, Cubase will send a dummy program change message upon project reload on channel 0 (for Virtual Instruments only)… It is probably the exact same issue as when exposing presets: Cubase resets the state of the plug-in by changing the value of the program change parameter.