This is mostly a simple lexical search+replace but the absence of operator< for
std::weak_ptr<T> leads to some complications, particularly with Evoral::Sequence
and ExportPortChannel.
This moves the _amp from send to delivery (which already
applies gain for the master-bus normalization). This generalizes
the use of a gain stage for use in port-inserts.
* Unlinked panners now retain their state during copy/paste.
* Linked send panners can no longer override parent route panning
* Unlinked panner state is retained across link/unlink.
FoldbackStrip::update_send_box() GUI relies on ->fed_by() to
determine if a FB bus has a send from a route.
Under the hood this uses direct_feeds_according_to_reality()
and InternalSend::feeds(). When `allow_feedback` is set a send is
assumed to not directly feed a target (to allow loopbacks).
This mode must not be used for foldback sends.
Session::destroy() calls drop_references(),
which leads to InternalSend::send_from_going_away()
calling InternalSend::propagate_solo().
This looks up the SoloControl to test soloed_by_others(), incl.
and VCA maters. Those VCAs however may already have been destroyed,
and (weak pointer) _master.lock() fails.
* Do not allow new send to change implicit solo (no propagation)
* Propagate changes to due aux-send removal upstream
to tracks or busses connected to the source route.
* Forward solo-isolate
So far internal-sends were explicitly special-cased, and implicit
solo-state only was only forwarded for direct up/down-stream
connections. ...and nobody can remember why :)
This restriction is removed, so far mainly with commenting-out
code, as experiment.
Internal sends are not only more convenient, but also required
in cases where direct connections result in ambiguous latency.
This fixes issues with send-panner bypass whenever the
target bus input-count is different from the send's channel count.
--
Previously, when the aux-send panner was bypassed, data was
copied using BufferSet::read_from().
This sets the channel count of the output buffer set (here: mixbufs)
to match the input (here: bufs).
e.g. mono to stereo, "1 in -> 2 out" out was changed to "1 in -> 1 out".
Un-bypassing the panner later does not reconfigure the I/O.
Mixbufs remained mono, and PannerShell::run() "1 in -> 1 out"
does nothing. The panner was effectively not functional.
This allows users to rename sends without enforcing a numeric
bitslot number. However this prevents a user to to use "send" names
that are potentially used for new sends or inserts.
* Processor implement get_state(), classes derived from Processor
implement protected ::state() -- as documented in processor.h
* likewise for Route, Track: make ::state() a protected interface
* removal of "full_state", use explicit "template_save"
* use RAII/Unwind to skip saving automation-state
This allows to push latency upstream and delay the source
in case the destination has a longer latency.
Also add a signal to notify the Session in case this happens, intended
to queue a latency-recompute.
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
When most internal sends are created, they are given a panner shell
which is then responsible for audio dispatch. Other data types were left
there without handling them at all. Ensure that all available data is
sent provided the internal send has enough outgoing buffers.
Pass current (latency compensated) cycle times to plugin.
This fixes time-reporting to plugins and also fixes automation
and when bouncing (the session->transport* is not valid) etc.
1) Disambiguate 1.0 to GAIN_COEFF_UNITY, and 0.0 to GAIN_COEFF_ZERO
2) Add GAIN_COEFF_SMALL which replaces SMALL_SIGNAL (-140dB)
3) GAIN_COEFF_SMALL can used to avoid interpolating towards -inf on a db scale
4) GAIN_COEFF_SMALL is used to detect very small (denormal?) gains and memset to zero
fixes various fader zipper noise issues.
It voids sample accuate fader automation (the fader-gain
is low-pass filtered at 10Hz). Yet all musical purposes this
makes a lot more sense than sample accuracy anyway.
fixes issue with 'stuck' mono panners (when using a stereo
monitoring section and auto-connect): the send to monitor
section is added after the main panner. At this point the
channel-count is different, but the send shared panner() with
the main route.
Here: mono-panner on track, stereo-panner; and they shared control
settings. since stereo-panner's width is 1, the position cannot be
changed.
in e45151b89c route.cc was changed to create internal sends
directly with role = Delivery::Aux; and not Delivery::Role (0).
This change was motivated to initialize the panner for Aux-sends
in the Delivery.
Role(0) was used to override bitslot numbering during initial
construction of the object when the state is loaded from XML after
construction.
This patch adds an explicit flag for that.
(The previous Role(0) approach only worked for Aux-Sends
but not Sends, anyway.)