# VST3 interfaces See [docs/vst3.md](https://github.com/robbert-vdh/yabridge/blob/master/docs/vst3.md) for more information on how the serialization works. The following interfaces are not yet implemented: - Every interface introduced after VST 3.1.0, although most of the VST 3.5.0 interfaces have already been implemented - The [Presonus extensions](https://presonussoftware.com/en_US/developer), although most of these things seem to overlap with newer VST3 interfaces VST3 plugin interfaces are implemented as follows: | yabridge class | Included in | Interfaces | | ----------------------------- | ------------------- | ------------------------------------------------------ | | `YaPluginFactory` | | `IPluginFactory`, `IPluginFactory2`, `IPluginFactory3` | | `Vst3ConnectionPointProxy` | | `IConnectionPoint` through `YaConnectionPoint` | | `Vst3PlugViewProxy` | | All of the below: | | `YaParameterFinder` | `Vst3PlugViewProxy` | `IParameterFinder` | | `YaPlugView` | `Vst3PlugViewProxy` | `IPlugView` | | `Vst3PluginProxy` | | All of the below: | | `YaAudioPresentationLatency` | `Vst3PluginProxy` | `IAudioPresentationLatency` | | `YaAudioProcessor` | `Vst3PluginProxy` | `IAudioProcessor` | | `YaComponent` | `Vst3PluginProxy` | `IComponent` | | `YaConnectionPoint` | `Vst3PluginProxy` | `IConnectionPoint` | | `YaEditController` | `Vst3PluginProxy` | `IEditController` | | `YaEditController2` | `Vst3PluginProxy` | `IEditController2` | | `YaEditControllerHostEditing` | `Vst3PluginProxy` | `IEditControllerHostEditing` | | `YaKeyswitchController` | `Vst3PluginProxy` | `IKeyswitchController` | | `YaMidiMapping` | `Vst3PluginProxy` | `IMidiMapping` | | `YaNoteExpressionController` | `Vst3PluginProxy` | `INoteExpressionController` | | `YaPluginBase` | `Vst3PluginProxy` | `IPluginBase` | | `YaProgramListData` | `Vst3PluginProxy` | `IProgramListData` | | `YaUnitData` | `Vst3PluginProxy` | `IUnitData` | | `YaUnitInfo` | `Vst3PluginProxy` | `IUnitInfo` | VST3 host interfaces are implemented as follows: | yabridge class | Included in | Interfaces | | --------------------------- | --------------------------- | -------------------- | | `Vst3HostContextProxy` | | All of the below: | | `YaHostApplication` | `Vst3HostContextProxy` | `IHostApplication` | | `Vst3ComponentHandlerProxy` | | All of the below: | | `YaComponentHandler` | `Vst3ComponentHandlerProxy` | `IComponentHandler` | | `YaComponentHandler2` | `Vst3ComponentHandlerProxy` | `IComponentHandler2` | | `YaComponentHandler3` | `Vst3ComponentHandlerProxy` | `IComponentHandler3` | | `YaUnitHandler` | `Vst3ComponentHandlerProxy` | `IUnitHandler` | | `Vst3ContextMenuProxy` | | All of the below: | | `YaContextMenu` | `Vst3ContextMenuProxy` | `IContextMenu` | | `Vst3PlugFrameProxy` | | All of the below: | | `YaPlugFrame` | `Vst3PlugFrameProxy` | `IPlugFrame` | The following host interfaces are passed as function arguments and are thus also implemented for serialization purposes: | yabridge class | Interfaces | Notes | | --------------------- | -------------------- | --------------------------------------------------------------------- | | `YaAttributeList` | `IAttributeList` | | | `YaContextMenuTarget` | `IContextMenuTarget` | Used in `YaContextMenu` to proxy specific menu items | | `YaEventList` | `IEventList` | Comes with a lot of serialization wrappers around the related structs | | `YaMessage` | `IMessage` | | | `YaMessagePtr` | `IMessage` | Should be used in inter process communication to exchange messages | | `YaParameterChanges` | `IParameterChanges` | | | `YaParamValueQueue` | `IParamValueQueue` | | | `VectorStream` | `IBStream` | Used for serializing data streams | And finally `YaProcessData` uses the above along with `YaAudioBusBuffers` to wrap around `ProcessData`.