mirror of
https://github.com/Ardour/ardour.git
synced 2026-01-04 12:45:45 +01:00
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.
This commit is contained in:
parent
befa339d4b
commit
fd832d9d1a
3 changed files with 17 additions and 6 deletions
|
|
@ -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@")
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue