diff --git a/libs/ardour/ardour/rc_configuration_vars.h b/libs/ardour/ardour/rc_configuration_vars.h index 452a0822cc..365b546eb3 100644 --- a/libs/ardour/ardour/rc_configuration_vars.h +++ b/libs/ardour/ardour/rc_configuration_vars.h @@ -244,6 +244,7 @@ CONFIG_VARIABLE (int, vst_scan_timeout, "vst-scan-timeout", 1200) /* deciseconds CONFIG_VARIABLE (bool, discover_audio_units, "discover-audio-units", false) CONFIG_VARIABLE (bool, ask_replace_instrument, "ask-replace-instrument", true) CONFIG_VARIABLE (bool, ask_setup_instrument, "ask-setup-instrument", true) +CONFIG_VARIABLE (uint32_t, limit_n_automatables, "limit-n-automatables", 512) /* custom user plugin paths */ CONFIG_VARIABLE (std::string, plugin_path_vst, "plugin-path-vst", "@default@") diff --git a/libs/ardour/automatable.cc b/libs/ardour/automatable.cc index 2f60024ff0..fd7c0a9b01 100644 --- a/libs/ardour/automatable.cc +++ b/libs/ardour/automatable.cc @@ -240,16 +240,24 @@ Automatable::set_automation_xml_state (const XMLNode& node, Evoral::Parameter le continue; } - if (_can_automate_list.find (param) == _can_automate_list.end ()) { - warning << "Ignored automation data for non-automatable parameter" << endl; - continue; - } - if (!id_prop) { warning << "AutomationList node without automation-id property, " << "using default: " << EventTypeMap::instance().to_symbol(legacy_param) << endmsg; } + if (_can_automate_list.find (param) == _can_automate_list.end ()) { + boost::shared_ptr actl = automation_control (param); + if (actl && (*niter)->children().size() > 0 && Config->get_limit_n_automatables () > 0) { + actl->set_flags (Controllable::Flag ((int)actl->flags() & ~Controllable::NotAutomatable)); + can_automate (param); + info << "Marked parmater as automatable" << endl; + } else { + warning << "Ignored automation data for non-automatable parameter" << endl; + continue; + } + } + + boost::shared_ptr existing = automation_control (param); if (existing) { diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index 2537f8d232..d5056e7259 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -434,6 +434,8 @@ PluginInsert::create_automatable_parameters () boost::shared_ptr plugin = _plugins.front(); set a = _plugins.front()->automatable (); + const uint32_t limit_automatables = Config->get_limit_n_automatables (); + for (uint32_t i = 0; i < plugin->parameter_count(); ++i) { if (!plugin->parameter_is_control (i)) { continue; @@ -452,7 +454,7 @@ PluginInsert::create_automatable_parameters () boost::shared_ptr list(new AutomationList(param, desc)); boost::shared_ptr c (new PluginControl(this, param, desc, list)); - if (!automatable) { + if (!automatable || (limit_automatables > 0 && i > limit_automatables)) { c->set_flags (Controllable::Flag ((int)c->flags() | Controllable::NotAutomatable)); } add_control (c);