diff options
author | falkTX <falktx@gmail.com> | 2018-08-21 20:45:41 +0200 |
---|---|---|
committer | falkTX <falktx@gmail.com> | 2018-08-21 20:45:41 +0200 |
commit | 3bbbef19fe12ef5d68f2810510da1fae6fdd35ff (patch) | |
tree | 7dfb8473021223d71df14d86cfc2bd3ed9387941 | |
parent | 59895e9f8fcc1b035907eab29926e46827648ffc (diff) |
Fix VST values from host if parameter if integer or boolean
-rw-r--r-- | distrho/src/DistrhoPluginVST.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/distrho/src/DistrhoPluginVST.cpp b/distrho/src/DistrhoPluginVST.cpp index 2f389ed5..a4543daa 100644 --- 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); |