SLV2Plugin slv2_plugin() { return _plugin; }
SLV2UI slv2_ui() { return _ui; }
SLV2Port slv2_port(uint32_t i) { return slv2_plugin_get_port_by_index(_plugin, i); }
+
+ const char* port_symbol(uint32_t port);
const LV2_Feature* const* features() { return _features; }
snprintf(buf, sizeof(buf), "%" PRIu32, *x);
child->add_property("number", string(buf));
+#ifdef HAVE_SLV2
+ LV2Plugin* lv2p = dynamic_cast<LV2Plugin*>(_plugins[0].get());
+ if (lv2p) {
+ child->add_property("symbol", string(lv2p->port_symbol(*x)));
+ }
+#endif
+
child->add_child_nocopy (automation_list (*x).state (full));
autonode->add_child_nocopy (*child);
}
return _defaults[port];
}
+const char*
+LV2Plugin::port_symbol (uint32_t index)
+{
+ SLV2Port port = slv2_plugin_get_port_by_index(_plugin, index);
+ if (!port) {
+ error << name() << ": Invalid port index " << index << endmsg;
+ }
+
+ SLV2Value sym = slv2_port_get_symbol(_plugin, port);
+ return slv2_value_as_string(sym);
+}
+
+
void
LV2Plugin::set_parameter (uint32_t which, float val)
{
child = new XMLNode("port");
snprintf(buf, sizeof(buf), "%u", i);
child->add_property("number", string(buf));
+ child->add_property("symbol", port_symbol(i));
snprintf(buf, sizeof(buf), "%+f", _shadow_data[i]);
child->add_property("value", string(buf));
root->add_child_nocopy (*child);