diff options
author | David Robillard <d@drobilla.net> | 2012-04-21 20:37:31 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2012-04-21 20:37:31 +0000 |
commit | 45a8dff2631c32677cc54d49d5e697a9b209288b (patch) | |
tree | 83ccb6522c46c84f0b7e93820fc3ca651c20d956 /lvz | |
parent | 5fde36cdaee35b206e0a79396da59536182469e2 (diff) | |
download | mda.lv2-45a8dff2631c32677cc54d49d5e697a9b209288b.tar.gz mda.lv2-45a8dff2631c32677cc54d49d5e697a9b209288b.tar.bz2 mda.lv2-45a8dff2631c32677cc54d49d5e697a9b209288b.zip |
Add presets.
git-svn-id: http://svn.drobilla.net/lad/trunk/plugins/mda.lv2@4219 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'lvz')
-rw-r--r-- | lvz/audioeffectx.h | 2 | ||||
-rw-r--r-- | lvz/gendata.cpp | 47 |
2 files changed, 44 insertions, 5 deletions
diff --git a/lvz/audioeffectx.h b/lvz/audioeffectx.h index 331c1f8..296bb06 100644 --- a/lvz/audioeffectx.h +++ b/lvz/audioeffectx.h @@ -101,9 +101,11 @@ public: virtual int32_t getNumInputs() { return numInputs; } virtual int32_t getNumOutputs() { return numOutputs; } virtual int32_t getNumParameters() { return numParams; } + virtual int32_t getNumPrograms() { return numPrograms; } virtual void getParameterName(int32_t index, char *label) = 0; virtual bool getProductString(char* text) = 0; + virtual void getProgramName(char *name) { name[0] = '\0'; } virtual int32_t canDo(const char* text) { return false; } virtual bool canHostDo(const char* act) { return false; } diff --git a/lvz/gendata.cpp b/lvz/gendata.cpp index e31c77c..cc4cc49 100644 --- a/lvz/gendata.cpp +++ b/lvz/gendata.cpp @@ -44,14 +44,14 @@ typedef std::map<string, Record> Manifest; Manifest manifest; string -symbolify(const char* name) +symbolify(const char* name, char space_char='_') { string str(name); // Like This -> Like_This for (size_t i=0; i < str.length(); ++i) if (str[i] == ' ') - str[i] = '_'; + str[i] = space_char; str[0] = std::tolower(str[0]); @@ -63,15 +63,15 @@ symbolify(const char* name) && (!(str[i-1] == 'd' && str[i] == 'B')) && (!(str[i-1] == 'F' && str[i] == 'X')) && (!(str[i-1] == 'D' && str[i] == 'C'))) - str = str.substr(0, i) + '_' + str.substr(i); + str = str.substr(0, i) + space_char + str.substr(i); // To lowercase, and skip invalids for (size_t i=1; i < str.length(); ) { if (std::isalpha(str[i]) || std::isdigit(str[i])) { str[i] = std::tolower(str[i]); ++i; - } else if (str[i-1] != '_') { - str[i] = '_'; + } else if (str[i-1] != space_char) { + str[i] = space_char; ++i; } else { str = str.substr(0, i) + str.substr(i+1); @@ -146,6 +146,43 @@ write_plugin(AudioEffectX* effect, const string& lib_file_name) } else { manifest.insert(std::make_pair(effect->getURI(), Record(base_name))); } + + if (effect->getNumPrograms() > 1) { + std::string preset_file = base_name + "-presets.ttl"; + + fstream pos(preset_file.c_str(), ios::out); + pos << "@prefix lv2: <http://lv2plug.in/ns/lv2core#> ." << endl; + pos << "@prefix pset: <http://lv2plug.in/ns/ext/presets#> ." << endl; + pos << "@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> ." << endl << endl; + for (int32_t i = 0; i < effect->getNumPrograms(); ++i) { + effect->setProgram(i); + effect->getProgramName(name_buf); + + std::string preset_uri = string(effect->getURI()) + + "#pset-" + symbolify(name_buf, '-'); + + // Write wanifest entry + std::cout << "<" << preset_uri << ">" + << "\n\ta pset:Preset ;\n\tlv2:appliesTo <" + << effect->getURI() << "> ;\n\t" + << "rdfs:seeAlso <" << preset_file << "> .\n" << std::endl; + + // Write preset file + pos << "<" << preset_uri << ">" + << "\n\ta pset:Preset ;\n\tlv2:appliesTo <" + << effect->getURI() << "> ;\n\t" + << "rdfs:label \"" << name_buf << "\""; + for (uint32_t i = 0; i < num_params; ++i) { + effect->getParameterName(i, name_buf); + pos << " ;\n\tlv2:port [" << endl; + pos << "\t\tlv2:symbol \"" << symbolify(name_buf) << "\" ;" << endl; + pos << "\t\tpset:value " << effect->getParameter(i) << " ;" << endl; + pos << "\t]"; + } + pos << " .\n" << endl; + } + pos.close(); + } } void |