diff --git a/gtk2_ardour/lv2_plugin_ui.cc b/gtk2_ardour/lv2_plugin_ui.cc index f8924e5bec..3f6fa5814c 100644 --- a/gtk2_ardour/lv2_plugin_ui.cc +++ b/gtk2_ardour/lv2_plugin_ui.cc @@ -38,11 +38,8 @@ LV2PluginUI::lv2_ui_write( const void* buffer) { //cout << "lv2_ui_write" << endl; - LV2PluginUI* me = (LV2PluginUI*)controller; - if (*(float*)buffer != me->_values[port_index]) { - //cout << "set_parameter " << port_index << ":" << *(float*)buffer << endl; - me->_lv2->set_parameter(port_index, *(float*)buffer); - } + LV2PluginUI* me = (LV2PluginUI *) controller; + me->_controllables[port_index]->set_value (*(float *) buffer); } void LV2PluginUI::on_external_ui_closed(LV2UI_Controller controller) @@ -190,11 +187,16 @@ LV2PluginUI::lv2ui_instantiate(const std::string& title) } _values = new float[num_ports]; + _controllables.resize (num_ports); for (uint32_t i = 0; i < num_ports; ++i) { bool ok; uint32_t port = _lv2->nth_parameter(i, ok); if (ok) { _values[port] = _lv2->get_parameter(port); + _controllables[port] = boost::dynamic_pointer_cast ( + insert->control (Evoral::Parameter (PluginAutomation, 0, port)) + ); + if (_lv2->parameter_is_control(port) && _lv2->parameter_is_input(port)) { parameter_update(port, _values[port]); } diff --git a/gtk2_ardour/lv2_plugin_ui.h b/gtk2_ardour/lv2_plugin_ui.h index 37234c59eb..e267ecab6c 100644 --- a/gtk2_ardour/lv2_plugin_ui.h +++ b/gtk2_ardour/lv2_plugin_ui.h @@ -69,6 +69,7 @@ class LV2PluginUI : public PlugUIBase, public Gtk::VBox Gtk::Widget* _gui_widget; SLV2UIInstance _inst; float* _values; + std::vector > _controllables; struct lv2_external_ui_host _external_ui_host; LV2_Feature _external_ui_feature;