From 43aeb8bc4ea3fa3f0b5c80cd76aa0144bbedf838 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 11 Oct 2023 14:39:53 +0200 Subject: [PATCH] Improve trigger handling for VST2 and VST3 Signed-off-by: falkTX --- distrho/src/DistrhoPluginVST2.cpp | 11 ++++++----- distrho/src/DistrhoPluginVST3.cpp | 8 +++++--- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/distrho/src/DistrhoPluginVST2.cpp b/distrho/src/DistrhoPluginVST2.cpp index 1941b2bc..290e8e68 100644 --- a/distrho/src/DistrhoPluginVST2.cpp +++ b/distrho/src/DistrhoPluginVST2.cpp @@ -1167,7 +1167,7 @@ private: void updateParameterOutputsAndTriggers() { - float curValue; + float curValue, defValue; for (uint32_t i=0, count=fPlugin.getParameterCount(); i < count; ++i) { @@ -1193,17 +1193,18 @@ private: } else if ((fPlugin.getParameterHints(i) & kParameterIsTrigger) == kParameterIsTrigger) { - // NOTE: no trigger support in VST parameters, simulate it here + // NOTE: no trigger parameter support in VST2, simulate it here + defValue = fPlugin.getParameterDefault(i); curValue = fPlugin.getParameterValue(i); - if (d_isEqual(curValue, fPlugin.getParameterRanges(i).def)) + if (d_isEqual(curValue, defValue)) continue; #if DISTRHO_PLUGIN_HAS_UI if (fVstUI != nullptr) - setParameterValueFromPlugin(i, curValue); + setParameterValueFromPlugin(i, defValue); #endif - fPlugin.setParameterValue(i, curValue); + fPlugin.setParameterValue(i, defValue); } else { diff --git a/distrho/src/DistrhoPluginVST3.cpp b/distrho/src/DistrhoPluginVST3.cpp index 19ce5220..9df44ca7 100644 --- a/distrho/src/DistrhoPluginVST3.cpp +++ b/distrho/src/DistrhoPluginVST3.cpp @@ -2870,7 +2870,7 @@ private: { DISTRHO_SAFE_ASSERT_RETURN(outparamsptr != nullptr,); - float curValue; + float curValue, defValue; double normalized; #if DPF_VST3_USES_SEPARATE_CONTROLLER @@ -2897,12 +2897,14 @@ private: } else if (fPlugin.isParameterTrigger(i)) { - // NOTE: no trigger support in VST3 parameters, simulate it here + // NOTE: no trigger parameter support in VST3, simulate it here + defValue = fPlugin.getParameterDefault(i); curValue = fPlugin.getParameterValue(i); - if (d_isEqual(curValue, fPlugin.getParameterDefault(i))) + if (d_isEqual(curValue, defValue)) continue; + curValue = defValue; fPlugin.setParameterValue(i, curValue); } else if (fParameterValuesChangedDuringProcessing[kVst3InternalParameterBaseCount + i])