Add API allowing plugin preset load to affect automation
This commit is contained in:
parent
1b2a64c391
commit
5db22a33c1
@ -256,6 +256,9 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent
|
||||
*/
|
||||
PBD::Signal0<void> PresetDirty;
|
||||
|
||||
/** Emitted for preset-load to set a control-port */
|
||||
PBD::Signal2<void, uint32_t, float> PresetPortSetValue;
|
||||
|
||||
virtual bool has_editor () const = 0;
|
||||
|
||||
/** Emitted when a parameter is altered by something outside of our
|
||||
|
@ -374,6 +374,8 @@ class LIBARDOUR_API PluginInsert : public Processor
|
||||
void latency_changed ();
|
||||
bool _latency_changed;
|
||||
uint32_t _bypass_port;
|
||||
|
||||
void preset_load_set_value (uint32_t, float);
|
||||
};
|
||||
|
||||
} // namespace ARDOUR
|
||||
|
@ -490,7 +490,9 @@ PluginInsert::create_automatable_parameters ()
|
||||
ac->Changed.connect_same_thread (*this, boost::bind (&PluginInsert::enable_changed, this));
|
||||
}
|
||||
}
|
||||
plugin->PresetPortSetValue.connect_same_thread (*this, boost::bind (&PluginInsert::preset_load_set_value, this, _1, _2));
|
||||
}
|
||||
|
||||
/** Called when something outside of this host has modified a plugin
|
||||
* parameter. Responsible for propagating the change to two places:
|
||||
*
|
||||
@ -649,6 +651,23 @@ PluginInsert::bypassable_changed ()
|
||||
BypassableChanged ();
|
||||
}
|
||||
|
||||
void
|
||||
PluginInsert::preset_load_set_value (uint32_t p, float v)
|
||||
{
|
||||
boost::shared_ptr<AutomationControl> ac = automation_control (Evoral::Parameter(PluginAutomation, 0, p));
|
||||
if (!ac) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (ac->automation_state() & Play) {
|
||||
return;
|
||||
}
|
||||
|
||||
start_touch (p);
|
||||
ac->set_value (v, Controllable::NoGroup);
|
||||
end_touch (p);
|
||||
}
|
||||
|
||||
void
|
||||
PluginInsert::inplace_silence_unconnected (BufferSet& bufs, const PinMappings& out_map, framecnt_t nframes, framecnt_t offset) const
|
||||
{
|
||||
@ -3014,19 +3033,21 @@ PluginInsert::latency_changed ()
|
||||
void
|
||||
PluginInsert::start_touch (uint32_t param_id)
|
||||
{
|
||||
boost::shared_ptr<AutomationControl> ac = automation_control (Evoral::Parameter (PluginAutomation, 0, param_id));
|
||||
if (ac) {
|
||||
ac->start_touch (session().audible_frame());
|
||||
}
|
||||
boost::shared_ptr<AutomationControl> ac = automation_control (Evoral::Parameter (PluginAutomation, 0, param_id));
|
||||
if (ac) {
|
||||
// ToDo subtract _plugin_signal_latency from audible_frame() when rolling, assert > 0
|
||||
ac->start_touch (session().audible_frame());
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
PluginInsert::end_touch (uint32_t param_id)
|
||||
{
|
||||
boost::shared_ptr<AutomationControl> ac = automation_control (Evoral::Parameter (PluginAutomation, 0, param_id));
|
||||
if (ac) {
|
||||
ac->stop_touch (true, session().audible_frame());
|
||||
}
|
||||
boost::shared_ptr<AutomationControl> ac = automation_control (Evoral::Parameter (PluginAutomation, 0, param_id));
|
||||
if (ac) {
|
||||
// ToDo subtract _plugin_signal_latency from audible_frame() when rolling, assert > 0
|
||||
ac->stop_touch (true, session().audible_frame());
|
||||
}
|
||||
}
|
||||
|
||||
std::ostream& operator<<(std::ostream& o, const ARDOUR::PluginInsert::Match& m)
|
||||
|
Loading…
Reference in New Issue
Block a user