Browse Source

Implement enums for LV2 and VST; Add triple brackets on some lv2 fields

pull/61/head
falkTX 6 years ago
parent
commit
c2b9c40333
4 changed files with 68 additions and 29 deletions
  1. +5
    -4
      distrho/src/DistrhoPlugin.cpp
  2. +11
    -3
      distrho/src/DistrhoPluginInternal.hpp
  3. +37
    -18
      distrho/src/DistrhoPluginLV2export.cpp
  4. +15
    -4
      distrho/src/DistrhoPluginVST.cpp

+ 5
- 4
distrho/src/DistrhoPlugin.cpp View File

@@ -1,6 +1,6 @@
/* /*
* DISTRHO Plugin Framework (DPF) * 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 * 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 * 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 */ * 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 */ * Plugin */


+ 11
- 3
distrho/src/DistrhoPluginInternal.hpp View File

@@ -372,6 +372,13 @@ public:
return fData->parameters[index].unit; 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 const ParameterRanges& getParameterRanges(const uint32_t index) const noexcept
{ {
DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr && index < fData->parameterCount, sFallbackRanges); DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr && index < fData->parameterCount, sFallbackRanges);
@@ -625,9 +632,10 @@ private:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Static fallback data, see DistrhoPlugin.cpp // 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_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(PluginExporter)
DISTRHO_PREVENT_HEAP_ALLOCATION DISTRHO_PREVENT_HEAP_ALLOCATION


+ 37
- 18
distrho/src/DistrhoPluginLV2export.cpp View File

@@ -202,6 +202,7 @@ void lv2_generate_ttl(const char* const basename)
pluginString += "@prefix mod: <http://moddevices.com/ns/mod#> .\n"; pluginString += "@prefix mod: <http://moddevices.com/ns/mod#> .\n";
#endif #endif
pluginString += "@prefix opts: <" LV2_OPTIONS_PREFIX "> .\n"; 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 rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n";
pluginString += "@prefix rsz: <" LV2_RESIZE_PORT_PREFIX "> .\n"; pluginString += "@prefix rsz: <" LV2_RESIZE_PORT_PREFIX "> .\n";
#if DISTRHO_PLUGIN_HAS_UI #if DISTRHO_PLUGIN_HAS_UI
@@ -417,10 +418,10 @@ void lv2_generate_ttl(const char* const basename)
} }
} }


// name and symbol
if (! designated) if (! designated)
{ {
pluginString += " lv2:name \"" + plugin.getParameterName(i) + "\" ;\n";
// name and symbol
pluginString += " lv2:name \"\"\"" + plugin.getParameterName(i) + "\"\"\" ;\n";


String symbol(plugin.getParameterSymbol(i)); String symbol(plugin.getParameterSymbol(i));


@@ -428,11 +429,8 @@ void lv2_generate_ttl(const char* const basename)
symbol = "lv2_port_" + String(portIndex-1); symbol = "lv2_port_" + String(portIndex-1);


pluginString += " lv2:symbol \"" + symbol + "\" ;\n"; pluginString += " lv2:symbol \"" + symbol + "\" ;\n";
}


// ranges
if (! designated)
{
// ranges
const ParameterRanges& ranges(plugin.getParameterRanges(i)); const ParameterRanges& ranges(plugin.getParameterRanges(i));


if (plugin.getParameterHints(i) & kParameterIsInteger) 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:minimum " + String(ranges.min) + " ;\n";
pluginString += " lv2:maximum " + String(ranges.max) + " ;\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)); const String& unit(plugin.getParameterUnit(i));


if (! unit.isEmpty()) if (! unit.isEmpty())
@@ -495,11 +517,8 @@ void lv2_generate_ttl(const char* const basename)
pluginString += " ] ;\n"; pluginString += " ] ;\n";
} }
} }
}


// hints
if (! designated)
{
// hints
const uint32_t hints(plugin.getParameterHints(i)); const uint32_t hints(plugin.getParameterHints(i));


if (hints & kParameterIsBoolean) 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:portProperty <" LV2_PORT_PROPS__expensive "> ,\n";
pluginString += " <" LV2_KXSTUDIO_PROPERTIES__NonAutomable "> ;\n"; pluginString += " <" LV2_KXSTUDIO_PROPERTIES__NonAutomable "> ;\n";
} }
}
} // ! designated


if (i+1 == count) if (i+1 == count)
pluginString += " ] ;\n\n"; pluginString += " ] ;\n\n";
@@ -537,7 +556,7 @@ void lv2_generate_ttl(const char* const basename)
#endif #endif


// name // name
pluginString += " doap:name \"" + String(plugin.getName()) + "\" ;\n";
pluginString += " doap:name \"\"\"" + String(plugin.getName()) + "\"\"\" ;\n";


// license // license
{ {
@@ -546,7 +565,7 @@ void lv2_generate_ttl(const char* const basename)
if (license.contains("://")) if (license.contains("://"))
pluginString += " doap:license <" + license + "> ;\n\n"; pluginString += " doap:license <" + license + "> ;\n\n";
else else
pluginString += " doap:license \"" + license + "\" ;\n\n";
pluginString += " doap:license \"\"\"" + license + "\"\"\" ;\n\n";
} }


// developer // developer
@@ -554,7 +573,7 @@ void lv2_generate_ttl(const char* const basename)
const String homepage(plugin.getHomePage()); const String homepage(plugin.getHomePage());


pluginString += " doap:maintainer [\n"; pluginString += " doap:maintainer [\n";
pluginString += " foaf:name \"" + String(plugin.getMaker()) + "\" ;\n";
pluginString += " foaf:name \"\"\"" + String(plugin.getMaker()) + "\"\"\" ;\n";


if (homepage.isNotEmpty()) if (homepage.isNotEmpty())
pluginString += " foaf:homepage <" + homepage + "> ;\n"; pluginString += " foaf:homepage <" + homepage + "> ;\n";


+ 15
- 4
distrho/src/DistrhoPluginVST.cpp View File

@@ -468,15 +468,26 @@ public:


value = value > midRange ? ranges.max : ranges.min; 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 else
{
DISTRHO_NAMESPACE::snprintf_param((char*)ptr, value, 24); DISTRHO_NAMESPACE::snprintf_param((char*)ptr, value, 24);
}


return 1; return 1;
} }


Loading…
Cancel
Save