Commit Graph

28984 Commits

Author SHA1 Message Date
Nikolaus Gullotta
a655997749 Add more options to Mixer Reset script
Added the ability to unassign all slavables from their VCAs, and to
reset record enable controls
2020-02-03 15:38:37 -06:00
Robin Gareus
788d77fe5c Initialize uninitialized variable (Session StateProtector) 2020-02-03 17:29:48 +01:00
Nikolaus Gullotta
70f72800c1 Fix plugin removal in Reset Mixer script
Removing processors while iterating over the route invalidates the
loop. Instead, queue the plugins for later handling
2020-01-31 09:16:57 -06:00
Robin Gareus
cb09a0884b Clarify stop-at-marker transport position logic 2020-01-31 02:11:41 +01:00
Robin Gareus
e03136646d Fix "stop at marker" script for A6 2020-01-31 01:49:56 +01:00
Robin Gareus
d14d396967 Lua bindings for locations and locate disposition 2020-01-31 01:45:07 +01:00
Robin Gareus
44e55c501e Add some const'ness 2020-01-30 23:35:37 +01:00
Robin Gareus
d887f5965a Fix assert() when removing track(s)
ARDOUR::Session::remove_routes() explicitly calls
save_state (_current_snapshot_name)

Update assert() to treat an empty name
equivalently as explicitly specified _current_snapshot_name
2020-01-30 21:08:02 +01:00
Nikolaus Gullotta
d4f816c158 NOP: Convert spaces to tabs a-la style-guide
I forgot to include this in 454a2d0
2020-01-30 13:48:21 -06:00
Nikolaus Gullotta
454a2d0cce NOP: Convert back to using tabs instead of spaces
See Ardour style guide rule #27 for reasoning
2020-01-30 13:43:40 -06:00
Robin Gareus
cfea85b496 Use session-version when loading processor state
Stateful::loading_state_version vs.
Stateful::current_state_version

See also 0a5837ec71
2020-01-30 18:52:32 +01:00
Robin Gareus
d72b44b5a4 Fix scripted/meta session templates 2020-01-30 18:09:01 +01:00
Nikolaus Gullotta
e468b291cd NOP: Convert tabs to spaces, trim whitespace 2020-01-30 09:10:11 -06:00
Nikolaus Gullotta
327cd513d3 Update mixer Store/Recall to work with new published bus controls 2020-01-30 09:10:11 -06:00
Robin Gareus
6069c870f8 Fix recursive locks during undo/redo due to state save
undo may restore locations, which may trigger a state-save.
This can result in a deadlock:

Location::set_state () -> Locations::get_state()
both acquire a the same lock:

#2  0x000055a8421836d0 in Glib::Threads::Mutex::Lock::Lock(Glib::Threads::Mutex&) (this=0x7ffe38dcad40, mutex=...) at /usr/include/glibmm-2.4/glibmm/threads.h:687
#3  0x00007fc637731e9c in ARDOUR::Locations::get_state() (this=0x55a8466d4740) at ../libs/ardour/location.cc:1075
#4  0x00007fc637bf14b7 in ARDOUR::Session::state(bool, ARDOUR::Session::snapshot_t, bool)
   (this=0x55a846d0f050, save_template=false, snapshot_type=ARDOUR::Session::NormalSave, only_used_assets=false) at ../libs/ardour/session_state.cc:1406
#5  0x00007fc637bed2c8 in ARDOUR::Session::save_state(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, bool, bool, bool, bool)
   (this=0x55a846d0f050, snapshot_name="", pending=true, switch_to_snapshot=false, template_only=false, for_archive=false, only_used_assets=false) at ../libs/ardour/session_state.cc:815
#6  0x00007fc637b4d967 in ARDOUR::Session::auto_punch_start_changed(ARDOUR::Location*) (this=0x55a846d0f050, location=0x55a848fe11d0) at ../libs/ardour/session.cc:1395
#7  0x00007fc637b4da21 in ARDOUR::Session::auto_punch_end_changed(ARDOUR::Location*)
   (this=0x7fc637b4da21 <ARDOUR::Session::auto_punch_end_changed(ARDOUR::Location*)+67>, location=0x7ffe38dcbf10) at ../libs/ardour/session.cc:1403
[..]
#14 0x00007fc637730a2a in ARDOUR::Location::set_state(XMLNode const&, int) (this=0x55a848fe11d0, node=..., version=6000) at ../libs/ardour/location.cc:715
#15 0x00007fc637732428 in ARDOUR::Locations::set_state(XMLNode const&, int) (this=0x55a8466d4740, node=..., version=6000) at ../libs/ardour/location.cc:1130
#16 0x000055a842388dd7 in MementoCommand<ARDOUR::Locations>::undo() (this=0x55a84d1e5f10) at ../libs/pbd/pbd/memento_command.h:141
#17 0x00007fc635b50707 in UndoTransaction::undo() (this=0x55a84d513b80) at ../libs/pbd/undo.cc:128
#18 0x00007fc635b50e1c in UndoHistory::undo(unsigned int) (this=0x55a846d11338, n=0) at ../libs/pbd/undo.cc:267
#19 0x00007fc637c0dfff in ARDOUR::Session::undo(unsigned int) (this=0x55a846d0f050, n=1) at ../libs/ardour/session_state.cc:5577
2020-01-30 04:16:19 +01:00
Robin Gareus
0d127813fb Allow StateProtector to save pending files
This is in preparation for saving state while the session is
record-arm'ed. Most notably config changes and undo/redo.

In case both normal and pending save happens, pending must be
last and is required to recover from crashes during recording.
2020-01-30 04:12:19 +01:00
Robin Gareus
998fadda57 Add some sanity checks for Session::save parameters 2020-01-30 04:09:48 +01:00
Robin Gareus
6452f62d64 Cont'd work on loading old route templates
This builds on top of 51d2bb:
 * v6 routes templates/states have a version per <Route>
 * older route-states are assumed to be from ardour-5
   Stateful::loading_state_version 3002,
   unless specified otherwise
2020-01-30 01:08:57 +01:00
Robin Gareus
51d2bb36ce Save/Use state-version with route templates
Currently using Ardour-5 route templates (state version "3002")
with Ardour6 fails. As opposed to session-templates, Route
templates were not versioned.

This ensures future compatibility (and may allow to interpret
unversioned templates as "3002")
2020-01-29 23:20:37 +01:00
Andreas Müller
015d4d3642 Find fmt-binding in out-of-tree building
Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
2020-01-29 19:41:12 +01:00
Nikolaus Gullotta
39dac5b20f Fix tests failing to build by adding LIB_FFTW3F 2020-01-29 10:12:04 -06:00
Robin Gareus
2731d494c2 Reduce overhead of Lua session-scripts 2020-01-29 16:51:14 +01:00
Robin Gareus
0ab46c342f Fix MIDI loop capture alignment
Loop recording creates a single long source, regions have to be
"split" from this source, using "start" as offset.

Since MIDI uses absolute timestamps, offsetting this by accumulating
 buffer_position += (*ci)->samples;
like Track::use_captured_audio_sources() does, is not correct.

Furthermore, record_enabled() may be off when stopping recording,
MIDI needs to be flushed regardless.
2020-01-29 16:25:33 +01:00
Robin Gareus
ffe7fcd3b0 Allow to dis/engage rec-arm while looping 2020-01-29 05:35:36 +01:00
Robin Gareus
6bc4f69c5c Fix loop recording alignment
DiskWriter::transport_looped() is called from the session
when engine loops. This does not take local disk-reader run()
latency offset into account.

finish_capture() needs to be postponed until the disk-writer
itself reaches the loop-position. This is achieved by
postponing loop() and calling it once loop-length of samples
has been captured.

This works because engaging loop always seeks to the loop-position
and first loop resets _capture_captured.
2020-01-29 01:32:06 +01:00
Robin Gareus
eb7297e2fc Remove duplicate separators from context menu 2020-01-28 23:38:02 +01:00
Robin Gareus
b21bab3a8c Don't allow to deactivate master 2020-01-28 23:37:10 +01:00
Robin Gareus
6dfee0b1d2 Amend 87af9fb (fix context menu, don't allow to remove master) 2020-01-28 23:17:21 +01:00
Robin Gareus
a430f65aa3 Initialize monitor-section output button
When loading a session the monitor-connection is made before
the GUI is initialized, the output button did not reflect
the actual connection.
2020-01-28 22:58:14 +01:00
Robin Gareus
87af9fb820 Consolidate Mixer-strip sensitivity
* Use a single method to set mixer-strip widget sensitivity
* Update context-menu to only allow show actions that can
  currently be performed, depending on active/inactive state.
* Mark all control elements of in-active strips as insenstive
  except those required to re-enable the route.
* Also update processor-box and solo-button when showing Aux

Special case Mixbus. Mixbus already shows a "Insensitive" label,
and Mixbus-channelstrip element sensitivity remains to be
implemented before using this mechanism.
2020-01-28 22:22:57 +01:00
Robin Gareus
cb01a910d7 Micro optimization: query PI flags once
This also removes a Mixbus special case, explicit ->mixbus() tests
are no longer required.
2020-01-28 21:27:43 +01:00
Paul Davis
6b0a3cfffe fix previous commit, and another instance of the same (incorrect constructor) issue 2020-01-28 13:04:39 -07:00
Paul Davis
a5dbac0a9c fix assert-crash caused by not constructing a StopTransport event correctly 2020-01-28 12:54:04 -07:00
Robin Gareus
b2051d98fd Clarify pending-state message
Previously this dialog was mainly used for crashes during
recording. Now it is also used for backup saves in general.
2020-01-28 17:29:36 +01:00
Paul Davis
e6ce5a611c shortest note length after a drag-trim is 1 tick, not 1/512 beats 2020-01-28 00:06:12 -07:00
Paul Davis
fd62b38f8d correct computation of new note length after a front-drag-trim 2020-01-28 00:05:44 -07:00
Paul Davis
10978a2f58 rearrange MIDI preferences "tab" to include ports and remove Buffering 2020-01-28 00:05:05 -07:00
Paul Davis
5d99526406 correct location of resolved note-offs after region is rendered 2020-01-27 22:17:07 -07:00
Paul Davis
4148d2cee4 fix bad re-ordering in ARDOUR_UI::set_session() that changed when transport-related actions are set sensitive (compared to v5)
This specific change has broader scope than the bare minimum required - we could just move/replicate transport_ctrl.set_session()
after session_sensitive_actions have had their sensitivity set to true. But this "seems" like a more thorough solution,
in that it sets all relevant actions groups before doing anythng else.
2020-01-27 18:24:30 -07:00
Robin Gareus
7e899b4199 Restore engine state for auto-start 2020-01-27 22:27:29 +01:00
Robin Gareus
8e5e902b5c Fix sending MMC Start/Stop messages
Ardour 5.x slave check was incorrectly ported to A6's TMM:
In Ardour 5 the comparison tested for *not* MTC:
```
  if (!dynamic_cast<MTC_Slave*>(_slave)) { ..send MMC.. }
```

Other MMC messages (Record, Locate) are sent unconditionally.
2020-01-27 21:49:53 +01:00
Robin Gareus
44440f9316 Add new requirements from AudioEngine::stop to ::drop_backend
This fixes an issue that after changing backends (::set_backend),
the session-transport was in inconsistent state. If it was rolling,
it continued to roll with "stop" being unavailable.
2020-01-27 20:26:06 +01:00
Robin Gareus
5c789547cb Fix building unit-tests 2020-01-27 17:43:37 +01:00
Robin Gareus
f101a657f2 Fix two more clang static analysis warnings 2020-01-27 17:42:28 +01:00
Robin Gareus
f9cc630b10 Delete out-of-bounds metronome clicks 2020-01-27 03:35:28 +01:00
Robin Gareus
6aac8b2c8a Fix another clang-scan warning 2020-01-27 03:32:18 +01:00
Robin Gareus
fc7dd5115d Fix some clang-scan warnings 2020-01-27 03:31:49 +01:00
Ben Loftis
cf4d7387d2 Use a sensible min length for default session-duration
If the user tries to set the Start or End marker on an empty session,
apply some sensible defaults for the resulting session range.
2020-01-26 19:36:23 +01:00
Ben Loftis
2d07e72d40 Fix the ability to set Session Start&End Range on a new, empty session
set_session_extents had a bug; it wasn't calling locations->add()
on the newly created location.

The correct implementation was in set_session_range_location,
but this was only called from one place.
This function was removed, and set_session_extents will be used in its place.
set_session_extents will create a session location if one no longer exists,
so there is no need for set_session_range_location.
2020-01-26 19:33:41 +01:00
Robin Gareus
db465b5b43 Fix Loop-length (no pre-roll on loop-iterations) 2020-01-26 05:15:24 +01:00