Browse Source

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

pull/61/head
falkTX 5 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)
* 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 */


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

@@ -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


+ 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";
#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";


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

@@ -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;
}


Loading…
Cancel
Save