The documentation of the Steinberg VST SDK is 'sub optimal'.
Here are some questions I ran into while developing VST.NET.
- Do we need support for older methods (VST < 2.4) in VST.NET?
- What does the return value mean for SetTotalSamplesToProcess?
- What does the return value mean for StartProcess and StopProcess?
- How does HasMidiProgramsChanged work? Changed since when?
- Whats the use for BeginSetProgram and EndSetProgram?
- How does Offline processing work? Are SetTotalSamplesToProcess and ProcessVariableIO also part of offline support? What is the interaction between host and plugin for an offline task?
- What does the ReceiveVstTimeInfo CanDo string for a plugin mean?
- Can I assume that all calls to the dispatcher are not time critical (not called during performance)? Which means that ProcessReplacing and Get/SetParameter are time critical and should be optimized as much as possible?
- What is the threading model for a plugin? Can I assume that there are typically 3 threads? One for Dispatched, one for ProcessReplacing and one for Get/SetParameters? See also getCurrentProcessLevel.
- What host methods can a plugin call without specifying the AEffect struct (leaving it null)?
- How do you implement a plugin with a dynamic number of parameters?
- How do you implement a plugin with a dynamic number of input and output channels?
How does the GetChunk/SetChunk interface work? What information should be in those chunks?How does the BeginLoadProgram and BeginLoadBank work?
There doesn't seem to be any restriction on what data is put in the chunks. The beginLoadBank/Program methods are also part of the persistence call sequence. GetChunk returns a buffer with program information of either the current/active program or all programs. SetChunk should read this information back in and initialize either the current/active program or all programs. Before SetChunk is called, the beginLoadBank/Program method is called passing information on the version of the plugin that wrote the data. This will allow you to support older data versions of your plugin's data or even support reading other plugin's data. Some hosts will call GetChunk before calling beginLoadBakn/Program and SetChunk. This is an optimazation of the host to determine if the information to load is actually different than the state your plugin program(s) (are) in.