Keep CC assignments in array, so they may be reassigned

This commit is contained in:
Jean Pierre Cimalando 2021-02-08 20:12:48 +01:00
parent 89a6830e1e
commit 77719d788e
3 changed files with 32 additions and 23 deletions

View file

@ -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)

View file

@ -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 <sfizz_message.h>
#include <mutex>
@ -49,6 +50,7 @@ protected:
Steinberg::IPtr<FilePathUpdate> scalaPathUpdate_;
Steinberg::IPtr<ProcessorStateUpdate> processorStateUpdate_;
Steinberg::IPtr<PlayStateUpdate> playStateUpdate_;
Vst::ParamID midiMapping_[Vst::kCountCtrlNumber] {};
};
class SfizzVstController : public SfizzVstControllerNoUi, public VSTGUI::VST3EditorDelegate {

View file

@ -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 <stdexcept>
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 */
};