commit 3bbbef19fe12ef5d68f2810510da1fae6fdd35ff parent 59895e9f8fcc1b035907eab29926e46827648ffc Author: falkTX <falktx@gmail.com> Date: Tue, 21 Aug 2018 20:45:14 +0200 Fix VST values from host if parameter if integer or boolean Diffstat:
M | distrho/src/DistrhoPluginVST.cpp | | | 15 | ++++++++++++++- |
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/distrho/src/DistrhoPluginVST.cpp b/distrho/src/DistrhoPluginVST.cpp @@ -906,9 +906,22 @@ public: return ranges.getNormalizedValue(fPlugin.getParameterValue(index)); } - void vst_setParameter(const int32_t index, const float value) + void vst_setParameter(const int32_t index, float value) { + const uint32_t hints(fPlugin.getParameterHints(index)); const ParameterRanges& ranges(fPlugin.getParameterRanges(index)); + + if (hints & kParameterIsBoolean) + { + const float midRange = ranges.min + (ranges.max - ranges.min) / 2.0f; + + value = value > midRange ? ranges.max : ranges.min; + } + else if (hints & kParameterIsInteger) + { + value = std::round(value); + } + const float realValue(ranges.getUnnormalizedValue(value)); fPlugin.setParameterValue(index, realValue);