previously, as soon as the Send is disabled, it would short-circuit ::run(),
preventing the fade to zero to take effect. Now, the send will run until the
effective gain reaches zero, and the return will collect data from it until it
is fully deactivated.
our policy is that "mute works on outputs", which means that mute should have
no effect on what an instrument plugin does. However, MidiTrack::act_on_mute()
used to inject sustain=0 messages into the data flow, which would affect
the instrument plugin(s) in the track.
now, MidiTrack::act_on_mute() simply notifies all Delivery objects in the track
that a MIDI mute is needed via a channel mask. The Delivery objects notice this
during their ::run() method, and deliver the required MIDI events to their
output ports.
There is still a potential issue that Amp objects which notice they have been
muted also send a similar set of messages. This needs more investigation and
possibly other changes. But this commit allows a sustained note to return after
the track is muted midway through it.
FLAC files are either read-only or write-only.
When recording the GUI may ask for additional data to render.
Depending on zoom level, this may require seeking in the audio
data, which in case of FLAC is not possible, and should fail silently:
ARDOUR::SndFileSource::read_unlocked()
ARDOUR::AudioRegion::read_peaks()
ArdourWaveView::WaveView::process_draw_request()
There are some issues with PBD::SignalWithCombiner on aarch64 when the handlers return bool. These
may arise from specializations of std::vector<bool> and std::list<bool> in stdlib, but this is
not clear. For now, to avoid an ASAN warning about calling operator delete() on stack memory,
change the only signal that does this to use int rather than bool
Unclear why I use this pattern when the change here uses the more normal way
of finding the upper/lower of some values. Either way, the code as it was would
skip the first event in a MIDI trigger (most of the time, anyway)
Rater than having each Delivery Object provide a Ringbuffer,
which is unused most of the time, the GUI will provide
them on demand.
We need to be careful of lifetime, and use `rt_safe_delete` in
case the Delivery holds the last instance.