diff --git a/libs/ardour/ardour/uri_map.h b/libs/ardour/ardour/uri_map.h index fad6e16da7..167d0ef6d7 100644 --- a/libs/ardour/ardour/uri_map.h +++ b/libs/ardour/ardour/uri_map.h @@ -65,7 +65,10 @@ public: uint32_t atom_URID; uint32_t atom_Blank; uint32_t atom_Object; + uint32_t atom_Double; uint32_t atom_Float; + uint32_t atom_Long; + uint32_t atom_Int; uint32_t log_Error; uint32_t log_Note; uint32_t log_Trace; diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc index fdf8d5015d..7d6c931324 100644 --- a/libs/ardour/lv2_plugin.cc +++ b/libs/ardour/lv2_plugin.cc @@ -280,14 +280,28 @@ set_port_value(const char* port_symbol, uint32_t type) { LV2Plugin* self = (LV2Plugin*)user_data; - if (type != 0 && type != URIMap::instance().urids.atom_Float) { - return; // TODO: Support non-float ports + + float fvalue = 0.0f; + if (type == URIMap::instance ().urids.atom_Float) { + fvalue = *(const float*)value; + } else if (type == URIMap::instance ().urids.atom_Double) { + fvalue = static_cast (*(const double*)value); + } else if (type == URIMap::instance ().urids.atom_Int) { + fvalue = static_cast (*(const int32_t*)value); + } else if (type == URIMap::instance ().urids.atom_Long) { + fvalue = static_cast (*(const int64_t*)value); + } else { + error << string_compose ( + _("LV2<%1>: Preset value for port '%2' has unsupported datatype <%3>"), + self->name (), + port_symbol, + self->uri_map ().id_to_uri(type)); } const uint32_t port_index = self->port_index(port_symbol); if (port_index != (uint32_t)-1) { - self->set_parameter(port_index, *(const float*)value, 0); - self->PresetPortSetValue (port_index, *(const float*)value); /* EMIT SIGNAL */ + self->set_parameter(port_index, fvalue, 0); + self->PresetPortSetValue (port_index, fvalue); /* EMIT SIGNAL */ } } diff --git a/libs/ardour/uri_map.cc b/libs/ardour/uri_map.cc index 6d916e114f..217591a7d3 100644 --- a/libs/ardour/uri_map.cc +++ b/libs/ardour/uri_map.cc @@ -45,7 +45,10 @@ URIMap::URIDs::init(URIMap& uri_map) atom_URID = uri_map.uri_to_id("http://lv2plug.in/ns/ext/atom#URID"); atom_Blank = uri_map.uri_to_id("http://lv2plug.in/ns/ext/atom#Blank"); atom_Object = uri_map.uri_to_id("http://lv2plug.in/ns/ext/atom#Object"); + atom_Double = uri_map.uri_to_id("http://lv2plug.in/ns/ext/atom#Double"); atom_Float = uri_map.uri_to_id("http://lv2plug.in/ns/ext/atom#Float"); + atom_Long = uri_map.uri_to_id("http://lv2plug.in/ns/ext/atom#Long"); + atom_Int = uri_map.uri_to_id("http://lv2plug.in/ns/ext/atom#Int"); log_Error = uri_map.uri_to_id("http://lv2plug.in/ns/ext/log#Error"); log_Note = uri_map.uri_to_id("http://lv2plug.in/ns/ext/log#Note"); log_Trace = uri_map.uri_to_id("http://lv2plug.in/ns/ext/log#Trace");