summaryrefslogtreecommitdiff
path: root/libs/ardour/slavable_automation_control.cc
AgeCommit message (Collapse)Author
2018-09-21Fix --no-nls (4/5), i18n include order in libs/*Robin Gareus
"i18n.h" needs to be included last (after any includes that may indirectly pull in getext or libintl etc)
2017-09-18globally change all use of "frame" to refer to audio into "sample".Paul Davis
Generated by tools/f2s. Some hand-editing will be required in a few places to fix up comments related to timecode and video in order to keep the legible
2017-07-16Fix merging boolean automation + mute disconnect.Robin Gareus
2017-07-16Add API to run automation only (emit Changed signal).Robin Gareus
Note: MuteControl already implemented this, This removes the special case of boolean_automation_run(). Likewise this removes special-cases for actually_set_value() during automation playback.
2017-06-23Implement undo for merging VCA-master automation/value on disconnect.Robin Gareus
2017-06-22Update Slavable APIRobin Gareus
Do not use AutomationType to identify parameters, use complete Evoral::Parameter and Automatable. For "batch connections", a Slavables needs to implement an API to return the relevant controls. This is only a first step towards a more generic Master/Slave framework.
2017-06-14Special-case VCA at 0 (-inf dB), force gain slaves to -inf dBRobin Gareus
2017-06-14Merge event control lists when disconnecting a master-ctrlRobin Gareus
2017-06-13Apply master-value to automation on disconnect.Robin Gareus
2017-06-13Write inverse master automation.Robin Gareus
* The UI and ctrl-surface controls use and display the combined value, including control-masters. * The Automation lane of a control is the raw value of the control without masters. When touching (or writing) automation, the control-master needs to be factored out (or subtracted). e.g press+hold a control -> write inverse master automation.
2017-06-13Fix another thinko in 9581cb26 + 02b087c5 (VCA gain automation)Robin Gareus
This went unnoticed because: VCA gain automation was always applied (regardless of automation state) but when it was not playing master_ratio() factored it out again (per block).
2017-06-13Fix nasty duplicate XML nodeRobin Gareus
2017-06-12Remove unnecessary temporary variables in MasterRecord::set_stateTim Mayberry
XMLNode::get_property only modifies the argument if the property is found and conversion is successful.
2017-06-12VCA/SlavableAutomationCtrl re-design:Robin Gareus
* remember master-ctrl value on assignment & save with session * Control/AutomationCtrl only stores ctrl's own value (w/o master) * virtual AutomationControl::get_value () -> use SlavableAC method * MasterRecord uses weak-ptr (fixes recursive ~Controllable() deadlock)
2017-06-11Fix thinko in 9581cb26 - scratch-buffer can't be used recursively.Robin Gareus
2017-06-10Implement slaved boolean automation and update mute special-caseRobin Gareus
2017-06-10amend a1b4f9b8ab - handle disconnecting from all mastersRobin Gareus
2017-06-09Fix deletion of VCA with slaved controls.Robin Gareus
The crashed previously because: A VCA is-a Automatable is-a Evoral::ControlSet After VCA's d'tor completes ~Automatable runs and emits signal to DropReferences of all master-controls. This in turn calls SlavableAutomationControl::master_going_away() for slaved parameters for the given master-control In ::master_going_away() the weak-pointer reference to the master's AutomationControl (owned by the destroyed VCA) is still valid. Execution is in the d'tor of Automatable which is-a ControlSet and the ContolSet keeps a reference to the Control and hence also to the AutomationControl which is-a Evoral::Control. So master_going_away() locks a boost::shared_ptr<ARDOUR::AutomationControl> which is actually the MuteControl owned by the VCA. It calls SlavableAutomationControl::remove_master() which in turn calls MuteControl::pre_remove_master() which uses the MuteMaster API to retrieve the value. The MuteMaster however is the VCA that has just been destroyed. The solution is twofold: 1) emit "drop_references" from the VCA d'tor itself, before the VCA is destroyed. 2) disconnect a slaved control from the master's drop_references signal when un-assigning a master-control.
2017-06-03Add infrastructure for evaluating VCA automation curvesRobin Gareus
2017-06-03amend 67f9f6fd: no recursive ReaderLockRobin Gareus
2017-05-30Prepare for automation control masterRobin Gareus
Basic infrastructure to allow VCA automation and Trim automation: look up events during automation playback.
2017-04-19Use XMLNode::get/set_property API in ARDOUR::SlavableAutomationControl classTim Mayberry
2017-02-24no-op: move method order in filePaul Davis
2017-02-23fix solo + mute controls when slavedPaul Davis
clamp/scale by masters only applies to non-boolean controls
2017-02-23Constrain VCA slave value to controllable rangeRobin Gareus
This prevents overshoot e.g. when writing automation (and related oddities)
2017-02-22fix deadlock when assigning a VCA masterPaul Davis
2017-02-22if a slave's masters are at zero, lock slave to zero and not NaNPaul Davis
2017-02-21fix thinko/typo which failed to notify when a VCA is unassignedPaul Davis
2017-02-21redesign VCA control over gain (and theoretically other scalar controls)Paul Davis
master(s) value now just scales the control's own value; a trivial bit of math at assign/deassign ensures that values do not change during add/remove master operations
2017-02-06save/restore VCA master state inside slaves, so that a reloaded session ends ↵Paul Davis
up back in the same state
2017-01-21SlavableAutomationControl::get_value(), if doing automation playback, should ↵Paul Davis
still scale the returned value by the masters' value(s)
2016-10-14much simpler implementation of fix originally in c104c9d4726f3: don't call ↵Paul Davis
Session::set_dirty() or emit Changed() unless AutomationControl actually changes value
2016-10-14Revert "change return type of AutomationControl::actually_set_value() from ↵Paul Davis
void to bool, to indicate if value was changed." This reverts commit c104c9d4726f3ba1ecd352d13b88a57f2f964510.
2016-10-12change return type of AutomationControl::actually_set_value() from void to ↵Paul Davis
bool, to indicate if value was changed. Don't call Session::set_dirty() when no change occurs
2016-09-21gain controls are supposed to be "gain-like"Paul Davis
2016-06-01fix crash during session deletion while removing VCA mastersPaul Davis
2016-05-31no-op: explanatory commentsPaul Davis
2016-05-31improve cleanup of VCA related objectsPaul Davis
2016-05-31fix compiler issues with pair<T1,T2> constructionPaul Davis
2016-05-31fix chaining of masters for boolean controlsPaul Davis
2016-05-31move ever close to working master/slave logic, this time with audio testingPaul Davis
2016-05-31fix return type of SlavableAutomationControl::get_boolean_masters() to make ↵Paul Davis
it usefl
2016-05-31design changes to various SlavableAutomationControls to make it possible to ↵Paul Davis
get the logic right for boolean controls
2016-05-31move SlavableAutomationControl into its own headerPaul Davis
2016-05-31a variety of changes that get closer to correctly functioning behaviour for ↵Paul Davis
VCA solo+mute (BUT ARE NOT DONE YET)
2016-05-31a slew of as-yet incomplete work to get VCA solo+mute closer to workingPaul Davis
2016-05-31add new files to source treePaul Davis