From 77719d788e530cb7a976f0bf95e5cc0e17518f77 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Mon, 8 Feb 2021 20:12:48 +0100 Subject: [PATCH] Keep CC assignments in array, so they may be reassigned --- plugins/vst/SfizzVstController.cpp | 45 +++++++++++++++++++----------- plugins/vst/SfizzVstController.h | 2 ++ plugins/vst/SfizzVstParameters.h | 8 ++---- 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/plugins/vst/SfizzVstController.cpp b/plugins/vst/SfizzVstController.cpp index c1ab5c73..122936e1 100644 --- a/plugins/vst/SfizzVstController.cpp +++ b/plugins/vst/SfizzVstController.cpp @@ -9,7 +9,6 @@ #include "SfizzVstParameters.h" #include "base/source/fstreamer.h" #include "base/source/updatehandler.h" -#include "pluginterfaces/vst/ivstmidicontrollers.h" tresult PLUGIN_API SfizzVstControllerNoUi::initialize(FUnknown* context) { @@ -65,7 +64,7 @@ tresult PLUGIN_API SfizzVstControllerNoUi::initialize(FUnknown* context) parameters.addParameter(Steinberg::String("Pitch bend"), nullptr, 0, 0.5, 0, pid++, Vst::kRootUnitId); // MIDI controllers - for (unsigned i = 0; i < kNumControllerParams; ++i) { + for (unsigned i = 0; i < sfz::config::numCCs; ++i) { Steinberg::String title; Steinberg::String shortTitle; title.printf("Controller %u", i); @@ -76,6 +75,24 @@ tresult PLUGIN_API SfizzVstControllerNoUi::initialize(FUnknown* context) pid++, Vst::kRootUnitId, shortTitle); } + // Initial MIDI mapping + for (int32 i = 0; i < Vst::kCountCtrlNumber; ++i) { + Vst::ParamID id = Vst::kNoParamId; + switch (i) { + case Vst::kAfterTouch: + id = kPidMidiAftertouch; + break; + case Vst::kPitchBend: + id = kPidMidiPitchBend; + break; + default: + if (i < 128) + id = kPidMidiCC0 + i; + break; + } + midiMapping_[i] = id; + } + return kResultTrue; } @@ -86,22 +103,16 @@ tresult PLUGIN_API SfizzVstControllerNoUi::terminate() tresult PLUGIN_API SfizzVstControllerNoUi::getMidiControllerAssignment(int32 busIndex, int16 channel, Vst::CtrlNumber midiControllerNumber, Vst::ParamID& id) { - switch (midiControllerNumber) { - case Vst::kAfterTouch: - id = kPidMidiAftertouch; - return kResultTrue; - - case Vst::kPitchBend: - id = kPidMidiPitchBend; - return kResultTrue; - - default: - if (midiControllerNumber < 0 || midiControllerNumber >= kNumControllerParams) - return kResultFalse; - - id = kPidMidiCC0 + midiControllerNumber; - return kResultTrue; + if (midiControllerNumber < 0 || midiControllerNumber >= Vst::kCountCtrlNumber) { + id = Vst::kNoParamId; + return kResultFalse; } + + id = midiMapping_[midiControllerNumber]; + if (id == Vst::kNoParamId) + return kResultFalse; + + return kResultTrue; } tresult PLUGIN_API SfizzVstControllerNoUi::getParamStringByValue(Vst::ParamID tag, Vst::ParamValue valueNormalized, Vst::String128 string) diff --git a/plugins/vst/SfizzVstController.h b/plugins/vst/SfizzVstController.h index 2365417b..2c207e23 100644 --- a/plugins/vst/SfizzVstController.h +++ b/plugins/vst/SfizzVstController.h @@ -9,6 +9,7 @@ #include "SfizzVstUpdates.h" #include "public.sdk/source/vst/vsteditcontroller.h" #include "public.sdk/source/vst/vstparameters.h" +#include "pluginterfaces/vst/ivstmidicontrollers.h" #include "vstgui/plugin-bindings/vst3editor.h" #include #include @@ -49,6 +50,7 @@ protected: Steinberg::IPtr scalaPathUpdate_; Steinberg::IPtr processorStateUpdate_; Steinberg::IPtr playStateUpdate_; + Vst::ParamID midiMapping_[Vst::kCountCtrlNumber] {}; }; class SfizzVstController : public SfizzVstControllerNoUi, public VSTGUI::VST3EditorDelegate { diff --git a/plugins/vst/SfizzVstParameters.h b/plugins/vst/SfizzVstParameters.h index abaa55e6..7d5c5253 100644 --- a/plugins/vst/SfizzVstParameters.h +++ b/plugins/vst/SfizzVstParameters.h @@ -5,16 +5,12 @@ // If not, contact the sfizz maintainers at https://github.com/sfztools/sfizz #pragma once +#include "sfizz/Config.h" #include "public.sdk/source/vst/vstparameters.h" #include using namespace Steinberg; -// number of MIDI CC -enum { - kNumControllerParams = 128, -}; - // parameters enum { kPidVolume, @@ -27,7 +23,7 @@ enum { kPidMidiAftertouch, kPidMidiPitchBend, kPidMidiCC0, - kPidMidiCCLast = kPidMidiCC0 + kNumControllerParams - 1, + kPidMidiCCLast = kPidMidiCC0 + sfz::config::numCCs - 1, /* Reserved */ };