diff options
author | falkTX <falktx@gmail.com> | 2018-08-04 03:22:57 +0200 |
---|---|---|
committer | falkTX <falktx@gmail.com> | 2018-08-04 03:22:57 +0200 |
commit | c2b9c40333a7b5e066dcb8d60fa023373b639324 (patch) | |
tree | be7163d13f8396435faf2ede2e98e1018e67255f | |
parent | 340b8e0c5956e74022b7aa7669a8f371df2e5c7b (diff) |
Implement enums for LV2 and VST; Add triple brackets on some lv2 fields
-rw-r--r-- | distrho/src/DistrhoPlugin.cpp | 9 | ||||
-rw-r--r-- | distrho/src/DistrhoPluginInternal.hpp | 14 | ||||
-rw-r--r-- | distrho/src/DistrhoPluginLV2export.cpp | 55 | ||||
-rw-r--r-- | distrho/src/DistrhoPluginVST.cpp | 19 |
4 files changed, 68 insertions, 29 deletions
diff --git a/distrho/src/DistrhoPlugin.cpp b/distrho/src/DistrhoPlugin.cpp index f1fbd7bd..34598761 100644 --- a/distrho/src/DistrhoPlugin.cpp +++ b/distrho/src/DistrhoPlugin.cpp @@ -1,6 +1,6 @@ /* * DISTRHO Plugin Framework (DPF) - * Copyright (C) 2012-2016 Filipe Coelho <falktx@falktx.com> + * Copyright (C) 2012-2018 Filipe Coelho <falktx@falktx.com> * * Permission to use, copy, modify, and/or distribute this software for any purpose with * or without fee is hereby granted, provided that the above copyright notice and this @@ -27,9 +27,10 @@ double d_lastSampleRate = 0.0; /* ------------------------------------------------------------------------------------------------------------ * Static fallback data, see DistrhoPluginInternal.hpp */ -const String PluginExporter::sFallbackString; -const AudioPort PluginExporter::sFallbackAudioPort; -const ParameterRanges PluginExporter::sFallbackRanges; +const String PluginExporter::sFallbackString; +const AudioPort PluginExporter::sFallbackAudioPort; +const ParameterRanges PluginExporter::sFallbackRanges; +const ParameterEnumerationValues PluginExporter::sFallbackEnumValues; /* ------------------------------------------------------------------------------------------------------------ * Plugin */ diff --git a/distrho/src/DistrhoPluginInternal.hpp b/distrho/src/DistrhoPluginInternal.hpp index 3496ac60..6e40a258 100644 --- a/distrho/src/DistrhoPluginInternal.hpp +++ b/distrho/src/DistrhoPluginInternal.hpp @@ -372,6 +372,13 @@ public: return fData->parameters[index].unit; } + const ParameterEnumerationValues& getParameterEnumValues(const uint32_t index) const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr && index < fData->parameterCount, sFallbackEnumValues); + + return fData->parameters[index].enumValues; + } + const ParameterRanges& getParameterRanges(const uint32_t index) const noexcept { DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr && index < fData->parameterCount, sFallbackRanges); @@ -625,9 +632,10 @@ private: // ------------------------------------------------------------------- // Static fallback data, see DistrhoPlugin.cpp - static const String sFallbackString; - static const AudioPort sFallbackAudioPort; - static const ParameterRanges sFallbackRanges; + static const String sFallbackString; + static const AudioPort sFallbackAudioPort; + static const ParameterRanges sFallbackRanges; + static const ParameterEnumerationValues sFallbackEnumValues; DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(PluginExporter) DISTRHO_PREVENT_HEAP_ALLOCATION diff --git a/distrho/src/DistrhoPluginLV2export.cpp b/distrho/src/DistrhoPluginLV2export.cpp index d2fa86ae..0511add7 100644 --- a/distrho/src/DistrhoPluginLV2export.cpp +++ b/distrho/src/DistrhoPluginLV2export.cpp @@ -202,6 +202,7 @@ void lv2_generate_ttl(const char* const basename) pluginString += "@prefix mod: <http://moddevices.com/ns/mod#> .\n"; #endif pluginString += "@prefix opts: <" LV2_OPTIONS_PREFIX "> .\n"; + pluginString += "@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\n"; pluginString += "@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n"; pluginString += "@prefix rsz: <" LV2_RESIZE_PORT_PREFIX "> .\n"; #if DISTRHO_PLUGIN_HAS_UI @@ -417,10 +418,10 @@ void lv2_generate_ttl(const char* const basename) } } - // name and symbol if (! designated) { - pluginString += " lv2:name \"" + plugin.getParameterName(i) + "\" ;\n"; + // name and symbol + pluginString += " lv2:name \"\"\"" + plugin.getParameterName(i) + "\"\"\" ;\n"; String symbol(plugin.getParameterSymbol(i)); @@ -428,11 +429,8 @@ void lv2_generate_ttl(const char* const basename) symbol = "lv2_port_" + String(portIndex-1); pluginString += " lv2:symbol \"" + symbol + "\" ;\n"; - } - // ranges - if (! designated) - { + // ranges const ParameterRanges& ranges(plugin.getParameterRanges(i)); if (plugin.getParameterHints(i) & kParameterIsInteger) @@ -449,11 +447,35 @@ void lv2_generate_ttl(const char* const basename) pluginString += " lv2:minimum " + String(ranges.min) + " ;\n"; pluginString += " lv2:maximum " + String(ranges.max) + " ;\n"; } - } - // unit - if (! designated) - { + // enumeration + const ParameterEnumerationValues& enumValues(plugin.getParameterEnumValues(i)); + + if (enumValues.count > 0) + { + if (enumValues.count >= 2 && enumValues.restrictedMode) + pluginString += " lv2:portProperty lv2:enumeration ;\n"; + + for (uint8_t j=0; j < enumValues.count; ++j) + { + const ParameterEnumerationValue& enumValue(enumValues.values[j]); + + if (j == 0) + pluginString += " lv2:scalePoint [\n"; + else + pluginString += " [\n"; + + pluginString += " rdfs:label \"\"\"" + enumValue.label + "\"\"\" ;\n"; + pluginString += " rdf:value " + String(enumValue.value) + " ;\n"; + + if (j+1 == enumValues.count) + pluginString += " ] ;\n\n"; + else + pluginString += " ] ,\n"; + } + } + + // unit const String& unit(plugin.getParameterUnit(i)); if (! unit.isEmpty()) @@ -495,11 +517,8 @@ void lv2_generate_ttl(const char* const basename) pluginString += " ] ;\n"; } } - } - // hints - if (! designated) - { + // hints const uint32_t hints(plugin.getParameterHints(i)); if (hints & kParameterIsBoolean) @@ -513,7 +532,7 @@ void lv2_generate_ttl(const char* const basename) pluginString += " lv2:portProperty <" LV2_PORT_PROPS__expensive "> ,\n"; pluginString += " <" LV2_KXSTUDIO_PROPERTIES__NonAutomable "> ;\n"; } - } + } // ! designated if (i+1 == count) pluginString += " ] ;\n\n"; @@ -537,7 +556,7 @@ void lv2_generate_ttl(const char* const basename) #endif // name - pluginString += " doap:name \"" + String(plugin.getName()) + "\" ;\n"; + pluginString += " doap:name \"\"\"" + String(plugin.getName()) + "\"\"\" ;\n"; // license { @@ -546,7 +565,7 @@ void lv2_generate_ttl(const char* const basename) if (license.contains("://")) pluginString += " doap:license <" + license + "> ;\n\n"; else - pluginString += " doap:license \"" + license + "\" ;\n\n"; + pluginString += " doap:license \"\"\"" + license + "\"\"\" ;\n\n"; } // developer @@ -554,7 +573,7 @@ void lv2_generate_ttl(const char* const basename) const String homepage(plugin.getHomePage()); pluginString += " doap:maintainer [\n"; - pluginString += " foaf:name \"" + String(plugin.getMaker()) + "\" ;\n"; + pluginString += " foaf:name \"\"\"" + String(plugin.getMaker()) + "\"\"\" ;\n"; if (homepage.isNotEmpty()) pluginString += " foaf:homepage <" + homepage + "> ;\n"; diff --git a/distrho/src/DistrhoPluginVST.cpp b/distrho/src/DistrhoPluginVST.cpp index 00f46b2f..7c6ad521 100644 --- a/distrho/src/DistrhoPluginVST.cpp +++ b/distrho/src/DistrhoPluginVST.cpp @@ -468,15 +468,26 @@ public: value = value > midRange ? ranges.max : ranges.min; } + else if (hints & kParameterIsInteger) + { + value = std::round(value); + } - if (hints & kParameterIsInteger) + const ParameterEnumerationValues& enumValues(fPlugin.getParameterEnumValues(index)); + + for (uint8_t i = 0; i < enumValues.count; ++i) { - DISTRHO_NAMESPACE::snprintf_iparam((char*)ptr, (int32_t)std::round(value), 24); + if (d_isNotEqual(value, enumValues.values[i].value)) + continue; + + DISTRHO_NAMESPACE::strncpy((char*)ptr, enumValues.values[i].label.buffer(), 24); + return 1; } + + if (hints & kParameterIsInteger) + DISTRHO_NAMESPACE::snprintf_iparam((char*)ptr, (int32_t)value, 24); else - { DISTRHO_NAMESPACE::snprintf_param((char*)ptr, value, 24); - } return 1; } |