Added Timeline::applyAt and removeTargetAt() to allow for ‘delayed apply’ Tweens.
added audio::Param::Options::beginTime()
make FilePlayerNode::stop(), seek() callable from the audio thread
Fixed bug in SamplePlayerNode when it was default constructed and its ChannelMode wasn’t correctly set. Clarify ChannelModes for InputNode and SamplePlayerNode.
Remove disable() / enable() when setting Buffer, it isn’t needed since we hold the lock.
removed default true from Node and Context setEnabled(), use enable() instead
added timeToFrame() util function
zero inPlaceBuffer for all Node’s without inputs, making InputNode::process() functions much simpler when they support processing a partial buffer. Profiling indicated the performance difference was negligible.
Added sample accurate event scheduling for Node enable / disable and SamplePlayerNode start / stop, using Context as a scheduler.
added tests for delayed enable, disable, start and stop
implemented sample accurate enable / disable for BufferPlayerNode and all GenNodes
general: check that output is valid before checking if it can connect to input
general: added DelayNode::clearBuffers(), and being a little more vigilant about zeroing the delay line after resize
apply respects value begin time. In these cases, Event’s begin value is lazily set.
rename Param::cancelEventsAfter() -> removeEventsAfter()
revert back to using findEndTimeAndValue(), duration was wrong choice.
use getCopyValueOnBegin(), instead of hasValueBegin(), though still set a value begin when making the Event, similar to ci::Timeline