Support new URIs for LV2 presets.
Old stuff continues to work for Calf, but it'd sure be nice if it would be updated... git-svn-id: svn://localhost/ardour2/branches/3.0@10952 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
7adac311b4
commit
f9c15b6136
@ -58,10 +58,12 @@
|
|||||||
#include <suil/suil.h>
|
#include <suil/suil.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define NS_DC "http://dublincore.org/documents/dcmi-namespace/"
|
#define NS_DC "http://dublincore.org/documents/dcmi-namespace/"
|
||||||
#define NS_LV2 "http://lv2plug.in/ns/lv2core#"
|
#define NS_LV2 "http://lv2plug.in/ns/lv2core#"
|
||||||
#define NS_PSET "http://lv2plug.in/ns/dev/presets#"
|
#define NS_OLDPSET "http://lv2plug.in/ns/dev/presets#"
|
||||||
#define NS_UI "http://lv2plug.in/ns/extensions/ui#"
|
#define NS_PSET "http://lv2plug.in/ns/ext/presets#"
|
||||||
|
#define NS_UI "http://lv2plug.in/ns/extensions/ui#"
|
||||||
|
#define NS_RDFS "http://www.w3.org/2000/01/rdf-schema#"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace ARDOUR;
|
using namespace ARDOUR;
|
||||||
@ -685,30 +687,49 @@ get_value(LilvWorld* world, const LilvNode* subject, const LilvNode* predicate)
|
|||||||
return vs ? lilv_nodes_get_first(vs) : NULL;
|
return vs ? lilv_nodes_get_first(vs) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
LV2Plugin::find_presets()
|
find_presets_helper(LilvWorld* world,
|
||||||
|
LilvPlugin* plugin,
|
||||||
|
std::map<std::string, Plugin::PresetRecord>& out,
|
||||||
|
LilvNode* preset_pred,
|
||||||
|
LilvNode* title_pred)
|
||||||
{
|
{
|
||||||
LilvNode* dc_title = lilv_new_uri(_world.world, NS_DC "title");
|
LilvNodes* presets = lilv_plugin_get_value(plugin, preset_pred);
|
||||||
LilvNode* pset_hasPreset = lilv_new_uri(_world.world, NS_PSET "hasPreset");
|
|
||||||
|
|
||||||
LilvNodes* presets = lilv_plugin_get_value(_impl->plugin, pset_hasPreset);
|
|
||||||
LILV_FOREACH(nodes, i, presets) {
|
LILV_FOREACH(nodes, i, presets) {
|
||||||
const LilvNode* preset = lilv_nodes_get(presets, i);
|
const LilvNode* preset = lilv_nodes_get(presets, i);
|
||||||
const LilvNode* name = get_value(_world.world, preset, dc_title);
|
const LilvNode* name = get_value(world, preset, title_pred);
|
||||||
if (name) {
|
if (name) {
|
||||||
_presets.insert(std::make_pair(lilv_node_as_string(preset),
|
out.insert(std::make_pair(lilv_node_as_string(preset),
|
||||||
PresetRecord(
|
Plugin::PresetRecord(
|
||||||
lilv_node_as_string(preset),
|
lilv_node_as_string(preset),
|
||||||
lilv_node_as_string(name))));
|
lilv_node_as_string(name))));
|
||||||
} else {
|
} else {
|
||||||
warning << string_compose(
|
warning << string_compose(
|
||||||
_("Plugin \"%1\% preset \"%2%\" is missing a dc:title\n"),
|
_("Plugin \"%1\% preset \"%2%\" is missing a label\n"),
|
||||||
unique_id(), lilv_node_as_string(preset));
|
lilv_node_as_string(lilv_plugin_get_uri(plugin)),
|
||||||
|
lilv_node_as_string(preset));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lilv_nodes_free(presets);
|
lilv_nodes_free(presets);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
LV2Plugin::find_presets()
|
||||||
|
{
|
||||||
|
LilvNode* dc_title = lilv_new_uri(_world.world, NS_DC "title");
|
||||||
|
LilvNode* oldpset_hasPreset = lilv_new_uri(_world.world, NS_OLDPSET "hasPreset");
|
||||||
|
LilvNode* pset_hasPreset = lilv_new_uri(_world.world, NS_PSET "hasPreset");
|
||||||
|
LilvNode* rdfs_label = lilv_new_uri(_world.world, NS_RDFS "label");
|
||||||
|
|
||||||
|
find_presets_helper(_world.world, _impl->plugin, _presets,
|
||||||
|
oldpset_hasPreset, dc_title);
|
||||||
|
|
||||||
|
find_presets_helper(_world.world, _impl->plugin, _presets,
|
||||||
|
pset_hasPreset, rdfs_label);
|
||||||
|
|
||||||
|
lilv_node_free(rdfs_label);
|
||||||
lilv_node_free(pset_hasPreset);
|
lilv_node_free(pset_hasPreset);
|
||||||
|
lilv_node_free(oldpset_hasPreset);
|
||||||
lilv_node_free(dc_title);
|
lilv_node_free(dc_title);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -717,16 +738,20 @@ LV2Plugin::load_preset(PresetRecord r)
|
|||||||
{
|
{
|
||||||
Plugin::load_preset(r);
|
Plugin::load_preset(r);
|
||||||
|
|
||||||
LilvNode* lv2_port = lilv_new_uri(_world.world, NS_LV2 "port");
|
LilvNode* lv2_port = lilv_new_uri(_world.world, NS_LV2 "port");
|
||||||
LilvNode* lv2_symbol = lilv_new_uri(_world.world, NS_LV2 "symbol");
|
LilvNode* lv2_symbol = lilv_new_uri(_world.world, NS_LV2 "symbol");
|
||||||
LilvNode* pset_value = lilv_new_uri(_world.world, NS_PSET "value");
|
LilvNode* oldpset_value = lilv_new_uri(_world.world, NS_OLDPSET "value");
|
||||||
LilvNode* preset = lilv_new_uri(_world.world, r.uri.c_str());
|
LilvNode* preset = lilv_new_uri(_world.world, r.uri.c_str());
|
||||||
|
LilvNode* pset_value = lilv_new_uri(_world.world, NS_PSET "value");
|
||||||
|
|
||||||
LilvNodes* ports = lilv_world_find_nodes(_world.world, preset, lv2_port, NULL);
|
LilvNodes* ports = lilv_world_find_nodes(_world.world, preset, lv2_port, NULL);
|
||||||
LILV_FOREACH(nodes, i, ports) {
|
LILV_FOREACH(nodes, i, ports) {
|
||||||
const LilvNode* port = lilv_nodes_get(ports, i);
|
const LilvNode* port = lilv_nodes_get(ports, i);
|
||||||
const LilvNode* symbol = get_value(_world.world, port, lv2_symbol);
|
const LilvNode* symbol = get_value(_world.world, port, lv2_symbol);
|
||||||
const LilvNode* value = get_value(_world.world, port, pset_value);
|
const LilvNode* value = get_value(_world.world, port, pset_value);
|
||||||
|
if (!value) {
|
||||||
|
value = get_value(_world.world, port, oldpset_value);
|
||||||
|
}
|
||||||
if (value && lilv_node_is_float(value)) {
|
if (value && lilv_node_is_float(value)) {
|
||||||
set_parameter(_port_indices[lilv_node_as_string(symbol)],
|
set_parameter(_port_indices[lilv_node_as_string(symbol)],
|
||||||
lilv_node_as_float(value));
|
lilv_node_as_float(value));
|
||||||
@ -734,8 +759,9 @@ LV2Plugin::load_preset(PresetRecord r)
|
|||||||
}
|
}
|
||||||
lilv_nodes_free(ports);
|
lilv_nodes_free(ports);
|
||||||
|
|
||||||
lilv_node_free(preset);
|
|
||||||
lilv_node_free(pset_value);
|
lilv_node_free(pset_value);
|
||||||
|
lilv_node_free(preset);
|
||||||
|
lilv_node_free(oldpset_value);
|
||||||
lilv_node_free(lv2_symbol);
|
lilv_node_free(lv2_symbol);
|
||||||
lilv_node_free(lv2_port);
|
lilv_node_free(lv2_port);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user