| @@ -5,17 +5,19 @@ It allows developers to create plugins with custom UIs using a simple C++ API.<b | |||
| The framework facilitates exporting various different plugin formats from the same code-base.<br/> | |||
| DPF can build for LADSPA, DSSI, LV2 and VST formats.<br/> | |||
| LADSPA, DSSI and VST implementations are complete, LV2 at ~95% completion.<br/> | |||
| All current plugin format implementations are complete.<br/> | |||
| A JACK/Standalone mode is also available, allowing you to quickly test plugins.<br/> | |||
| Plugin DSP and UI communication is done via key-value string pairs.<br/> | |||
| You send messages from the UI to the DSP side, which is automatically saved in the host when required.<br/> | |||
| (You can also store state internally if needed, but this breaks DSSI compatibility).<br/> | |||
| Getting time information from the host is possible.<br/> | |||
| It uses the same format as the JACK Transport API, making porting some code easier.<br/> | |||
| List of plugins made with DPF:<br/> | |||
| - [DISTRHO Kars](https://github.com/DISTRHO/Kars) | |||
| - [DISTRHO Mini-Series](https://github.com/DISTRHO/Mini-Series) | |||
| - [DISTRHO MVerb](https://github.com/DISTRHO/MVerb) | |||
| - [DISTRHO Nekobi](https://github.com/DISTRHO/Nekobi) | |||
| @@ -549,26 +549,39 @@ 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; | |||
| @@ -631,6 +644,16 @@ protected: | |||
| virtual void loadProgram(uint32_t index) = 0; | |||
| #endif | |||
| #if DISTRHO_PLUGIN_WANT_FULL_STATE | |||
| /** | |||
| Get the value of an internal state.@n | |||
| The host may call this function from any non-realtime context.@n | |||
| Must be implemented by your plugin class if DISTRHO_PLUGIN_WANT_PROGRAMS or DISTRHO_PLUGIN_WANT_FULL_STATE is enabled. | |||
| @note The use of this function breaks compatibility with the DSSI format. | |||
| */ | |||
| virtual String getState(const char* key) const = 0; | |||
| #endif | |||
| #if DISTRHO_PLUGIN_WANT_STATE | |||
| /** | |||
| Change an internal state @a key to @a value.@n | |||
| @@ -62,6 +62,15 @@ int64_t d_cconst(const uint8_t a, const uint8_t b, const uint8_t c, const uint8_ | |||
| return (a << 24) | (b << 16) | (c << 8) | (d << 0); | |||
| } | |||
| /* | |||
| * 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. | |||
| */ | |||
| @@ -73,6 +73,10 @@ | |||
| # define DISTRHO_PLUGIN_WANT_STATE 0 | |||
| #endif | |||
| #ifndef DISTRHO_PLUGIN_WANT_FULL_STATE | |||
| # define DISTRHO_PLUGIN_WANT_FULL_STATE 0 | |||
| #endif | |||
| #ifndef DISTRHO_PLUGIN_WANT_TIMEPOS | |||
| # define DISTRHO_PLUGIN_WANT_TIMEPOS 0 | |||
| #endif | |||
| @@ -104,6 +108,14 @@ | |||
| # error Synths need MIDI input to work! | |||
| #endif | |||
| // ----------------------------------------------------------------------- | |||
| // Enable full state if plugin exports presets | |||
| #if DISTRHO_PLUGIN_WANT_PROGRAMS && DISTRHO_PLUGIN_WANT_STATE | |||
| # undef DISTRHO_PLUGIN_WANT_FULL_STATE | |||
| # define DISTRHO_PLUGIN_WANT_FULL_STATE 1 | |||
| #endif | |||
| // ----------------------------------------------------------------------- | |||
| // Disable UI if DGL is not available | |||
| @@ -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, ""); | |||
| @@ -371,6 +385,16 @@ public: | |||
| return fData->stateDefValues[index]; | |||
| } | |||
| # if DISTRHO_PLUGIN_WANT_FULL_STATE | |||
| String getState(const char* key) const | |||
| { | |||
| DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr, sFallbackString); | |||
| DISTRHO_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0', sFallbackString); | |||
| return fPlugin->getState(key); | |||
| } | |||
| # endif | |||
| void setState(const char* const key, const char* const value) | |||
| { | |||
| DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr,); | |||
| @@ -40,6 +40,10 @@ | |||
| # error DISTRHO_PLUGIN_URI undefined! | |||
| #endif | |||
| #ifndef DISTRHO_PLUGIN_LV2_STATE_PREFIX | |||
| # define DISTRHO_PLUGIN_LV2_STATE_PREFIX "urn:distrho:" | |||
| #endif | |||
| #define DISTRHO_LV2_USE_EVENTS_IN (DISTRHO_PLUGIN_WANT_MIDI_INPUT || DISTRHO_PLUGIN_WANT_TIMEPOS || (DISTRHO_PLUGIN_WANT_STATE && DISTRHO_PLUGIN_HAS_UI)) | |||
| #define DISTRHO_LV2_USE_EVENTS_OUT (DISTRHO_PLUGIN_WANT_MIDI_OUTPUT || (DISTRHO_PLUGIN_WANT_STATE && DISTRHO_PLUGIN_HAS_UI)) | |||
| @@ -739,6 +743,15 @@ public: | |||
| if (fPortControls[i] != nullptr) | |||
| *fPortControls[i] = fLastControlValues[i]; | |||
| } | |||
| # if DISTRHO_PLUGIN_WANT_FULL_STATE | |||
| // Update state | |||
| for (StringMap::const_iterator cit=fStateMap.begin(), cite=fStateMap.end(); cit != cite; ++cit) | |||
| { | |||
| const String& key = cit->first; | |||
| fStateMap[key] = fPlugin.getState(key); | |||
| } | |||
| # endif | |||
| } | |||
| #endif | |||
| @@ -747,12 +760,21 @@ public: | |||
| #if DISTRHO_PLUGIN_WANT_STATE | |||
| LV2_State_Status lv2_save(const LV2_State_Store_Function store, const LV2_State_Handle handle) | |||
| { | |||
| # if DISTRHO_PLUGIN_WANT_FULL_STATE | |||
| // Update current state | |||
| for (StringMap::const_iterator cit=fStateMap.begin(), cite=fStateMap.end(); cit != cite; ++cit) | |||
| { | |||
| const String& key = cit->first; | |||
| fStateMap[key] = fPlugin.getState(key); | |||
| } | |||
| # endif | |||
| for (StringMap::const_iterator cit=fStateMap.begin(), cite=fStateMap.end(); cit != cite; ++cit) | |||
| { | |||
| const String& key = cit->first; | |||
| const String& value = cit->second; | |||
| const String urnKey("urn:distrho:" + key); | |||
| const String urnKey(DISTRHO_PLUGIN_LV2_STATE_PREFIX + key); | |||
| // some hosts need +1 for the null terminator, even though the type is string | |||
| store(handle, fUridMap->map(fUridMap->handle, urnKey.buffer()), value.buffer(), value.length()+1, fURIDs.atomString, LV2_STATE_IS_POD|LV2_STATE_IS_PORTABLE); | |||
| @@ -769,7 +791,7 @@ public: | |||
| for (uint32_t i=0, count=fPlugin.getStateCount(); i < count; ++i) | |||
| { | |||
| const String& key(fPlugin.getStateKey(i)); | |||
| const String urnKey("urn:distrho:" + key); | |||
| const String urnKey(DISTRHO_PLUGIN_LV2_STATE_PREFIX + key); | |||
| size = 0; | |||
| type = 0; | |||
| @@ -909,7 +931,7 @@ private: | |||
| atomLong(uridMap->map(uridMap->handle, LV2_ATOM__Long)), | |||
| atomSequence(uridMap->map(uridMap->handle, LV2_ATOM__Sequence)), | |||
| atomString(uridMap->map(uridMap->handle, LV2_ATOM__String)), | |||
| distrhoState(uridMap->map(uridMap->handle, "urn:distrho:keyValueState")), | |||
| distrhoState(uridMap->map(uridMap->handle, DISTRHO_PLUGIN_LV2_STATE_PREFIX "KeyValueState")), | |||
| midiEvent(uridMap->map(uridMap->handle, LV2_MIDI__MidiEvent)), | |||
| timePosition(uridMap->map(uridMap->handle, LV2_TIME__Position)), | |||
| timeBar(uridMap->map(uridMap->handle, LV2_TIME__bar)), | |||
| @@ -1161,15 +1183,13 @@ static const void* lv2_extension_data(const char* uri) | |||
| #endif | |||
| #if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS | |||
| # define DISTRHO_DIRECT_ACCESS_URI "urn:distrho:direct-access" | |||
| struct LV2_DirectAccess_Interface { | |||
| void* (*get_instance_pointer)(LV2_Handle handle); | |||
| }; | |||
| static const LV2_DirectAccess_Interface directaccess = { lv2_get_instance_pointer }; | |||
| if (std::strcmp(uri, DISTRHO_DIRECT_ACCESS_URI) == 0) | |||
| if (std::strcmp(uri, DISTRHO_PLUGIN_LV2_STATE_PREFIX "direct-access") == 0) | |||
| return &directaccess; | |||
| #endif | |||
| @@ -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 \"" DISTRHO_PLUGIN_NAME "\" ;\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(); | |||
| @@ -518,7 +581,6 @@ void lv2_generate_ttl(const char* const basename) | |||
| String presetsString; | |||
| presetsString += "@prefix lv2: <" LV2_CORE_PREFIX "> .\n"; | |||
| presetsString += "@prefix pset: <" LV2_PRESETS_PREFIX "> .\n"; | |||
| presetsString += "@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n"; | |||
| # if DISTRHO_PLUGIN_WANT_STATE | |||
| presetsString += "@prefix state: <" LV2_STATE_PREFIX "> .\n"; | |||
| # endif | |||
| @@ -526,7 +588,7 @@ void lv2_generate_ttl(const char* const basename) | |||
| const uint32_t numParameters = plugin.getParameterCount(); | |||
| const uint32_t numPrograms = plugin.getProgramCount(); | |||
| # if DISTRHO_PLUGIN_WANT_STATE | |||
| # if DISTRHO_PLUGIN_WANT_FULL_STATE | |||
| const uint32_t numStates = plugin.getStateCount(); | |||
| # endif | |||
| @@ -545,34 +607,25 @@ void lv2_generate_ttl(const char* const basename) | |||
| presetString = "<" DISTRHO_PLUGIN_URI + presetSeparator + "preset" + strBuf + ">\n"; | |||
| # if DISTRHO_PLUGIN_WANT_STATE | |||
| # warning "Exporting LV2 Presets with state not supported yet" | |||
| # if 0 | |||
| # if DISTRHO_PLUGIN_WANT_FULL_STATE | |||
| presetString += " state:state [\n"; | |||
| for (uint32_t j=0; j<numStates; ++j) | |||
| { | |||
| if (j == 0) | |||
| presetString += " state:state [\n"; | |||
| else | |||
| presetString += " [\n"; | |||
| const String key = plugin.getStateKey(j); | |||
| const String value = plugin.getState(key); | |||
| presetString += " <urn:distrho:" + plugin.getStateKey(j) + ">\n"; | |||
| presetString += "\"\"\"\n"; | |||
| presetString += plugin.getState(j); | |||
| presetString += "\"\"\"\n"; | |||
| presetString += " <urn:distrho:" + key + ">"; | |||
| if (j+1 == numStates) | |||
| { | |||
| if (numParameters > 0) | |||
| presetString += " ] ;\n\n"; | |||
| else | |||
| presetString += " ] .\n\n"; | |||
| } | |||
| if (value.length() < 10) | |||
| presetString += " \"" + value + "\" ;\n"; | |||
| else | |||
| { | |||
| presetString += " ] ,\n"; | |||
| } | |||
| presetString += "\n\"\"\"\n" + value + "\n\"\"\" ;\n"; | |||
| } | |||
| # endif | |||
| if (numParameters > 0) | |||
| presetString += " ] ;\n\n"; | |||
| else | |||
| presetString += " ] .\n\n"; | |||
| # endif | |||
| for (uint32_t j=0; j <numParameters; ++j) | |||
| @@ -454,7 +454,17 @@ public: | |||
| fVstUI = new UIVst(fAudioMaster, fEffect, this, &fPlugin, (intptr_t)ptr); | |||
| # if DISTRHO_PLUGIN_WANT_FULL_STATE | |||
| // Update current state from plugin side | |||
| for (StringMap::const_iterator cit=fStateMap.begin(), cite=fStateMap.end(); cit != cite; ++cit) | |||
| { | |||
| const String& key = cit->first; | |||
| fStateMap[key] = fPlugin.getState(key); | |||
| } | |||
| # endif | |||
| # if DISTRHO_PLUGIN_WANT_STATE | |||
| // Set state | |||
| for (StringMap::const_iterator cit=fStateMap.begin(), cite=fStateMap.end(); cit != cite; ++cit) | |||
| { | |||
| const String& key = cit->first; | |||
| @@ -506,6 +516,15 @@ public: | |||
| } | |||
| else | |||
| { | |||
| # if DISTRHO_PLUGIN_WANT_FULL_STATE | |||
| // Update current state | |||
| for (StringMap::const_iterator cit=fStateMap.begin(), cite=fStateMap.end(); cit != cite; ++cit) | |||
| { | |||
| const String& key = cit->first; | |||
| fStateMap[key] = fPlugin.getState(key); | |||
| } | |||
| # endif | |||
| String chunkStr; | |||
| for (StringMap::const_iterator cit=fStateMap.begin(), cite=fStateMap.end(); cit != cite; ++cit) | |||
| @@ -28,6 +28,10 @@ | |||
| #include "lv2/lv2_kxstudio_properties.h" | |||
| #include "lv2/lv2_programs.h" | |||
| #ifndef DISTRHO_PLUGIN_LV2_STATE_PREFIX | |||
| # define DISTRHO_PLUGIN_LV2_STATE_PREFIX "urn:distrho:" | |||
| #endif | |||
| START_NAMESPACE_DISTRHO | |||
| // ----------------------------------------------------------------------- | |||
| @@ -46,7 +50,7 @@ public: | |||
| fController(controller), | |||
| fWriteFunction(writeFunc), | |||
| fEventTransferURID(uridMap->map(uridMap->handle, LV2_ATOM__eventTransfer)), | |||
| fKeyValueURID(uridMap->map(uridMap->handle, "urn:distrho:keyValueState")), | |||
| fKeyValueURID(uridMap->map(uridMap->handle, DISTRHO_PLUGIN_LV2_STATE_PREFIX "KeyValueState")), | |||
| fWinIdWasNull(winId == 0) | |||
| { | |||
| if (fUiResize != nullptr && winId != 0) | |||
| @@ -331,8 +335,6 @@ static LV2UI_Handle lv2ui_instantiate(const LV2UI_Descriptor*, const char* uri, | |||
| void* instance = nullptr; | |||
| #if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS | |||
| # define DISTRHO_DIRECT_ACCESS_URI "urn:distrho:direct-access" | |||
| struct LV2_DirectAccess_Interface { | |||
| void* (*get_instance_pointer)(LV2_Handle handle); | |||
| }; | |||
| @@ -381,7 +383,7 @@ static LV2UI_Handle lv2ui_instantiate(const LV2UI_Descriptor*, const char* uri, | |||
| return nullptr; | |||
| } | |||
| if (const LV2_DirectAccess_Interface* const directAccess = (const LV2_DirectAccess_Interface*)extData->data_access(DISTRHO_DIRECT_ACCESS_URI)) | |||
| if (const LV2_DirectAccess_Interface* const directAccess = (const LV2_DirectAccess_Interface*)extData->data_access(DISTRHO_PLUGIN_LV2_STATE_PREFIX "direct-access")) | |||
| instance = directAccess->get_instance_pointer(instance); | |||
| else | |||
| instance = nullptr; | |||
| @@ -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: | |||
| @@ -159,30 +159,20 @@ | |||
| /* = KNOBS | |||
| ================================================ */ | |||
| .mod-pedal-boxy{{{cns}}} .mod-control-group { | |||
| margin:20px; | |||
| margin:20px !important; | |||
| position:relative; | |||
| text-align:center; | |||
| z-index:30; | |||
| } | |||
| .mod-pedal-boxy{{{cns}}} .top { | |||
| margin-top:0px !important; | |||
| } | |||
| .mod-pedal-boxy{{{cns}}} .mod-control-group .mod-knob { | |||
| overflow:hidden; | |||
| position:relative; | |||
| } | |||
| .mod-pedal-boxy{{{cns}}} .mod-control-group .mod-knob { | |||
| height:110px; | |||
| } | |||
| .mod-pedal-boxy{{{cns}}}.mod-three-knobs .mod-control-group .mod-knob, | |||
| .mod-pedal-boxy{{{cns}}}.mod-four-knobs .mod-control-group .mod-knob, | |||
| .mod-pedal-boxy{{{cns}}}.mod-five-knobs .mod-control-group .mod-knob, | |||
| .mod-pedal-boxy{{{cns}}}.mod-six-knobs .mod-control-group .mod-knob, | |||
| .mod-pedal-boxy{{{cns}}}.mod-seven-knobs .mod-control-group .mod-knob, | |||
| .mod-pedal-boxy{{{cns}}}.mod-eight-knobs .mod-control-group .mod-knob { | |||
| height:81px; | |||
| } | |||
| .mod-pedal-boxy{{{cns}}} .mod-control-group .mod-knob > span.mod-knob-title { | |||
| bottom:0px; | |||
| display:block; | |||
| @@ -199,47 +189,44 @@ | |||
| text-transform:uppercase; | |||
| } | |||
| /* ONE and TWO KNOBS */ | |||
| .mod-pedal-boxy{{{cns}}}.mod-one-knob .mod-control-group .mod-knob .mod-knob-image, | |||
| .mod-pedal-boxy{{{cns}}}.mod-two-knobs .mod-control-group .mod-knob .mod-knob-image { | |||
| /* ONE KNOB */ | |||
| .mod-pedal-boxy{{{cns}}}.mod-one-knob .mod-control-group .mod-knob .mod-knob-image { | |||
| background-image:url(/resources/knobs/boxy/boxy.png{{{ns}}}); | |||
| } | |||
| .mod-pedal-boxy{{{cns}}}.mod-one-knob .mod-control-group .mod-knob .mod-knob-image, | |||
| .mod-pedal-boxy{{{cns}}}.mod-two-knobs .mod-control-group .mod-knob .mod-knob-image { | |||
| height:100px; | |||
| background-repeat:no-repeat; | |||
| background-size:auto 98px; | |||
| height:98px; | |||
| width:98px; | |||
| margin:0 auto; | |||
| width:100px; | |||
| } | |||
| .mod-pedal-boxy{{{cns}}}.mod-one-knob .mod-control-group .mod-knob > span.mod-knob-title { | |||
| font-size:15px; | |||
| height:15px; | |||
| } | |||
| .mod-pedal-boxy{{{cns}}}.mod-one-knob .mod-control-group .mod-knob { | |||
| height:115px; | |||
| } | |||
| /* TWO KNOBS */ | |||
| .mod-pedal-boxy{{{cns}}}.mod-two-knobs .mod-control-group { | |||
| margin:20px 10px; | |||
| .mod-pedal-boxy{{{cns}}}.mod-two-knobs .mod-control-group .mod-knob .mod-knob-image { | |||
| background-image:url(/resources/knobs/boxy/boxy.png{{{ns}}}); | |||
| background-repeat:no-repeat; | |||
| background-size:auto 90px; | |||
| height:90px; | |||
| width:90px; | |||
| margin:0 auto; | |||
| } | |||
| .mod-pedal-boxy{{{cns}}}.mod-two-knobs .mod-control-group .mod-knob > span.mod-knob-title { | |||
| font-size:13px; | |||
| } | |||
| .mod-pedal-boxy{{{cns}}}.mod-two-knobs .mod-control-group .mod-knob { | |||
| float:left; | |||
| width:50%; | |||
| } | |||
| /* THREE AND HIGHER KNOBS */ | |||
| .mod-pedal-boxy{{{cns}}}.mod-three-knobs .mod-control-group, | |||
| .mod-pedal-boxy{{{cns}}}.mod-four-knobs .mod-control-group, | |||
| .mod-pedal-boxy{{{cns}}}.mod-five-knobs .mod-control-group, | |||
| .mod-pedal-boxy{{{cns}}}.mod-six-knobs .mod-control-group, | |||
| .mod-pedal-boxy{{{cns}}}.mod-seven-knobs .mod-control-group, | |||
| .mod-pedal-boxy{{{cns}}}.mod-eight-knobs .mod-control-group { | |||
| margin:20px 6px; | |||
| } | |||
| .mod-pedal-boxy{{{cns}}}.mod-three-knobs .mod-control-group .mod-knob, | |||
| .mod-pedal-boxy{{{cns}}}.mod-four-knobs .mod-control-group .mod-knob, | |||
| .mod-pedal-boxy{{{cns}}}.mod-five-knobs .mod-control-group .mod-knob, | |||
| .mod-pedal-boxy{{{cns}}}.mod-six-knobs .mod-control-group .mod-knob, | |||
| .mod-pedal-boxy{{{cns}}}.mod-seven-knobs .mod-control-group .mod-knob, | |||
| .mod-pedal-boxy{{{cns}}}.mod-eight-knobs .mod-control-group .mod-knob { | |||
| display:inline-block; | |||
| .mod-pedal-boxy{{{cns}}}.mod-two-knobs .mod-control-group .mod-knob { | |||
| height:103px; | |||
| } | |||
| /* THREE AND HIGHER KNOBS */ | |||
| .mod-pedal-boxy{{{cns}}}.mod-three-knobs .mod-control-group .mod-knob .mod-knob-image, | |||
| .mod-pedal-boxy{{{cns}}}.mod-four-knobs .mod-control-group .mod-knob .mod-knob-image, | |||
| .mod-pedal-boxy{{{cns}}}.mod-five-knobs .mod-control-group .mod-knob .mod-knob-image, | |||
| @@ -248,10 +235,19 @@ | |||
| .mod-pedal-boxy{{{cns}}}.mod-eight-knobs .mod-control-group .mod-knob .mod-knob-image { | |||
| background-image:url(/resources/knobs/lata/lata.png{{{ns}}}); | |||
| background-repeat:no-repeat; | |||
| background-size:auto 70px; | |||
| height:70px; | |||
| margin:0 -2px; | |||
| width:70px; | |||
| background-size:auto 60px; | |||
| height:60px; | |||
| width:60px; | |||
| margin:0 auto; | |||
| } | |||
| .mod-pedal-boxy{{{cns}}}.mod-three-knobs .mod-control-group .mod-knob, | |||
| .mod-pedal-boxy{{{cns}}}.mod-four-knobs .mod-control-group .mod-knob, | |||
| .mod-pedal-boxy{{{cns}}}.mod-five-knobs .mod-control-group .mod-knob, | |||
| .mod-pedal-boxy{{{cns}}}.mod-six-knobs .mod-control-group .mod-knob, | |||
| .mod-pedal-boxy{{{cns}}}.mod-seven-knobs .mod-control-group .mod-knob, | |||
| .mod-pedal-boxy{{{cns}}}.mod-eight-knobs .mod-control-group .mod-knob { | |||
| display:inline-block; | |||
| height:73px; | |||
| } | |||
| /* EIGTH KNOBS */ | |||
| @@ -269,10 +265,15 @@ | |||
| z-index:35; | |||
| } | |||
| .mod-pedal-boxy{{{cns}}}.mod-three-knobs .mod-enumerated-group { | |||
| .mod-pedal-boxy{{{cns}}}.mod-three-knobs .mod-enumerated-group, | |||
| .mod-pedal-boxy{{{cns}}}.mod-four-knobs .mod-enumerated-group { | |||
| margin-bottom:5px !important; | |||
| } | |||
| .mod-pedal-boxy{{{cns}}}.mod-four-knobs .mod-enumerated-group { | |||
| width:250px; | |||
| } | |||
| .mod-pedal-boxy{{{cns}}} .mod-enumerated { | |||
| background-position:right center; | |||
| background-repeat:no-repeat; | |||
| @@ -1062,4 +1063,3 @@ | |||
| { | |||
| border-color:black; | |||
| } | |||
| @@ -49,11 +49,21 @@ protected: | |||
| return "3BandEQ"; | |||
| } | |||
| const char* getDescription() const override | |||
| { | |||
| return "3 Band Equalizer, stereo version."; | |||
| } | |||
| const char* getMaker() const noexcept override | |||
| { | |||
| return "DISTRHO"; | |||
| } | |||
| const char* getHomePage() const override | |||
| { | |||
| return "https://github.com/DISTRHO/Mini-Series"; | |||
| } | |||
| const char* getLicense() const noexcept override | |||
| { | |||
| return "LGPL"; | |||
| @@ -61,7 +71,7 @@ protected: | |||
| uint32_t getVersion() const noexcept override | |||
| { | |||
| return 0x1000; | |||
| return d_version(1, 0, 0); | |||
| } | |||
| int64_t getUniqueId() const noexcept override | |||
| @@ -17,8 +17,9 @@ | |||
| #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_NAME "3 Band EQ" | |||
| #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/3BandEQ" | |||
| #define DISTRHO_PLUGIN_BRAND "DISTRHO" | |||
| #define DISTRHO_PLUGIN_NAME "3 Band EQ" | |||
| #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/3BandEQ" | |||
| #define DISTRHO_PLUGIN_HAS_UI 1 | |||
| #define DISTRHO_PLUGIN_IS_RT_SAFE 1 | |||
| @@ -49,11 +49,21 @@ protected: | |||
| return "3BandSplitter"; | |||
| } | |||
| const char* getDescription() const override | |||
| { | |||
| return "3 Band Equalizer, splitted output version."; | |||
| } | |||
| const char* getMaker() const noexcept override | |||
| { | |||
| return "DISTRHO"; | |||
| } | |||
| const char* getHomePage() const override | |||
| { | |||
| return "https://github.com/DISTRHO/Mini-Series"; | |||
| } | |||
| const char* getLicense() const noexcept override | |||
| { | |||
| return "LGPL"; | |||
| @@ -61,7 +71,7 @@ protected: | |||
| uint32_t getVersion() const noexcept override | |||
| { | |||
| return 0x1000; | |||
| return d_version(1, 0, 0); | |||
| } | |||
| int64_t getUniqueId() const noexcept override | |||
| @@ -17,8 +17,9 @@ | |||
| #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_NAME "3 Band Splitter" | |||
| #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/3BandSplitter" | |||
| #define DISTRHO_PLUGIN_BRAND "DISTRHO" | |||
| #define DISTRHO_PLUGIN_NAME "3 Band Splitter" | |||
| #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/3BandSplitter" | |||
| #define DISTRHO_PLUGIN_HAS_UI 1 | |||
| #define DISTRHO_PLUGIN_IS_RT_SAFE 1 | |||
| @@ -62,7 +62,7 @@ void DistrhoPluginAmplitudeImposer::initAudioPort(bool input, uint32_t index, Au | |||
| break; | |||
| case 1: | |||
| port.name = "Input Right (Amp Env)"; | |||
| port.symbol = "in_left_amp"; | |||
| port.symbol = "in_right_amp"; | |||
| break; | |||
| case 2: | |||
| port.name = "Input Left (Audio)"; | |||
| @@ -84,7 +84,7 @@ void DistrhoPluginAmplitudeImposer::initAudioPort(bool input, uint32_t index, Au | |||
| break; | |||
| case 1: | |||
| port.name = "Output Right"; | |||
| port.symbol = "out_left"; | |||
| port.symbol = "out_right"; | |||
| break; | |||
| } | |||
| } | |||
| @@ -46,16 +46,32 @@ protected: | |||
| // ------------------------------------------------------------------- | |||
| // Information | |||
| const char* getName() const noexcept override | |||
| { | |||
| return "Amplitude Imposer"; | |||
| } | |||
| const char* getLabel() const noexcept override | |||
| { | |||
| return "AmplitudeImposer"; | |||
| } | |||
| const char* getDescription() const override | |||
| { | |||
| return "Takes 2 stereo inputs and imposes the amplitude envelope of the first one on the second one.\n\ | |||
| Also has a threshold level for the second input, so that when the signal falls below it, it is amplified up to the threshold, to give a greater signal to be amplitude modulated."; | |||
| } | |||
| const char* getMaker() const noexcept override | |||
| { | |||
| return "ndc Plugs"; | |||
| } | |||
| const char* getHomePage() const override | |||
| { | |||
| return "https://github.com/DISTRHO/ndc-Plugs"; | |||
| } | |||
| const char* getLicense() const noexcept override | |||
| { | |||
| return "MIT"; | |||
| @@ -63,7 +79,7 @@ protected: | |||
| uint32_t getVersion() const noexcept override | |||
| { | |||
| return 0x1000; | |||
| return d_version(0, 1, 0); | |||
| } | |||
| int64_t getUniqueId() const noexcept override | |||
| @@ -25,8 +25,9 @@ | |||
| #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_NAME "Amplitude Imposer" | |||
| #define DISTRHO_PLUGIN_URI "http://www.niallmoody.com/ndcplugs/ampimposer.htm" | |||
| #define DISTRHO_PLUGIN_BRAND "DISTRHO" | |||
| #define DISTRHO_PLUGIN_NAME "Amplitude Imposr" | |||
| #define DISTRHO_PLUGIN_URI "http://www.niallmoody.com/ndcplugs/ampimposer.htm" | |||
| #define DISTRHO_PLUGIN_HAS_UI 1 | |||
| #define DISTRHO_PLUGIN_IS_RT_SAFE 1 | |||
| @@ -53,11 +53,22 @@ protected: | |||
| return "CycleShifter"; | |||
| } | |||
| const char* getDescription() const override | |||
| { | |||
| return "Reads in a cycle's-worth of the input signal, then (once the whole cycle's been read in) outputs it again, on top of the current output.\n\ | |||
| Works best with long/sustained sounds (e.g. strings, pads etc.), sounds like a weird kind of gentle distortion."; | |||
| } | |||
| const char* getMaker() const noexcept override | |||
| { | |||
| return "ndc Plugs"; | |||
| } | |||
| const char* getHomePage() const override | |||
| { | |||
| return "https://github.com/DISTRHO/ndc-Plugs"; | |||
| } | |||
| const char* getLicense() const noexcept override | |||
| { | |||
| return "MIT"; | |||
| @@ -65,7 +76,7 @@ protected: | |||
| uint32_t getVersion() const noexcept override | |||
| { | |||
| return 0x1000; | |||
| return d_version(0, 1, 0); | |||
| } | |||
| int64_t getUniqueId() const noexcept override | |||
| @@ -25,8 +25,9 @@ | |||
| #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_NAME "Cycle Shifter" | |||
| #define DISTRHO_PLUGIN_URI "http://www.niallmoody.com/ndcplugs/cycleshifter.htm" | |||
| #define DISTRHO_PLUGIN_BRAND "DISTRHO" | |||
| #define DISTRHO_PLUGIN_NAME "Cycle Shifter" | |||
| #define DISTRHO_PLUGIN_URI "http://www.niallmoody.com/ndcplugs/cycleshifter.htm" | |||
| #define DISTRHO_PLUGIN_HAS_UI 1 | |||
| #define DISTRHO_PLUGIN_IS_RT_SAFE 1 | |||
| @@ -17,8 +17,9 @@ | |||
| #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_NAME "Kars" | |||
| #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/Kars" | |||
| #define DISTRHO_PLUGIN_BRAND "DISTRHO" | |||
| #define DISTRHO_PLUGIN_NAME "Kars" | |||
| #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/Kars" | |||
| #define DISTRHO_PLUGIN_HAS_UI 1 | |||
| #define DISTRHO_PLUGIN_IS_RT_SAFE 1 | |||
| @@ -46,19 +46,29 @@ protected: | |||
| return "Kars"; | |||
| } | |||
| const char* getDescription() const override | |||
| { | |||
| return "Simple karplus-strong plucked string synth."; | |||
| } | |||
| const char* getMaker() const noexcept override | |||
| { | |||
| return "falkTX"; | |||
| } | |||
| const char* getHomePage() const override | |||
| { | |||
| return "https://github.com/DISTRHO/Kars"; | |||
| } | |||
| const char* getLicense() const noexcept override | |||
| { | |||
| return "GPL v2+"; | |||
| return "ISC"; | |||
| } | |||
| uint32_t getVersion() const noexcept override | |||
| { | |||
| return 0x1000; | |||
| return d_version(1, 0, 0); | |||
| } | |||
| int64_t getUniqueId() const noexcept override | |||
| @@ -19,8 +19,9 @@ | |||
| #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_NAME "MVerb" | |||
| #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/MVerb" | |||
| #define DISTRHO_PLUGIN_BRAND "DISTRHO" | |||
| #define DISTRHO_PLUGIN_NAME "MVerb" | |||
| #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/MVerb" | |||
| #define DISTRHO_PLUGIN_HAS_UI 1 | |||
| #define DISTRHO_PLUGIN_IS_RT_SAFE 1 | |||
| @@ -40,11 +40,21 @@ protected: | |||
| return "MVerb"; | |||
| } | |||
| const char* getDescription() const override | |||
| { | |||
| return "Studio quality reverb, provides a practical demonstration of Dattorro’s figure-of-eight reverb structure."; | |||
| } | |||
| const char* getMaker() const noexcept override | |||
| { | |||
| return "Martin Eastwood, falkTX"; | |||
| } | |||
| const char* getHomePage() const override | |||
| { | |||
| return "https://github.com/DISTRHO/MVerb"; | |||
| } | |||
| const char* getLicense() const noexcept override | |||
| { | |||
| return "GPL v3+"; | |||
| @@ -52,7 +62,7 @@ protected: | |||
| uint32_t getVersion() const noexcept override | |||
| { | |||
| return 0x1000; | |||
| return d_version(1, 0, 0); | |||
| } | |||
| int64_t getUniqueId() const noexcept override | |||
| @@ -18,8 +18,9 @@ | |||
| #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_NAME "Nekobi" | |||
| #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/Nekobi" | |||
| #define DISTRHO_PLUGIN_BRAND "DISTRHO" | |||
| #define DISTRHO_PLUGIN_NAME "Nekobi" | |||
| #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/Nekobi" | |||
| #define DISTRHO_PLUGIN_HAS_UI 1 | |||
| #define DISTRHO_PLUGIN_IS_RT_SAFE 1 | |||
| @@ -57,11 +57,21 @@ protected: | |||
| return "Nekobi"; | |||
| } | |||
| const char* getDescription() const override | |||
| { | |||
| return "Simple single-oscillator synth based on the Roland TB-303."; | |||
| } | |||
| const char* getMaker() const noexcept override | |||
| { | |||
| return "Sean Bolton, falkTX"; | |||
| } | |||
| const char* getHomePage() const override | |||
| { | |||
| return "https://github.com/DISTRHO/Nekobi"; | |||
| } | |||
| const char* getLicense() const noexcept override | |||
| { | |||
| return "GPL v2+"; | |||
| @@ -69,7 +79,7 @@ protected: | |||
| uint32_t getVersion() const noexcept override | |||
| { | |||
| return 0x1000; | |||
| return d_version(1, 0, 0); | |||
| } | |||
| int64_t getUniqueId() const noexcept override | |||
| @@ -17,8 +17,9 @@ | |||
| #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_NAME "Ping Pong Pan" | |||
| #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/PingPongPan" | |||
| #define DISTRHO_PLUGIN_BRAND "DISTRHO" | |||
| #define DISTRHO_PLUGIN_NAME "Ping Pong Pan" | |||
| #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/PingPongPan" | |||
| #define DISTRHO_PLUGIN_HAS_UI 1 | |||
| #define DISTRHO_PLUGIN_IS_RT_SAFE 1 | |||
| @@ -45,11 +45,21 @@ protected: | |||
| return "PingPongPan"; | |||
| } | |||
| const char* getDescription() const override | |||
| { | |||
| return "Ping Pong Panning."; | |||
| } | |||
| const char* getMaker() const noexcept override | |||
| { | |||
| return "DISTRHO"; | |||
| } | |||
| const char* getHomePage() const override | |||
| { | |||
| return "https://github.com/DISTRHO/Mini-Series"; | |||
| } | |||
| const char* getLicense() const noexcept override | |||
| { | |||
| return "LGPL"; | |||
| @@ -57,7 +67,7 @@ protected: | |||
| uint32_t getVersion() const noexcept override | |||
| { | |||
| return 0x1000; | |||
| return d_version(1, 0, 0); | |||
| } | |||
| int64_t getUniqueId() const noexcept override | |||
| @@ -17,7 +17,8 @@ | |||
| #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_NAME "ProM" | |||
| #define DISTRHO_PLUGIN_BRAND "DISTRHO" | |||
| #define DISTRHO_PLUGIN_NAME "ProM" | |||
| #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/ProM" | |||
| #define DISTRHO_PLUGIN_HAS_UI 1 | |||
| @@ -43,11 +43,21 @@ protected: | |||
| return "ProM"; | |||
| } | |||
| const char* getDescription() const override | |||
| { | |||
| return "ProjectM visualizer."; | |||
| } | |||
| const char* getMaker() const noexcept override | |||
| { | |||
| return "DISTRHO"; | |||
| } | |||
| const char* getHomePage() const override | |||
| { | |||
| return "https://github.com/DISTRHO/ProM"; | |||
| } | |||
| const char* getLicense() const noexcept override | |||
| { | |||
| return "LGPL"; | |||
| @@ -55,7 +65,7 @@ protected: | |||
| uint32_t getVersion() const noexcept override | |||
| { | |||
| return 0x1000; | |||
| return d_version(1, 0, 0); | |||
| } | |||
| int64_t getUniqueId() const noexcept override | |||
| @@ -25,8 +25,9 @@ | |||
| #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
| #define DISTRHO_PLUGIN_NAME "Soul Force" | |||
| #define DISTRHO_PLUGIN_URI "http://www.niallmoody.com/ndcplugs/soulforce.htm" | |||
| #define DISTRHO_PLUGIN_BRAND "DISTRHO" | |||
| #define DISTRHO_PLUGIN_NAME "Soul Force" | |||
| #define DISTRHO_PLUGIN_URI "http://www.niallmoody.com/ndcplugs/soulforce.htm" | |||
| #define DISTRHO_PLUGIN_HAS_UI 1 | |||
| #define DISTRHO_PLUGIN_IS_RT_SAFE 1 | |||
| @@ -66,11 +66,22 @@ protected: | |||
| return "SoulForce"; | |||
| } | |||
| const char* getDescription() const override | |||
| { | |||
| return "A fairly standard waveshaping distortion plugin, made more interesting through the use of feedback to control the shaping.\n\ | |||
| Can get pretty loud and obnoxious."; | |||
| } | |||
| const char* getMaker() const noexcept override | |||
| { | |||
| return "ndc Plugs"; | |||
| } | |||
| const char* getHomePage() const override | |||
| { | |||
| return "https://github.com/DISTRHO/ndc-Plugs"; | |||
| } | |||
| const char* getLicense() const noexcept override | |||
| { | |||
| return "MIT"; | |||
| @@ -78,7 +89,7 @@ protected: | |||
| uint32_t getVersion() const noexcept override | |||
| { | |||
| return 0x1000; | |||
| return d_version(0, 1, 0); | |||
| } | |||
| int64_t getUniqueId() const noexcept override | |||