From 7fdf646270bc3bc03d0e04d7f8d3555ea13ea961 Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Sat, 16 Jan 2021 14:25:00 +0100 Subject: [PATCH] Fully implement IMidiLearn --- src/common/serialization/vst3.h | 1 + src/plugin/bridges/vst3-impls/plugin-proxy.cpp | 9 +++++---- src/wine-host/bridges/vst3.cpp | 7 +++++++ src/wine-host/bridges/vst3.h | 1 + 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/common/serialization/vst3.h b/src/common/serialization/vst3.h index c03ef239..856fd747 100644 --- a/src/common/serialization/vst3.h +++ b/src/common/serialization/vst3.h @@ -95,6 +95,7 @@ using ControlRequest = YaInfoListener::SetChannelContextInfos, YaKeyswitchController::GetKeyswitchCount, YaKeyswitchController::GetKeyswitchInfo, + YaMidiLearn::OnLiveMIDIControllerInput, YaMidiMapping::GetMidiControllerAssignment, YaNoteExpressionController::GetNoteExpressionCount, YaNoteExpressionController::GetNoteExpressionInfo, diff --git a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp index 54f1e219..0677efbf 100644 --- a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp +++ b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp @@ -566,10 +566,11 @@ tresult PLUGIN_API Vst3PluginProxyImpl::onLiveMIDIControllerInput( int32 busIndex, int16 channel, Steinberg::Vst::CtrlNumber midiCC) { - // TODO: Implement - bridge.logger.log( - "TODO: Implement IMidiLearn::onLiveMIDIControllerInput()"); - return Steinberg::kNotImplemented; + return bridge.send_message( + YaMidiLearn::OnLiveMIDIControllerInput{.instance_id = instance_id(), + .bus_index = busIndex, + .channel = channel, + .midi_cc = midiCC}); } tresult PLUGIN_API Vst3PluginProxyImpl::getMidiControllerAssignment( diff --git a/src/wine-host/bridges/vst3.cpp b/src/wine-host/bridges/vst3.cpp index 33f5833c..81e89898 100644 --- a/src/wine-host/bridges/vst3.cpp +++ b/src/wine-host/bridges/vst3.cpp @@ -49,6 +49,7 @@ InstanceInterfaces::InstanceInterfaces( edit_controller_host_editing(object), info_listener(object), keyswitch_controller(object), + midi_learn(object), midi_mapping(object), note_expression_controller(object), note_expression_physical_ui_mapping(object), @@ -465,6 +466,12 @@ void Vst3Bridge::run() { return YaKeyswitchController::GetKeyswitchInfoResponse{ .result = result, .info = std::move(info)}; }, + [&](const YaMidiLearn::OnLiveMIDIControllerInput& request) + -> YaMidiLearn::OnLiveMIDIControllerInput::Response { + return object_instances[request.instance_id] + .midi_learn->onLiveMIDIControllerInput( + request.bus_index, request.channel, request.midi_cc); + }, [&](const YaMidiMapping::GetMidiControllerAssignment& request) -> YaMidiMapping::GetMidiControllerAssignment::Response { Steinberg::Vst::ParamID id; diff --git a/src/wine-host/bridges/vst3.h b/src/wine-host/bridges/vst3.h index b767200a..ce2a9947 100644 --- a/src/wine-host/bridges/vst3.h +++ b/src/wine-host/bridges/vst3.h @@ -161,6 +161,7 @@ struct InstanceInterfaces { info_listener; Steinberg::FUnknownPtr keyswitch_controller; + Steinberg::FUnknownPtr midi_learn; Steinberg::FUnknownPtr midi_mapping; Steinberg::FUnknownPtr note_expression_controller;