From c152cfbd9cb93a53de97a17699647dd58c4f5603 Mon Sep 17 00:00:00 2001 From: Sami Boukortt Date: Sun, 2 Nov 2025 22:23:25 +0100 Subject: [PATCH] Fix LADSPA hint calculation for logarithmic parameters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For parameters from 1 to 65535 with defaults of 4096 and 128, the old logic picked “low” and “low”, resulting in default values of 16 for both, whereas this new logic picks “high” and “middle”, resulting in defaults of 4096 and 256. --- distrho/src/DistrhoPluginLADSPA+DSSI.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/distrho/src/DistrhoPluginLADSPA+DSSI.cpp b/distrho/src/DistrhoPluginLADSPA+DSSI.cpp index ac1b5999c..54efd4876 100644 --- a/distrho/src/DistrhoPluginLADSPA+DSSI.cpp +++ b/distrho/src/DistrhoPluginLADSPA+DSSI.cpp @@ -16,6 +16,8 @@ #include "DistrhoPluginInternal.hpp" +#include + #if DISTRHO_PLUGIN_WANT_PARAMETER_VALUE_CHANGE_REQUEST # error Cannot use parameter value change request with LADSPA or DSSI #endif @@ -646,9 +648,21 @@ static const struct DescriptorInitializer portRangeHints[port].HintDescriptor |= LADSPA_HINT_DEFAULT_MAXIMUM; else { - const float middleValue = ranges.min/2.0f + ranges.max/2.0f; - const float middleLow = (ranges.min/2.0f + middleValue/2.0f)/2.0f + middleValue/2.0f; - const float middleHigh = (ranges.max/2.0f + middleValue/2.0f)/2.0f + middleValue/2.0f; + float middleValue; + float middleLow; + float middleHigh; + if (hints & kParameterIsLogarithmic) + { + middleValue = std::sqrt(ranges.min * ranges.max); + middleLow = std::sqrt(std::sqrt(ranges.min * middleValue) * middleValue); + middleHigh = std::sqrt(std::sqrt(ranges.max * middleValue) * middleValue); + } + else + { + middleValue = ranges.min/2.0f + ranges.max/2.0f; + middleLow = (ranges.min/2.0f + middleValue/2.0f)/2.0f + middleValue/2.0f; + middleHigh = (ranges.max/2.0f + middleValue/2.0f)/2.0f + middleValue/2.0f; + } /**/ if (defValue < middleLow) portRangeHints[port].HintDescriptor |= LADSPA_HINT_DEFAULT_LOW;