From fb6e5ab33fac0024c278694baf60ceccd5a5af3c Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Sat, 2 Jan 2021 23:52:40 +0100 Subject: [PATCH] Fully implement IMidiMapping --- src/common/serialization/vst3.h | 1 + src/plugin/bridges/vst3-impls/plugin-proxy.cpp | 13 ++++++++++--- src/wine-host/bridges/vst3.cpp | 13 +++++++++++++ src/wine-host/bridges/vst3.h | 1 + 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/common/serialization/vst3.h b/src/common/serialization/vst3.h index 1e9ae0a5..59fc75ec 100644 --- a/src/common/serialization/vst3.h +++ b/src/common/serialization/vst3.h @@ -85,6 +85,7 @@ using ControlRequest = YaEditController2::SetKnobMode, YaEditController2::OpenHelp, YaEditController2::OpenAboutBox, + YaMidiMapping::GetMidiControllerAssignment, YaNoteExpressionController::GetNoteExpressionCount, YaNoteExpressionController::GetNoteExpressionInfo, YaNoteExpressionController::GetNoteExpressionStringByValue, diff --git a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp index e4b752b9..0184401a 100644 --- a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp +++ b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp @@ -418,9 +418,16 @@ tresult PLUGIN_API Vst3PluginProxyImpl::getMidiControllerAssignment( int16 channel, Steinberg::Vst::CtrlNumber midiControllerNumber, Steinberg::Vst::ParamID& id /*out*/) { - // TODO: Implement - bridge.logger.log("TODO: IMidiMapping::getMidiControllerAssignment()"); - return Steinberg::kNotImplemented; + const GetMidiControllerAssignmentResponse response = + bridge.send_message(YaMidiMapping::GetMidiControllerAssignment{ + .instance_id = instance_id(), + .bus_index = busIndex, + .channel = channel, + .midi_controller_number = midiControllerNumber}); + + id = response.id; + + return response.result; } int32 PLUGIN_API Vst3PluginProxyImpl::getNoteExpressionCount(int32 busIndex, diff --git a/src/wine-host/bridges/vst3.cpp b/src/wine-host/bridges/vst3.cpp index ba60ac2c..62ddc4fa 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), + midi_mapping(object), note_expression_controller(object), plugin_base(object), unit_data(object), @@ -370,6 +371,18 @@ void Vst3Bridge::run() { return object_instances[request.instance_id] .edit_controller_2->openAboutBox(request.only_check); }, + [&](const YaMidiMapping::GetMidiControllerAssignment& request) + -> YaMidiMapping::GetMidiControllerAssignment::Response { + Steinberg::Vst::ParamID id; + const tresult result = + object_instances[request.instance_id] + .midi_mapping->getMidiControllerAssignment( + request.bus_index, request.channel, + request.midi_controller_number, id); + + return YaMidiMapping::GetMidiControllerAssignmentResponse{ + .result = result, .id = id}; + }, [&](const YaNoteExpressionController::GetNoteExpressionCount& request) -> YaNoteExpressionController::GetNoteExpressionCount:: diff --git a/src/wine-host/bridges/vst3.h b/src/wine-host/bridges/vst3.h index a6339542..38933354 100644 --- a/src/wine-host/bridges/vst3.h +++ b/src/wine-host/bridges/vst3.h @@ -114,6 +114,7 @@ struct InstanceInterfaces { Steinberg::FUnknownPtr connection_point; Steinberg::FUnknownPtr edit_controller; Steinberg::FUnknownPtr edit_controller_2; + Steinberg::FUnknownPtr midi_mapping; Steinberg::FUnknownPtr note_expression_controller; Steinberg::FUnknownPtr plugin_base;