From 3451d97277c4eeca16e2bea5dd0fd36d51e410a4 Mon Sep 17 00:00:00 2001 From: reuk Date: Tue, 19 Sep 2023 14:23:08 +0100 Subject: [PATCH] LV2 Client: Use non-normalised values for enumeration scalePoints --- .../juce_audio_plugin_client_LV2.cpp | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client_LV2.cpp b/modules/juce_audio_plugin_client/juce_audio_plugin_client_LV2.cpp index 9d6f085e76..c548c014d3 100644 --- a/modules/juce_audio_plugin_client/juce_audio_plugin_client_LV2.cpp +++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client_LV2.cpp @@ -1055,18 +1055,21 @@ private: os << "\trdfs:range atom:Float ;\n"; - if (auto* rangedParam = dynamic_cast (¶m)) + const auto [defaultValue, min, max] = [&] { - os << "\tlv2:default " << rangedParam->convertFrom0to1 (rangedParam->getDefaultValue()) << " ;\n" - "\tlv2:minimum " << rangedParam->getNormalisableRange().start << " ;\n" - "\tlv2:maximum " << rangedParam->getNormalisableRange().end; - } - else - { - os << "\tlv2:default " << param.getDefaultValue() << " ;\n" - "\tlv2:minimum 0.0 ;\n" - "\tlv2:maximum 1.0"; - } + if (auto* rangedParam = dynamic_cast (¶m)) + { + return std::tuple (rangedParam->convertFrom0to1 (rangedParam->getDefaultValue()), + rangedParam->getNormalisableRange().start, + rangedParam->getNormalisableRange().end); + } + + return std::tuple (param.getDefaultValue(), 0.0f, 1.0f); + }(); + + os << "\tlv2:default " << defaultValue << " ;\n" + "\tlv2:minimum " << min << " ;\n" + "\tlv2:maximum " << max; // Avoid writing out loads of scale points for parameters with lots of steps constexpr auto stepLimit = 1000; @@ -1078,15 +1081,14 @@ private: "\tlv2:portProperty lv2:enumeration " << (param.isBoolean() ? ", lv2:toggled " : "") << ";\n" "\tlv2:scalePoint "; - const auto maxIndex = numSteps - 1; + auto counter = 0; - for (int i = 0; i < numSteps; ++i) + for (const auto& string : param.getAllValueStrings()) { - const auto value = (float) i / (float) maxIndex; - const auto text = param.getText (value, 1024); + const auto value = jmap ((float) counter++, 0.0f, (float) numSteps - 1.0f, min, max); - os << (i != 0 ? ", " : "") << "[\n" - "\t\trdfs:label \"" << text << "\" ;\n" + os << (counter != 0 ? ", " : "") << "[\n" + "\t\trdfs:label \"" << string << "\" ;\n" "\t\trdf:value " << value << " ;\n" "\t]"; }