From 8a4de7da53b64888b2851a9e38d3f61c4d17c8cd Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Sat, 2 Jan 2021 15:27:55 +0100 Subject: [PATCH] Add stubs for INoteExpressionController --- .../serialization/vst3/plugin-proxy.cpp | 8 ++++ src/common/serialization/vst3/plugin-proxy.h | 5 +++ .../vst3/plugin/note-expression-controller.h | 3 ++ .../bridges/vst3-impls/plugin-proxy.cpp | 45 +++++++++++++++++++ src/plugin/bridges/vst3-impls/plugin-proxy.h | 21 +++++++++ src/wine-host/bridges/vst3.cpp | 1 + src/wine-host/bridges/vst3.h | 2 + 7 files changed, 85 insertions(+) diff --git a/src/common/serialization/vst3/plugin-proxy.cpp b/src/common/serialization/vst3/plugin-proxy.cpp index 7724f60e..8f7a1de3 100644 --- a/src/common/serialization/vst3/plugin-proxy.cpp +++ b/src/common/serialization/vst3/plugin-proxy.cpp @@ -27,6 +27,7 @@ Vst3PluginProxy::ConstructArgs::ConstructArgs( connection_point_args(object), edit_controller_args(object), edit_controller_2_args(object), + note_expression_controller_args(object), plugin_base_args(object), program_list_data_args(object), unit_data_args(object), @@ -38,6 +39,8 @@ Vst3PluginProxy::Vst3PluginProxy(const ConstructArgs&& args) YaConnectionPoint(std::move(args.connection_point_args)), YaEditController(std::move(args.edit_controller_args)), YaEditController2(std::move(args.edit_controller_2_args)), + YaNoteExpressionController( + std::move(args.note_expression_controller_args)), YaPluginBase(std::move(args.plugin_base_args)), YaProgramListData(std::move(args.program_list_data_args)), YaUnitData(std::move(args.unit_data_args)), @@ -93,6 +96,11 @@ tresult PLUGIN_API Vst3PluginProxy::queryInterface(Steinberg::FIDString _iid, QUERY_INTERFACE(_iid, obj, Steinberg::Vst::IEditController2::iid, Steinberg::Vst::IEditController2) } + if (YaNoteExpressionController::supported()) { + QUERY_INTERFACE(_iid, obj, + Steinberg::Vst::INoteExpressionController::iid, + Steinberg::Vst::INoteExpressionController) + } if (YaProgramListData::supported()) { QUERY_INTERFACE(_iid, obj, Steinberg::Vst::IProgramListData::iid, Steinberg::Vst::IProgramListData) diff --git a/src/common/serialization/vst3/plugin-proxy.h b/src/common/serialization/vst3/plugin-proxy.h index 3f4eec7a..d34b5afc 100644 --- a/src/common/serialization/vst3/plugin-proxy.h +++ b/src/common/serialization/vst3/plugin-proxy.h @@ -24,6 +24,7 @@ #include "plugin/connection-point.h" #include "plugin/edit-controller-2.h" #include "plugin/edit-controller.h" +#include "plugin/note-expression-controller.h" #include "plugin/plugin-base.h" #include "plugin/program-list-data.h" #include "plugin/unit-data.h" @@ -60,6 +61,7 @@ class Vst3PluginProxy : public YaAudioProcessor, public YaConnectionPoint, public YaEditController, public YaEditController2, + public YaNoteExpressionController, public YaPluginBase, public YaProgramListData, public YaUnitData, @@ -87,6 +89,8 @@ class Vst3PluginProxy : public YaAudioProcessor, YaConnectionPoint::ConstructArgs connection_point_args; YaEditController::ConstructArgs edit_controller_args; YaEditController2::ConstructArgs edit_controller_2_args; + YaNoteExpressionController::ConstructArgs + note_expression_controller_args; YaPluginBase::ConstructArgs plugin_base_args; YaProgramListData::ConstructArgs program_list_data_args; YaUnitData::ConstructArgs unit_data_args; @@ -100,6 +104,7 @@ class Vst3PluginProxy : public YaAudioProcessor, s.object(connection_point_args); s.object(edit_controller_args); s.object(edit_controller_2_args); + s.object(note_expression_controller_args); s.object(plugin_base_args); s.object(program_list_data_args); s.object(unit_data_args); diff --git a/src/common/serialization/vst3/plugin/note-expression-controller.h b/src/common/serialization/vst3/plugin/note-expression-controller.h index 452585c1..490c49f6 100644 --- a/src/common/serialization/vst3/plugin/note-expression-controller.h +++ b/src/common/serialization/vst3/plugin/note-expression-controller.h @@ -27,6 +27,9 @@ /** * Wraps around `INoteExpressionController` for serialization purposes. This is * instantiated as part of `Vst3PluginProxy`. + * + * TODO: Check if these things are being called in the processing loop. If they + * are, handle them on the audio sockets. */ class YaNoteExpressionController : public Steinberg::Vst::INoteExpressionController { diff --git a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp index a10590d3..158e1bf4 100644 --- a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp +++ b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp @@ -413,6 +413,51 @@ tresult PLUGIN_API Vst3PluginProxyImpl::openAboutBox(TBool onlyCheck) { .instance_id = instance_id(), .only_check = onlyCheck}); } +int32 PLUGIN_API Vst3PluginProxyImpl::getNoteExpressionCount(int32 busIndex, + int16 channel) { + // TODO: Implement + bridge.logger.log( + "TODO: Implement INoteExpressionCOntroller::getNoteExpressionCount()"); + return Steinberg::kNotImplemented; +} + +tresult PLUGIN_API Vst3PluginProxyImpl::getNoteExpressionInfo( + int32 busIndex, + int16 channel, + int32 noteExpressionIndex, + Steinberg::Vst::NoteExpressionTypeInfo& info /*out*/) { + // TODO: Implement + bridge.logger.log( + "TODO: Implement INoteExpressionCOntroller::getNoteExpressionInfo()"); + return Steinberg::kNotImplemented; +} + +tresult PLUGIN_API Vst3PluginProxyImpl::getNoteExpressionStringByValue( + int32 busIndex, + int16 channel, + Steinberg::Vst::NoteExpressionTypeID id, + Steinberg::Vst::NoteExpressionValue valueNormalized /*in*/, + Steinberg::Vst::String128 string /*out*/) { + // TODO: Implement + bridge.logger.log( + "TODO: Implement " + "INoteExpressionCOntroller::getNoteExpressionStringByValue()"); + return Steinberg::kNotImplemented; +} + +tresult PLUGIN_API Vst3PluginProxyImpl::getNoteExpressionValueByString( + int32 busIndex, + int16 channel, + Steinberg::Vst::NoteExpressionTypeID id, + const Steinberg::Vst::TChar* string /*in*/, + Steinberg::Vst::NoteExpressionValue& valueNormalized /*out*/) { + // TODO: Implement + bridge.logger.log( + "TODO: Implement " + "INoteExpressionCOntroller::getNoteExpressionValueByString()"); + 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 7d60e954..f132e6c4 100644 --- a/src/plugin/bridges/vst3-impls/plugin-proxy.h +++ b/src/plugin/bridges/vst3-impls/plugin-proxy.h @@ -120,6 +120,27 @@ class Vst3PluginProxyImpl : public Vst3PluginProxy { tresult PLUGIN_API openHelp(TBool onlyCheck) override; tresult PLUGIN_API openAboutBox(TBool onlyCheck) override; + // From `INoteExpressionController` + int32 PLUGIN_API getNoteExpressionCount(int32 busIndex, + int16 channel) override; + tresult PLUGIN_API getNoteExpressionInfo( + int32 busIndex, + int16 channel, + int32 noteExpressionIndex, + Steinberg::Vst::NoteExpressionTypeInfo& info /*out*/) override; + tresult PLUGIN_API getNoteExpressionStringByValue( + int32 busIndex, + int16 channel, + Steinberg::Vst::NoteExpressionTypeID id, + Steinberg::Vst::NoteExpressionValue valueNormalized /*in*/, + Steinberg::Vst::String128 string /*out*/) override; + tresult PLUGIN_API getNoteExpressionValueByString( + int32 busIndex, + int16 channel, + Steinberg::Vst::NoteExpressionTypeID id, + const Steinberg::Vst::TChar* string /*in*/, + Steinberg::Vst::NoteExpressionValue& valueNormalized /*out*/) override; + // From `IPluginBase` tresult PLUGIN_API initialize(FUnknown* context) override; tresult PLUGIN_API terminate() override; diff --git a/src/wine-host/bridges/vst3.cpp b/src/wine-host/bridges/vst3.cpp index 2d917749..3c7b2427 100644 --- a/src/wine-host/bridges/vst3.cpp +++ b/src/wine-host/bridges/vst3.cpp @@ -35,6 +35,7 @@ InstanceInterfaces::InstanceInterfaces( connection_point(object), edit_controller(object), edit_controller_2(object), + note_expression_controller(object), plugin_base(object), unit_data(object), program_list_data(object), diff --git a/src/wine-host/bridges/vst3.h b/src/wine-host/bridges/vst3.h index c37be8aa..a6339542 100644 --- a/src/wine-host/bridges/vst3.h +++ b/src/wine-host/bridges/vst3.h @@ -114,6 +114,8 @@ struct InstanceInterfaces { Steinberg::FUnknownPtr connection_point; Steinberg::FUnknownPtr edit_controller; Steinberg::FUnknownPtr edit_controller_2; + Steinberg::FUnknownPtr + note_expression_controller; Steinberg::FUnknownPtr plugin_base; Steinberg::FUnknownPtr unit_data; Steinberg::FUnknownPtr program_list_data;