Commit Graph

113 Commits

Author SHA1 Message Date
Robin Gareus
37d130f6e1 Fix Aux-send gain automation latency compensation 2024-03-03 01:08:07 +01:00
Robin Gareus
3de600625f Consolidate internal bus checks (1/2) 2024-01-06 20:21:51 +01:00
Robin Gareus
295dbd8e1e Make RCU reader return a const pointer (omnibus commit) 2023-04-08 00:15:37 +02:00
Paul Davis
b35518e212 switch from boost::{shared,weak}_ptr to std::{shared,weak}_ptr
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.
2023-03-24 14:19:15 -06:00
Robin Gareus
f3423b8a77 Consolidate send/delivery gain control
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.
2022-10-14 02:21:49 +02:00
Robin Gareus
183604a66b Add polarity invert switch to sends
This allows to invert polarity of the signals of all channels on the
send path. There is intentionally no per channel control.

see https://discourse.ardour.org/t/send-phase-swtich/107564
2022-09-04 01:35:24 +02:00
Paul Davis
7bf89ce109 Constification: make Stateful::get_state() const, with all other required const-ness added (libs) 2022-04-06 21:56:59 -06:00
Paul Davis
83c7ac4f38 libardour: use Processor::check_active() in all Processors instead of per-processor code
There are a few exceptions where the semantics make this too complex to be worth forcing check_active()
2021-11-29 21:50:29 -07:00
Paul Davis
4ea2fdd5bd Fix internal (aux) send to call ::use_target() when Session::AfterConnect is emitted 2021-11-03 15:07:46 -06:00
Hector Martin
9b99633abe Fix MIDI send latency compensation 2021-08-20 17:37:09 +02:00
Robin Gareus
5e1f2d21f8 Fix issues when using MIDI sends with small buffersizes
MIDI data buffers are fixed size, independent of the engine's
buffersize (compare to ThreadBuffers::ensure_buffers)
2021-08-07 23:38:14 +02:00
Robin Gareus
983c577945 Fix send panner when copying sends
* 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.
2021-01-18 18:58:10 +01:00
Robin Gareus
303d7bb2e8 Do not allow feedback override on foldback sends
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.
2021-01-08 18:39:07 +01:00
Robin Gareus
2e98c57fb8 Finalize experiment: always propagate solo via sends
See also caf057f06d
2020-10-23 00:24:06 +02:00
Robin Gareus
10200f5e29 Fix crash when closing session with VCA slaved solo
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.
2020-05-13 17:58:37 +02:00
Robin Gareus
21f2c01fcd Fix aux-send solo propagation
* 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
2020-05-08 14:59:44 +02:00
Robin Gareus
caf057f06d Experiment: propagate solo-state with internal-sends
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.
2020-05-08 06:35:08 +02:00
Robin Gareus
5b113c9c5b Fix un/bypassing Aux-send panners
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.
2020-03-12 02:23:49 +01:00
Robin Gareus
33f85b094b NO-OP: reduce scope 2020-03-12 02:13:27 +01:00
Robin Gareus
dd30b8b31e NO-OP: whitespace 2020-03-12 01:58:50 +01:00
Robin Gareus
82541b33a4 Retain custom internal-send name on session re-load 2020-03-02 21:54:38 +01:00
Robin Gareus
6e0062d549 Refactor send naming (#7905)
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.
2020-03-02 20:07:52 +01:00
Robin Gareus
a22f918d9d Update libardour GPL boilerplate and (C) from git log 2019-08-03 15:53:16 +02:00
Len Ovens
777fe3c68f Add personal monitor sends 2018-10-19 08:51:29 -07:00
Len Ovens
5b280463ce Noop: fix white space 2018-10-17 16:25:49 -07:00
Len Ovens
5e21b6633d Option to hide send if aux is hidden 2018-10-17 15:59:00 -07:00
Robin Gareus
e31f5d9998 Clean up State API:
* 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
2017-10-04 00:54:55 +02:00
Robin Gareus
9f9e948d84 Update Send: Include internal 'thru' delay-line
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.
2017-09-29 05:03:48 +02:00
Robin Gareus
5a2ea4d0e2 Delayline naming -- for debug purposes 2017-09-29 05:03:48 +02:00
Paul Davis
30b087ab3d globally change all use of "frame" to refer to audio into "sample".
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-09-18 12:39:17 -04:00
Robin Gareus
8e4eb42833 Fix send mono to stereo (or N to M; M > N) sends #7409 part 1/2 2017-06-29 04:40:00 +02:00
Tim Mayberry
34eb49b782 Use XMLNode::get/set_property API in ARDOUR::InternalSend class 2017-04-19 09:36:52 +10:00
Robin Gareus
9089c1c6bf Fix AFL/PFL from MIDI tracks without audio (zero buffers) 2017-03-05 21:18:18 +01:00
Robin Gareus
c21a0760a4 allow feedback (loops) from internal sends
This facilitates custom "Echo" chains:

  Bus 1 [FX] [aux-send to Bus 2] -> master
  Bus 2 [FX] -> Bus 2
2016-10-14 15:06:49 +02:00
Paul Davis
cf52d6e4b4 enough with umpteen "i18n.h" files. Consolidate on pbd/i18n.h 2016-07-14 14:45:23 -04:00
Robin Gareus
b64a6b658e handle internal-sends from audio to midi busses 2016-07-09 13:51:52 +02:00
Julien "_FrnchFrgg_" RIVAUD
09c4c51335 Make internal sends aware of non-audio data
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.
2016-07-09 02:00:27 +02:00
Robin Gareus
e9a8ccc7e2 major internal plugin & processor API change:
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.
2016-06-25 02:23:56 +02:00
Paul Davis
17ace643e4 OMNIBUS COMMIT: prefer const XMLNode::property method (and provide a real one) 2016-05-04 23:09:45 -04:00
Paul Davis
1948b50a68 working version of new gain control design 2016-01-18 12:11:08 -05:00
Robin Gareus
22b07e0233 NOOP, remove trailing tabs/whitespace. 2015-10-05 16:17:49 +02:00
Paul Davis
96cc1dbe80 Revert "add an Amp to Delivery, remove it from Send, make use of this in various ::run() methods"
This reverts commit 601a34521c.
2015-09-16 18:38:44 -04:00
Paul Davis
601a34521c add an Amp to Delivery, remove it from Send, make use of this in various ::run() methods
Delivery::_amp now will handle monitor-related delicks assuming the Session::config.get_use_monitor_fades() is
true.
2015-09-15 16:35:37 -04:00
Ben Loftis
46f97e8d92 Initial Gain Coefficient tweaks
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
2015-04-22 00:22:43 +02:00
Robin Gareus
83519faffb low-pass filter gain-fader.
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.
2015-04-07 05:21:57 +02:00
Robin Gareus
07a651d2ec release shared route pointer kept by InternalSend when dropping refs.
fixes "SessionHandleRef exists across session deletion"
when using AuxSends
2014-09-03 05:20:28 +02:00
Robin Gareus
f6aaa1660b en/disable internal send+returns with tracks en/disable. 2014-06-23 00:48:47 +02:00
Robin Gareus
ca3c9cae6e basic integration of delaylines (still un-nused) 2014-06-11 17:14:18 +02:00
Robin Gareus
7bc3e0dab4 don't add a [shared] panner for the sends to monitoing section
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.
2014-02-07 19:30:43 +01:00
Robin Gareus
06cc5e5240 fix bitslot already in use warning
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.)
2014-01-22 13:06:58 +01:00