diff --git a/src/common/serialization/vst3/README.md b/src/common/serialization/vst3/README.md index 18ef30f2..d3f07153 100644 --- a/src/common/serialization/vst3/README.md +++ b/src/common/serialization/vst3/README.md @@ -6,7 +6,7 @@ for more information on how the serialization works. The following interfaces are not yet implemented: -- Interfaces introduced after VST 3.6.8 +- Interfaces introduced after VST 3.6.11 - The [Presonus extensions](https://presonussoftware.com/en_US/developer), although most of these things seem to overlap with newer VST3 interfaces diff --git a/src/common/serialization/vst3/plugin-proxy.cpp b/src/common/serialization/vst3/plugin-proxy.cpp index 12432b68..0fe2e5f4 100644 --- a/src/common/serialization/vst3/plugin-proxy.cpp +++ b/src/common/serialization/vst3/plugin-proxy.cpp @@ -57,6 +57,8 @@ Vst3PluginProxy::Vst3PluginProxy(const ConstructArgs&& args) YaMidiMapping(std::move(args.midi_mapping_args)), YaNoteExpressionController( std::move(args.note_expression_controller_args)), + YaNoteExpressionPhysicalUIMapping( + std::move(args.note_expression_physical_ui_mapping_args)), YaPluginBase(std::move(args.plugin_base_args)), YaPrefetchableSupport(std::move(args.prefetchable_support_args)), YaProgramListData(std::move(args.program_list_data_args)), @@ -147,6 +149,11 @@ tresult PLUGIN_API Vst3PluginProxy::queryInterface(Steinberg::FIDString _iid, Steinberg::Vst::INoteExpressionController::iid, Steinberg::Vst::INoteExpressionController) } + if (YaNoteExpressionPhysicalUIMapping::supported()) { + QUERY_INTERFACE(_iid, obj, + Steinberg::Vst::INoteExpressionPhysicalUIMapping::iid, + Steinberg::Vst::INoteExpressionPhysicalUIMapping) + } if (YaPrefetchableSupport::supported()) { QUERY_INTERFACE(_iid, obj, Steinberg::Vst::IPrefetchableSupport::iid, Steinberg::Vst::IPrefetchableSupport) diff --git a/src/common/serialization/vst3/plugin-proxy.h b/src/common/serialization/vst3/plugin-proxy.h index 5e54fc96..8d0e3c16 100644 --- a/src/common/serialization/vst3/plugin-proxy.h +++ b/src/common/serialization/vst3/plugin-proxy.h @@ -31,6 +31,7 @@ #include "plugin/keyswitch-controller.h" #include "plugin/midi-mapping.h" #include "plugin/note-expression-controller.h" +#include "plugin/note-expression-physical-ui-mapping.h" #include "plugin/plugin-base.h" #include "plugin/prefetchable-support.h" #include "plugin/program-list-data.h" @@ -76,6 +77,7 @@ class Vst3PluginProxy : public YaAudioPresentationLatency, public YaKeyswitchController, public YaMidiMapping, public YaNoteExpressionController, + public YaNoteExpressionPhysicalUIMapping, public YaPluginBase, public YaPrefetchableSupport, public YaProgramListData, @@ -115,6 +117,8 @@ class Vst3PluginProxy : public YaAudioPresentationLatency, YaMidiMapping::ConstructArgs midi_mapping_args; YaNoteExpressionController::ConstructArgs note_expression_controller_args; + YaNoteExpressionPhysicalUIMapping::ConstructArgs + note_expression_physical_ui_mapping_args; YaPluginBase::ConstructArgs plugin_base_args; YaPrefetchableSupport::ConstructArgs prefetchable_support_args; YaProgramListData::ConstructArgs program_list_data_args; @@ -138,6 +142,7 @@ class Vst3PluginProxy : public YaAudioPresentationLatency, s.object(keyswitch_controller_args); s.object(midi_mapping_args); s.object(note_expression_controller_args); + s.object(note_expression_physical_ui_mapping_args); s.object(plugin_base_args); s.object(prefetchable_support_args); s.object(program_list_data_args); diff --git a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp index 3d6d032b..9cd386e3 100644 --- a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp +++ b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp @@ -660,6 +660,17 @@ tresult PLUGIN_API Vst3PluginProxyImpl::getNoteExpressionValueByString( } } +tresult PLUGIN_API Vst3PluginProxyImpl::getPhysicalUIMapping( + int32 busIndex, + int16 channel, + Steinberg::Vst::PhysicalUIMapList& list) { + // TODO: Implement + bridge.logger.log( + "TODO: Implement " + "INoteExpressionPhysicalUIMapping::getPhysicalUIMapping()"); + return Steinberg::kNotImplemented; +} + tresult PLUGIN_API Vst3PluginProxyImpl::initialize(FUnknown* context) { if (context) { // We will create a proxy object that that supports all the same diff --git a/src/plugin/bridges/vst3-impls/plugin-proxy.h b/src/plugin/bridges/vst3-impls/plugin-proxy.h index f2188a35..5e4d1e54 100644 --- a/src/plugin/bridges/vst3-impls/plugin-proxy.h +++ b/src/plugin/bridges/vst3-impls/plugin-proxy.h @@ -191,6 +191,12 @@ class Vst3PluginProxyImpl : public Vst3PluginProxy { const Steinberg::Vst::TChar* string /*in*/, Steinberg::Vst::NoteExpressionValue& valueNormalized /*out*/) override; + // From `INoteExpressionPhysicalUIMapping` + tresult PLUGIN_API + getPhysicalUIMapping(int32 busIndex, + int16 channel, + Steinberg::Vst::PhysicalUIMapList& list) override; + // From `IPluginBase` tresult PLUGIN_API initialize(FUnknown* context) override; tresult PLUGIN_API terminate() override;