Commit Graph

13664 Commits

Author SHA1 Message Date
Paul Davis
66a8776f98 fix InternalSend (and InterntalReturn) to allow fade out/MIDI mute
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.
2025-06-19 13:50:37 -06:00
Paul Davis
464ea0d31f fix Amp to send MIDI mute when the gain control is set to zero
Do not send MIDI mute from ::apply_gain(), which is too general and can end up
resending MIDI mute messages when the owner is muted.
2025-06-19 13:38:39 -06:00
Paul Davis
6b675bac18 for MIDI mute block in Delivery, add ALL_NOTES_OFF 2025-06-19 13:37:53 -06:00
Paul Davis
fc24c59eb9 refactor midi mute buffer sizing into a separate method for Delivery 2025-06-19 13:37:30 -06:00
Paul Davis
e45c2f616a modify Delivery::maybe_merge_midi_mute() to allow forcing the merge
In an internal send, this may be called with _current_gain not yet
at zero. So provide an extra argument to force the merge.
2025-06-19 13:36:50 -06:00
Paul Davis
4bf1202493 tiny optimization tweak and auto-fication for Amp::apply_simple_gain() 2025-06-19 09:13:25 -06:00
Paul Davis
8b09becf1d fix the way mute operates for MIDI tracks
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.
2025-06-19 08:03:43 -06:00
Paul Davis
919ce6309c auto-ify the main processor loop in process_output_buffers() 2025-06-19 08:03:43 -06:00
Robin Gareus
f64627da48 Fix include order TRACE_SETSESSION_NULL is defined in session_handle.h 2025-06-13 17:01:49 +02:00
Paul Davis
4a827ef7ee remove new functions that are not actually used 2025-06-07 23:03:30 -06:00
Paul Davis
3ac59dc837 some helper APIs to find things in a Session 2025-06-07 21:10:30 -06:00
Robin Gareus
f31df0a1d1 Announce and add last duplicated regions to the region-map
This fixes a potential issue of region being retained
at session close (no DropReferences signal).
2025-06-06 23:51:31 +02:00
Robin Gareus
f40b64b0d5 Properly handle incomplete audio read
DiskReader::[do]refill() returns either 0, or -1 on error.
2025-06-04 17:58:51 +02:00
Robin Gareus
b92fa1d0e4 Use PBD::CCurl for libardour HTTP/S requests 2025-05-20 00:03:21 +02:00
Robin Gareus
ba7e63f570 Ignore FLAC seek/peak-file read while recording
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()
2025-05-19 22:19:54 +02:00
Paul Davis
5d34dd2f57 change error message when a PortRegistrationFailure exception is thrown, to no longer refer specifically to JACK 2025-05-16 16:43:12 -06:00
Paul Davis
2b1c1804c5 NO-OP: whitespace 2025-05-13 16:43:20 -06:00
Paul Davis
7ce7d2239b NO-OP: add a couple of comment-placeholders about a post-record action choice 2025-05-13 12:16:11 -06:00
Paul Davis
35c6fdb044 NO-OP: remove "STEP XXX" elements from comments
They were inaccurate and out of order anyway.
2025-05-13 12:16:11 -06:00
Paul Davis
bbbedfcd1d triggerbox: use Trigger::disarm() more consistently 2025-05-13 12:16:11 -06:00
Robin Gareus
1e3100efbc Stretch gain envelope and region-FX automation with region 2025-05-08 22:01:25 +02:00
Robin Gareus
a3fb3abcc5 Add API to time-stretch region-FX automation 2025-05-08 21:53:59 +02:00
Robin Gareus
5d185c5885 TimeFX: copy region Fx (if any) 2025-05-08 17:34:41 +02:00
Robin Gareus
3f1cb6c019 TimeFX: copy region gain evevelope 2025-05-08 17:34:07 +02:00
Nils Philippsen
3c63a81c1c Don’t install test programs
Signed-off-by: Nils Philippsen <nils@tiptoe.de>
2025-05-06 23:42:07 +02:00
Robin Gareus
d685b000c6 Use consistent duration calculation when relayering 2025-05-06 23:08:47 +02:00
Paul Davis
9096acd3b4 change PortCountChanging to prefer handlers that return int
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
2025-05-04 19:21:50 -06:00
Robin Gareus
868d8c1d51 Document and fix monitoring-states
See https://manual.ardour.org/appendix/monitor-modes/

This fixes #11, #27 (auto-in, rolling, track armed, but session
disarmed)
2025-05-01 17:15:57 +02:00
Paul Davis
52996e7a8d fix thinko when setting MIDI trigger first/last event indices
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)
2025-04-24 16:41:49 -06:00
Paul Davis
3918fea26f provide Session::armed_triggerbox() API 2025-04-24 12:07:19 -06:00
Paul Davis
86ef6a5e59 remove debug output 2025-04-24 12:07:19 -06:00
Robin Gareus
5f1bea0b6b Fix rec-arm disable
This broke in 91f9561958, when the condition for clip
recording was added.
2025-04-19 18:40:50 +02:00
Paul Davis
ef0a8ba524 allow a trigger slot to use an empty region
hopefully there are no complications from this :(
2025-04-16 20:43:37 -06:00
Paul Davis
7cf63d1d46 triggebox: random extra DEBUG_TRACE output
Also, if a trigger is already stopped, ::shutdown_from_fwd() now does
nothing at all
2025-04-16 12:05:59 -06:00
Robin Gareus
bf6ad57083 Add Lua bindings for StereoCorrelation meter 2025-04-15 19:08:02 +02:00
Robin Gareus
5f460bd280 Add Stereo Correlation Meter DSP 2025-04-15 17:56:33 +02:00
Paul Davis
fc31513bbe fix inappropriate signal emission patterns in Triggerbox/Trigger 2025-04-14 10:15:03 -06:00
Paul Davis
64d1398797 emit rec enable change signal from Triggerbox when done capturing 2025-04-11 17:11:28 -06:00
Paul Davis
cf27064915 correct arithmetic used to compute a quantized trigger start/stop transition 2025-04-11 11:23:36 -06:00
Paul Davis
3486ec924d expose start time for recording into a triggerbox slot 2025-04-11 11:23:36 -06:00
John Emmas
937dd4b587 Class 'MIDISceneChange' now needs to be visible outside of libardour 2025-04-09 12:01:01 +01:00
Paul Davis
259e878887 libardour: fix MidiRegion::fix_negative_start() to match new API 2025-04-08 15:50:30 -06:00
Paul Davis
72dd5b1258 NO-OP tiny rewording of a comment 2025-04-08 15:50:30 -06:00
Paul Davis
fe3aadb1bc libardour: change implementation of MidiModel::insert_silence_at_start()
Use the much lighter weight ShiftCommand model introduced in 4ee709af7b.
2025-04-08 15:50:30 -06:00
Paul Davis
4ee709af7b libardour APIs for Sequence::shift (timepos_t const &)
A way to move all MIDI data in a Sequence later in time.

This is likely not finished, and may need a new signal for
notifications
2025-04-05 17:25:03 -06:00
Paul Davis
9c0c3309e6 avoid compiler warnings 2025-04-05 17:25:03 -06:00
Houston4444
eb6f525938 add fade_in_length and fade_out_length lua bindings on region 2025-04-04 13:16:55 +02:00
Robin Gareus
0e011e0e90 NO-OP: cleanup 2025-04-03 21:06:14 +02:00
Robin Gareus
4f8a6e8e80 Fix stretching mono files on multi-channel trigger slots
Like in the non-stretch case `chn % data.size ()` is used.
2025-04-03 21:01:45 +02:00
Robin Gareus
e12d8b3769 Add API to tap signal from a Delivery to RTA
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.
2025-03-31 20:20:09 +02:00