commit eafa8349a9dd745a3739a78166606801c17240d2
parent 2ed2eab14b11cdc20c5b83b526e347e96ab4e138
Author: falkTX <falktx@gmail.com>
Date: Sun, 29 Nov 2015 16:32:04 +0100
Add new metadata fields; Export more LV2 stuff, more MOD support
Diffstat:
5 files changed, 109 insertions(+), 10 deletions(-)
diff --git a/distrho/DistrhoPlugin.hpp b/distrho/DistrhoPlugin.hpp
@@ -550,25 +550,38 @@ protected:
virtual const char* getLabel() const = 0;
/**
+ Get an extensive comment/description about the plugin.@n
+ Optional, returns nothing by default.
+ */
+ virtual const char* getDescription() const { return ""; }
+
+ /**
Get the plugin author/maker.
*/
virtual const char* getMaker() const = 0;
/**
- Get the plugin license name (a single line of text).@n
+ Get the plugin homepage.@n
+ Optional, returns nothing by default.
+ */
+ virtual const char* getHomePage() const { return ""; }
+
+ /**
+ Get the plugin license (a single line of text or a URL).@n
For commercial plugins this should return some short copyright information.
*/
virtual const char* getLicense() const = 0;
/**
- Get the plugin version, in hexadecimal.@n
- TODO format to be defined
+ Get the plugin version, in hexadecimal.
+ @see d_version()
*/
virtual uint32_t getVersion() const = 0;
/**
Get the plugin unique Id.@n
This value is used by LADSPA, DSSI and VST plugin formats.
+ @see d_cconst()
*/
virtual int64_t getUniqueId() const = 0;
diff --git a/distrho/DistrhoUtils.hpp b/distrho/DistrhoUtils.hpp
@@ -63,6 +63,15 @@ int64_t d_cconst(const uint8_t a, const uint8_t b, const uint8_t c, const uint8_
}
/*
+ * Return an hexadecimal representation of a MAJ.MIN.MICRO version number.
+ */
+static inline
+uint32_t d_version(const uint8_t major, const uint8_t minor, const uint8_t micro) noexcept
+{
+ return (major << 16) | (minor << 8) | (micro << 0);
+}
+
+/*
* Dummy function.
*/
static inline
diff --git a/distrho/src/DistrhoPluginInternal.hpp b/distrho/src/DistrhoPluginInternal.hpp
@@ -196,6 +196,13 @@ public:
return fPlugin->getLabel();
}
+ const char* getDescription() const noexcept
+ {
+ DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr, "");
+
+ return fPlugin->getDescription();
+ }
+
const char* getMaker() const noexcept
{
DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr, "");
@@ -203,6 +210,13 @@ public:
return fPlugin->getMaker();
}
+ const char* getHomePage() const noexcept
+ {
+ DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr, "");
+
+ return fPlugin->getHomePage();
+ }
+
const char* getLicense() const noexcept
{
DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr, "");
diff --git a/distrho/src/DistrhoPluginLV2export.cpp b/distrho/src/DistrhoPluginLV2export.cpp
@@ -195,6 +195,10 @@ void lv2_generate_ttl(const char* const basename)
pluginString += "@prefix doap: <http://usefulinc.com/ns/doap#> .\n";
pluginString += "@prefix foaf: <http://xmlns.com/foaf/0.1/> .\n";
pluginString += "@prefix lv2: <" LV2_CORE_PREFIX "> .\n";
+#ifdef DISTRHO_PLUGIN_BRAND
+ pluginString += "@prefix mod: <http://moddevices.com/ns/mod#> .\n";
+#endif
+ 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
pluginString += "@prefix ui: <" LV2_UI_PREFIX "> .\n";
@@ -266,7 +270,7 @@ void lv2_generate_ttl(const char* const basename)
pluginString += " a lv2:InputPort, lv2:AudioPort ;\n";
pluginString += " lv2:index " + String(portIndex) + " ;\n";
- pluginString += " lv2:symbol \"" + port.symbol + "\" ;\n";
+ pluginString += " lv2:symbol \"lv2_" + port.symbol + "\" ;\n";
pluginString += " lv2:name \"" + port.name + "\" ;\n";
if (port.hints & kAudioPortIsSidechain)
@@ -296,7 +300,7 @@ void lv2_generate_ttl(const char* const basename)
pluginString += " a lv2:OutputPort, lv2:AudioPort ;\n";
pluginString += " lv2:index " + String(portIndex) + " ;\n";
- pluginString += " lv2:symbol \"" + port.symbol + "\" ;\n";
+ pluginString += " lv2:symbol \"lv2_" + port.symbol + "\" ;\n";
pluginString += " lv2:name \"" + port.name + "\" ;\n";
if (port.hints & kAudioPortIsSidechain)
@@ -426,6 +430,14 @@ void lv2_generate_ttl(const char* const basename)
{
pluginString += " unit:unit unit:mhz ;\n";
}
+ else if (unit == "ms")
+ {
+ pluginString += " unit:unit unit:ms ;\n";
+ }
+ else if (unit == "s")
+ {
+ pluginString += " unit:unit unit:s ;\n";
+ }
else if (unit == "%")
{
pluginString += " unit:unit unit:pc ;\n";
@@ -433,8 +445,7 @@ void lv2_generate_ttl(const char* const basename)
else
{
pluginString += " unit:unit [\n";
- pluginString += " a unit:Unit ;\n";
- pluginString += " unit:name \"" + unit + "\" ;\n";
+ pluginString += " rdfs:label \"" + unit + "\" ;\n";
pluginString += " unit:symbol \"" + unit + "\" ;\n";
pluginString += " unit:render \"%f " + unit + "\" ;\n";
pluginString += " ] ;\n";
@@ -466,8 +477,60 @@ void lv2_generate_ttl(const char* const basename)
}
}
+ // comment
+ {
+ const String comment(plugin.getDescription());
+
+ if (comment.isNotEmpty())
+ pluginString += " rdfs:comment \"\"\"\n" + comment + "\n\"\"\" ;\n\n";
+ }
+
+#ifdef DISTRHO_PLUGIN_BRAND
+ // MOD
+ pluginString += " mod:brand \"" DISTRHO_PLUGIN_BRAND "\" ;\n";
+ pluginString += " mod:label \"" + String(plugin.getName()) + "\" ;\n\n";
+#endif
+
+ // name
pluginString += " doap:name \"" + String(plugin.getName()) + "\" ;\n";
- pluginString += " doap:maintainer [ foaf:name \"" + String(plugin.getMaker()) + "\" ] .\n";
+
+ // license
+ {
+ const String license(plugin.getLicense());
+
+ if (license.contains("://"))
+ pluginString += " doap:license <" + license + "> ;\n\n";
+ else
+ pluginString += " doap:license \"" + license + "\" ;\n\n";
+ }
+
+ // developer
+ {
+ const String homepage(plugin.getHomePage());
+
+ pluginString += " doap:maintainer [\n";
+ pluginString += " foaf:name \"" + String(plugin.getMaker()) + "\" ;\n";
+
+ if (homepage.isNotEmpty())
+ pluginString += " foaf:homepage <" + homepage + "> ;\n";
+
+ pluginString += " ] ;\n\n";
+ }
+
+ {
+ const uint32_t version(plugin.getVersion());
+
+ const uint32_t majorVersion = (version & 0xFF0000) >> 16;
+ const uint32_t microVersion = (version & 0x00FF00) >> 8;
+ /* */ uint32_t minorVersion = (version & 0x0000FF) >> 0;
+
+ // NOTE: LV2 ignores 'major' version and says 0 for minor is pre-release/unstable.
+ if (majorVersion > 0)
+ minorVersion += 2;
+
+ pluginString += " lv2:microVersion " + String(microVersion) + " ;\n";
+ pluginString += " lv2:minorVersion " + String(minorVersion) + " .\n";
+ }
pluginFile << pluginString << std::endl;
pluginFile.close();
diff --git a/utils/lv2-ttl-generator/GNUmakefile b/utils/lv2-ttl-generator/GNUmakefile
@@ -9,10 +9,10 @@ build: ../lv2_ttl_generator
endif
../lv2_ttl_generator: lv2_ttl_generator.c
- $(CC) lv2_ttl_generator.c -o ../lv2_ttl_generator -ldl
+ $(CC) $< -o $@ -ldl
../lv2_ttl_generator.exe: lv2_ttl_generator.c
- $(CC) lv2_ttl_generator.c -o ../lv2_ttl_generator.exe -static
+ $(CC) $< -o $@ -static
touch ../lv2_ttl_generator
clean: