Commit Graph

18702 Commits

Author SHA1 Message Date
Robin Gareus
d9ec733c47 Dump XML node if loading a source fails
This helps to debug issues, in case this comes up in a session
with many sources.
2022-02-03 21:57:13 +01:00
Paul Davis
3c2fdab1ce triggerbox: add Properties::channel_map (and sent it); save/restore channel map state (untested) 2022-02-03 13:07:04 -07:00
Paul Davis
bce4eb36ad triggerbox: add MIDITrigger channel mapping 2022-02-03 12:37:49 -07:00
Paul Davis
ead02f50b1 triggerbox: save/restore state for assigned patch changes in MIDITrigger 2022-02-03 09:24:30 -07:00
Paul Davis
fd3d17562c triggerbox: do not send embedded patch change events if Trigger has its own 2022-02-02 16:05:17 -07:00
Robin Gareus
a9b484e97e Auditioner: retain instrument plugin
This allows the Trigger Clip Picker to keep the
Plugin GUI available, and retain any custom settings.
2022-02-02 23:08:48 +01:00
Paul Davis
35b6ddfb77 triggerbox: deliver required patch changes into buffers whenever MIDITrigger::startup() happens 2022-02-02 15:06:11 -07:00
Paul Davis
c7b8faad5a MidiStateTrack: use correct hex values to manage set/unset state 2022-02-02 15:06:11 -07:00
Paul Davis
374faa0d5c PatchChange: use correct hwx constants to detect/set "unset" byte values 2022-02-02 15:06:11 -07:00
Paul Davis
31f4d8a2ca PatchChange: fix operator=() implementation which failed to manage event buffer ownership correctly 2022-02-02 15:06:11 -07:00
Paul Davis
6175af002c triggerbox: MIDITriggers get 16 patch changes, 1 per channel
These can be set, fetched and queried but at this point they do nothing
2022-02-02 15:06:11 -07:00
Paul Davis
603d1f1f57 evoral: some changes/extensions to Evoral::PatchChange to make it more useful
The concept of an "unset" PatchChange now exists, and thus a default constructor that constructs
such a thing
2022-02-02 15:06:11 -07:00
Paul Davis
0b395c161d triggerbox: apply gain to MIDI note events 2022-02-02 09:58:57 -07:00
Paul Davis
2eadb75bd1 move static scale_midi_velocity() function from Amp to Evoral::Event 2022-02-02 09:58:57 -07:00
Paul Davis
15f248975f remove unused member of MidiStateTracker
We store "have program" as the 8 (MSb) bit of the program
array, and similary for other state holding elements
2022-02-02 09:58:57 -07:00
Robin Gareus
6900facef2 Fix potential deadlock
block_processing() may hold the process-lock, waiting
for the latency-lock. at the same time audio-engine
may hold the latter, trying to acquire the former.
2022-02-02 14:16:50 +01:00
Paul Davis
fec679c602 triggerbox: refactor ::maybe_compute_next_transition() so that we can use the same code when fast-forwarding 2022-02-01 19:55:37 -07:00
Paul Davis
f5d5ecffbb triggerbox: change note tracker to a full state tracker, and move it up to the TriggerBox
We don't need one state tracker per trigger, one per box is more appropriate
2022-02-01 18:06:40 -07:00
Paul Davis
8449d344ae add MidiNoteTracker::flush_notes() that writes note-on events corresponding to currently-on notes
This does not maintain note timing, but once the buffer contents arrive at a receiver, it should
be playing all the notes that were marked on in the tracker
2022-02-01 18:06:40 -07:00
Paul Davis
885d2feb6a add basics of a method to flush MidiStateTracker state to a MidiBuffer
When the buffer is delivered to a receiver, the receiver should (theoretically) end up
the same state as the MidiStateTracker
2022-02-01 18:06:40 -07:00
Paul Davis
04004d2178 add skeleton for full MidiStateTracker 2022-02-01 18:06:40 -07:00
Paul Davis
1ab49bcc32 change MidiStateTracker to MidiNoteTracker
The old name will become a bigger class/object that tracks all MIDI state,
not just notes
2022-02-01 18:06:40 -07:00
Robin Gareus
77a60d9e2d Remove unused API 2022-02-02 00:27:35 +01:00
Robin Gareus
f103b984ab Fix bounce + callback concurrency
Prevent Session::write_one_track to commence while latency
callback is already in progress. See also
* 19067f8c87
* 2eaa0183ef
2022-02-02 00:27:35 +01:00
Robin Gareus
19067f8c87 Another refinement to address bounce + callback concurrency
see also 2eaa0183ef
2022-02-01 23:49:38 +01:00
Robin Gareus
200469dce8 Remove 18 month old debug messages 2022-02-01 22:01:41 +01:00
Robin Gareus
031a05b07a Return early if processing is blocked
There is no need to setup thread-local variable
if they are never used.
2022-02-01 21:40:11 +01:00
Robin Gareus
2eaa0183ef Fix bounce + latency update concurrency
When bouncing Region or Range, Session::write_one_track()
blocks processing, but takes no process-lock.

It is possible that a latency-callback arrives at the same
time while Route::bounce_process is active and calls ::run.

This can trigger a delayline.cc  Assertion `lm.locked ()' failed
in either thread.

Now latency-callbacks are postponed until the session can
process normally again
2022-02-01 21:40:11 +01:00
Robin Gareus
c17fbd5abc Fix poor_mans_glob, ~' for $HOME' is only valid at the start of a path 2022-02-01 15:47:54 +01:00
Robin Gareus
6f04296635 Expand default clip-library-dir preference at application start
This is in preparation for allowing to use it in Preferences.
Previously it was lazily set when first used.
2022-02-01 15:47:54 +01:00
Paul Davis
8e4fdb071b triggerbox: keep track of, and make available, "empty" status for a triggerbox.
Includes PBD::Signal that notifies when a TriggerBox's empty status changes
2022-01-31 22:40:05 -07:00
Robin Gareus
b55ef8543d Fix compilation of triggerbox.cc (amend ca6c99586f) 2022-02-01 03:50:23 +01:00
Ben Loftis
2fdf54874a triggerbox: remove unused enable_triggers config var (reverts 21ed6a) 2022-01-31 20:25:05 -06:00
Paul Davis
ca6c99586f triggerbox: minor arithmetic fix to help with clicks at clip end
process_index should not be compared/combined with expected_end_sample, since
the former is a process-cycle count and the latter is a timeline position.
2022-01-31 15:57:13 -07:00
Paul Davis
866ba8b174 playlist: find_prev_region_start() should return zero if no earlier region is found (used during rippling 2022-01-30 22:49:52 -07:00
Robin Gareus
cc426b6d14 Dim text rendered with ShadedPlusSign 2022-01-31 01:58:42 +01:00
Robin Gareus
f4dd5d9a6f Add folder icon 2022-01-30 22:44:39 +01:00
Paul Davis
d43e2c25bc triggerbox: remove passthru property and everything related.
TriggerBox is always a passthru processor now. Monitoring (or not) is intended
to be controlled via other means
2022-01-30 13:37:52 -07:00
Ben Loftis
4450b5be2c triggerbox: potentially useful comment about the process of slot property-setting
* first the region is scanned for bpm and one-shot status
* then we handle properties that should be applied from a drag&drop
* then we handle the existing arrangement-style slot properties that should persist
2022-01-30 13:44:41 -06:00
Robin Gareus
3689068561 Clip Library support
This allows to export Regions to a shared folder.
2022-01-29 16:22:47 +01:00
Robin Gareus
01d964b176 Do not announce exported MIDI files
This would otherwise trigger ARDOUR::Session::add_source
which will add the external path to as session search location.
2022-01-29 16:22:33 +01:00
Robin Gareus
6dc66ea78f Prioritize self-deletion
This addresses the issue described in 83719fba1a.
First process all queued self_delete() requests before scheduling
Editor::redisplay_track_views() which uses PRIORITY_DEFAULT.
2022-01-29 05:17:00 +01:00
Paul Davis
c6a31250ba alter Source::_length from timecnt_t to timepos_t
THe length of a Source(File) is always measured from its start. In this sense,
the length is like a position on the timeline, which is a duration with an
implicit origin, or a Region start, also a duration with an implicit origin (in
that case the start of the Source). There is no good reason for using
a timecnt_t for this value, because the position component of a timecnt_t
(the origin for the duration) is implicit and always zero. So we make
this property into a timepos_t, and include a number of asserts() to check
for common possible coding errors related to the time domain
2022-01-28 15:52:27 -07:00
Paul Davis
8e749d7e76 fix length of whole file region for captured MIDI
The length needs to use consistent time domains for duration and position,
and total_capture is a sample count. The "real" length of a whole
file region is the length of its source, so just defer to that.
2022-01-28 11:16:02 -07:00
Robin Gareus
562cb7cb3a Cancel audition when the backend is stopped 2022-01-28 06:41:37 +01:00
Robin Gareus
b2360a9a0a Fix process graph changes during audition
Session::process_audition calls Graph::swap_process_chain()
to handle any pending graph changes (notably route removal
depends the graph to switch chains to drop references).

However this must not change the Graph::_trigger_queue
(which is refilled when processing resumes).

Previously routes were added to the trigger_queue, leading to
an inconsistent Graph state. When the terminal-count was reached
the trigger-queue was not empty. Process threads ran after processing
already completed and or concurrently with processing.

A common result of that was:
delayline.cc:70: virtual void ARDOUR::DelayLine::run(ARDOUR::BufferSet&, ARDOUR::samplepos_t, ARDOUR::samplepos_t, double, ARDOUR::pframes_t, bool): Assertion `lm.locked ()' failed.
2022-01-28 06:40:57 +01:00
Robin Gareus
2c9c80ae62 Amend f322c4ded7, clean up includes, fix visibility 2022-01-28 02:29:11 +01:00
Robin Gareus
ec6cd4539d Implement Region::export()
This adds an abstract API, matching the exiting MIDIRegion::do_export(),
which allows to export multi-channel audio-files.
2022-01-28 01:58:37 +01:00
Robin Gareus
f322c4ded7 Separate sndfile.hh implementation into C++ source
This is required to be able to include
"audiographer/sndfile/sndfile_writer.h" in more than
one source file. which would otherwise lead to
duplicate symbol: AudioGrapher::SndfileHandle::..
2022-01-28 01:52:07 +01:00
Paul Davis
98ad20529b fix loading of regions in older session files
In session file formats earlier than 7000, region position and length
are stored in distinct XML node properties. For 7000 or later, both
position and length are part of the "length" member. Fix reloading
this by noting session file format and loading position and length
more explicitly
2022-01-27 15:36:06 -07:00