DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit 43aeb8bc4ea3fa3f0b5c80cd76aa0144bbedf838
parent ee3d794e09a51b1f63782cbc61da83ed8745b0fa
Author: falkTX <falktx@falktx.com>
Date:   Wed, 11 Oct 2023 14:39:26 +0200

Improve trigger handling for VST2 and VST3

Signed-off-by: falkTX <falktx@falktx.com>

Diffstat:
Mdistrho/src/DistrhoPluginVST2.cpp | 11++++++-----
Mdistrho/src/DistrhoPluginVST3.cpp | 8+++++---
2 files changed, 11 insertions(+), 8 deletions(-)

diff --git 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 @@ -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])