Commit graph

18657 commits

Author SHA1 Message Date
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
Robin Gareus
7eb53828a9
Do not warn about TB sidechain connection when preference is unset 2022-01-27 23:04:30 +01:00
Paul Davis
15bb91cf4f canvas: fixing missing initializer for _scroll_translation in 3rd Item constructor 2022-01-27 14:02:34 -07:00
Ben Loftis
7a3624af6f TriggerBox: copy over a subset of user-settings into a dropped slot using a static variable (@robin) 2022-01-27 13:22:46 -06:00
Ben Loftis
3605f51e7e TriggerBox: trigger_by_id searches the box for a trigger with matching pbd::id 2022-01-27 13:15:27 -06:00
Ben Loftis
63e134097c Session::trigger_by_id finds a trigger from its pbd::id 2022-01-27 13:15:27 -06:00
Paul Davis
15f0e4dbbf triggerbox: fix cue playback and recording
Somewhat alarmed that gcc (at least) allows if (cue_recording ...) to be
used just like if (_cue_recording) even though the former is a class method
and the latter is a class member.
2022-01-27 11:36:04 -07:00
Paul Davis
0dc19a2b31 triggerbox: allow setting of start to work correctly (for audio triggers) 2022-01-26 21:23:40 -07:00
Paul Davis
fdf0c069ca triggerbox: take start offset into account when computing ends 2022-01-26 21:22:40 -07:00
Robin Gareus
729ff35faf
Mark session as modified when stripable order chanes
Previously this was handled by the Editor/Mixer Treeviews,
centralizing it in Session makes more sense.
2022-01-27 01:28:49 +01:00
Ben Loftis
a274c1473a Triggerbox: Preserve some settings when dragging a new clip into a slot 2022-01-26 17:57:55 -06:00
Ben Loftis
b1c04f1108 Triggerbox: Empty slots act as a Stop unless cue_isolated is set (TODO: can we report this to user?) 2022-01-26 17:57:55 -06:00
Robin Gareus
036ad841bf
Remove using namespace Gtk; from headers
This causes issues if the header is included early on
in particular a conflict with gdkx.h
The reference to ‘Window’ is ambiguous `Gtk::Window` vs [X11]Window.
2022-01-26 22:32:28 +01:00
Robin Gareus
c9f40a0bf5
Fix pane size for widgets that explicitly allow 0 size
Amend 1aca71e22b
2022-01-26 22:32:27 +01:00
Ben Loftis
3362f7d4fa Triggerbox: support for files that use a space between bpm value and bpm text 2022-01-26 11:51:08 -06:00
Ben Loftis
efb44fc640 triggerbox: barcnt -> beatcnt (libardour part) 2022-01-26 11:51:07 -06:00
luz paz
364f2f0788 Fix typos in gtk2_ardour/ directory
Found via `codespell -q 3 -S *.po,./share/patchfiles,./libs -L ba,buss,busses,doubleclick,hsi,ontop,ro,seh,siz,sur,te,trough,ue`
2022-01-26 12:35:38 -05:00
Paul Davis
f20966cbad triggerbox: formalize setter/getter methods for Trigger properties
These are all defined via macros now. We send PropertyChange notifications when the value is set
even though it may not yet be in use.

This also changes the std::atomic used to protect the UIState<->Properties interlocking to
unsigned, to get defined behavior when the generation counter wraps
2022-01-26 10:12:13 -07:00
Robin Gareus
1aca71e22b
Fix ArdourWidgets::Pane honor child min-size
This doesn't yet correctly fix Pane::constrain_fract() constraints,
when moving the divider, but it does prevent child widgets from
being allocated with a size smaller than their minimum.

This fixes some layout and rendering issues (widgets that have
a too small allocation are not exposed and/or bleed into neighbors)
2022-01-26 17:24:31 +01:00
Paul Davis
9ac93a4792 triggerbox: sidechain should only process "its" MIDI buffer when looking for events 2022-01-26 07:57:32 -07:00
Paul Davis
a7645022e1 triggerbox; fix i/o configuration of sidechain 2022-01-26 07:57:05 -07:00
Paul Davis
ccf90a9181 triggerbox: change to a CAS-based mechanism for setting UI-controlled properties
UIs only set a "shadow" value of most trigger properties, and use CAS to interlock (contention
is not expected to ever be an issue, it would imply two UIs being used to control this at
precisely the same time. The actual properties are updated whenever the trigger calls ::retrigger()
2022-01-25 18:07:21 -07:00
Robin Gareus
f7b826841b
Log Thread-name in stacktrace 2022-01-26 00:17:49 +01:00
Paul Davis
b7769a8f4b possible fix for a valgrind reported illegal read 2022-01-24 16:42:12 -07:00
Robin Gareus
bdb91a434a
Simplify call to find_route_name()
Use std::string directly. There's no need to create a temporary
std::string from a char* when the API can use it directly.
2022-01-24 21:25:20 +01:00
Robin Gareus
7128c9958f
Fix crash when duplicating track(s)
Compare to PluginInsert::set_state(). The sidechain must not
inherit the name from the template track. That leads
to port-name ambiguities.

Also later there will be a crash when ::update_sidechain_name()
calls IO::set_name since: _name is not found in _current_name.
2022-01-24 21:25:20 +01:00
Paul Davis
8a310a748a add new config variable for interview-editing
If enabled, this prevents range-selection from propagating across
all tracks when RippleAll is set
2022-01-24 11:29:36 -07:00
Robin Gareus
1c5cfdad82
..but there is a Temporal::timecnt_t modulo operation 2022-01-24 06:51:28 +01:00
Robin Gareus
dd0dcd6d59
timepos_t modulo operator is defined but not implemented 2022-01-24 06:50:52 +01:00
Robin Gareus
90ff5de6e3
Add Lua bindings for libtemporal type operations
This allows to use standard arithmetic (+ - * / %) and
relational (< <= ==) operations on Temporal::timepos_t
and Temporal::timecnt_t class instances.

Furthermore `print()` outputs the actual value (no longer
user-data pointer to the instance).
2022-01-24 06:23:16 +01:00
Robin Gareus
d51a1ccd99
Add API to modify Lua Metatable and set Metamethods
This allows to map C++ operators to be used as Lua
arithmetic and relational operations.
2022-01-24 06:23:16 +01:00
Ben Loftis
00aec4f91e Trigger page: changes to cue-recording behavior (see comments) 2022-01-23 20:24:44 -06:00
Ben Loftis
f35cb6da8f trigger page: cue recording should be disabled by default 2022-01-23 20:24:44 -06:00
Paul Davis
fea76a4adf fix thinko in cleaning up of XML nodes in Session::memento_command_factory()
"child" is not an independent object, but points to either before or after, both of which have
already been deleted
2022-01-23 07:46:45 -07:00
Mads Kiilerich
6ff1d86cad wscript: improve configure messages slightly 2022-01-22 22:19:07 +01:00
Mads Kiilerich
8bb91099c5 wscript: drop configure statements already present in the top level wscript
Avoid repeated pointless configure messages like:
Checking for 'g++' (C++ compiler!)                   : /usr/lib64/ccache/g++
Checking for 'gcc' (C compiler)                      : /usr/lib64/ccache/gcc
2022-01-22 22:19:03 +01:00
Mads Kiilerich
7f6ce9a010 sndfile: Fix skipping of first character of file names in error logging.
Logs for a file named ABCDEF.flac showed up as

  2022-01-19T16:31:55 [ERROR]: SndFileSource: could not seek to sample 90059776 within BCDEF.flac (No Error.)

So, evidently, there is no need for the substr(1).

_name is a PBD::Property<string> which already uses .val() for <<.

The same pattern is found and fixed in sndfilesource.cc and
coreaudiosource.cc .
2022-01-22 21:48:40 +01:00
Mads Kiilerich
197ec7a943 vst2: drop unused vst2_suffix static function
Address build warning:

../libs/fst/../ardour/vst2_scan.cc:549:20: warning: ‘std::string vst2_suffix()’ defined but not used [-Wunused-function]
  549 | static std::string vst2_suffix () {
      |                    ^~~~~~~~~~~
2022-01-22 20:26:50 +01:00
Robin Gareus
f9f3f598c4
Address rare race condition when creating sidechain inputs
Do not run the sidechaing processor before the processor
was configured. This ensure that Route::configure_processors()
has completed and ensure_buffers() was called.

Otherwise it may happen Sidechain::run could request a buffer
that is n/a (BufferSet::get_available assertion, see also 687149d8d2)
2022-01-22 19:26:27 +01:00
Robin Gareus
0e6561b009
Fix Thread & Lock issues when adding Triggerbox w/sidechain
Track::init() must not call `add_processor` directly.
The track is not in the process graph, yet and hence various
calls (e.g. lock graph, update latency etc) are not applicable.

Furthermore ::add_midi_sidechain() calls IO::add_port()
which takes the process-lock.

The solution is to create the Triggerbox early on and let Route::init
deal with it like any other internal processors.
2022-01-22 04:20:55 +01:00
Robin Gareus
687149d8d2
Require Session MIDI buffer for Triggerbox sidechain
This fixes an issue when adding a MIDI track, but there there
are no session-buffers for it, leading to:

ARDOUR::Buffer& ARDOUR::BufferSet::get_available(ARDOUR::DataType, size_t): Assertioni < _available.get(type)' failed.
2022-01-22 04:20:54 +01:00
Robin Gareus
fc9f796257
Revert "Process-lock is required when changing processors"
This reverts commit 0a213e71b3.
which needs a better solution to prevent deadlock in case the lock is
already taken.
2022-01-22 00:31:54 +01:00
Robin Gareus
0a213e71b3
Process-lock is required when changing processors
This is somewhat unfortunate, since session.cc also takes the
lock shortly afterward to call ->ensure_io()

This should be consolidated before release.
2022-01-22 00:06:13 +01:00
Paul Davis
2fa8c7cd42 triggerbox: if any cues were recorded, remove all existing cue markers in transport-roll-range before adding new ones 2022-01-21 13:08:47 -07:00
Paul Davis
fd3ddce80a do not play existing cue markers while recording cues 2022-01-21 10:55:55 -07:00
Paul Davis
e14acfc07d prevent multiple cue markers at the same location 2022-01-21 10:55:55 -07:00