summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2018-10-31 23:32:16 +0100
committerRobin Gareus <robin@gareus.org>2018-10-31 23:44:04 +0100
commitfd832d9d1a7eb33ff9b8b206e1b8509aef100faf (patch)
tree1ab68c7fa90877c20a8a412bfcfd317f169af436 /libs/ardour
parentbefa339d4b4ee0e288c5f5437e0017eefd0ca2fb (diff)
Add option to limit automatable control parmaters
VCVRack VST currently exposes 9999 automatable-control parmaters. This slows down various GUI dropdown lists and dialogs. (even worse: those parameters are not mapped to anything by default). This change allows to limit automatable parameters to a reasonable number, without loosing state of already automated parameters in existing sessions.
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/rc_configuration_vars.h1
-rw-r--r--libs/ardour/automatable.cc18
-rw-r--r--libs/ardour/plugin_insert.cc4
3 files changed, 17 insertions, 6 deletions
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<AutomationControl> 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<AutomationControl> 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> plugin = _plugins.front();
set<Evoral::Parameter> 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<AutomationList> list(new AutomationList(param, desc));
boost::shared_ptr<AutomationControl> 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);