Commit Graph

37480 Commits

Author SHA1 Message Date
Robin Gareus 44a6069694
Allow nonsensical meter-types for by default for tracks #9341 2023-06-07 22:22:52 +02:00
Robin Gareus b4d95eec57
Do play MIDI notes on selection/draw by default
Since 4ad1c19166 "select all" etc no longer plays
all notes, and possibility to get a  loud speaker-blasting
cacophony is greatly reduced.

We may still want to add some additional heuristics, or
special case drawing new notes/hits, but for now this it
is sensible to enable this by default.
2023-06-07 22:22:52 +02:00
Paul Davis d761ccb59b temporal: the second variant of shift() (untested) 2023-06-07 11:25:44 -06:00
Paul Davis e6b6340f3e temporal: more nuances for shift() 2023-06-07 11:25:44 -06:00
Paul Davis ad45778edc temporal: shift() with BBT must allow negative motion 2023-06-07 11:25:44 -06:00
Paul Davis a456a10cdf temporal: first guess at a TempoMap::shift() implementation 2023-06-07 11:25:44 -06:00
Robin Gareus 5e9d98dbf9
Debug Port reconnect 2023-06-07 18:13:27 +02:00
Robin Gareus d2365daafe
Remove unused API, prefer Session::possible_states 2023-06-07 17:39:29 +02:00
Robin Gareus 91579608b2
Remove duplicate API to find session files (ignore `._` files)
Session::possible_states correctly filters files
and also directly returns sorted base-names.

We can remove the redundant `get_state_files_in_directory`
API now.

see also 193b35e885
2023-06-07 17:37:40 +02:00
Robin Gareus 04d50ab880
Fix mouse edit-point cursor when dragging
Editor::motion_handler() only updates the snap-cursor
when no drags are active. While dragging, Drag::motion is
responsible to set the cursor accordingly.

In many cases the snap-cursor simply remained stuck at
the most recent position. Since in many cases
(e.g. RubberbandSelectDrag) it makes no sense to show the
cursor, so Drag::start_grab now hides the cursor by default.

This also fixes cases where the cursor is shown, but
was displayed in the wrong location.
2023-06-07 02:38:39 +02:00
Paul Davis 9d3ae4fc8d temporal: fix position of end guard points during map paste 2023-06-06 09:52:29 -06:00
Paul Davis 9e4b1d59a7 temporal: do something when pasting the cut buffer guard points
Don't think this is quite right yet - we get guard points even when
they are not really necessary
2023-06-06 09:04:34 -06:00
Robin Gareus 6865615af8
Fix recursive lock introduced in fbfeff4168 (#9359) 2023-06-06 15:39:54 +02:00
Robin Gareus 3468ffddbb
Update GUI: add new section operations 2023-06-06 02:42:43 +02:00
Robin Gareus 4529a17617
Implement Section Delete/Insert 2023-06-06 02:42:43 +02:00
Robin Gareus 961c6ae8d7
Prepare UI for section cut/copy API update 2023-06-06 02:42:43 +02:00
Paul Davis f5f87f86d4 temporal: adjust cut buffer API to better deal with start/end "guard points" 2023-06-05 17:27:12 -06:00
Paul Davis 7789df5b1c temporal: get cut/copy/paste test code slightly more useful 2023-06-05 16:35:17 -06:00
Robin Gareus 54fac9abac
Allow user to not be reminded about tempo-map not being pasted 2023-06-05 20:04:41 +02:00
Robin Gareus 522c8f9426
Improve port-engine debug messages
try to get to the bottom of "unregister_port: Failed to find port"
errors.
2023-06-05 19:10:10 +02:00
Robin Gareus dc338b7e93
Downgrade error messages that users cannot do anything about
Besides, it can happen under normal circumstances that the
Editor window, or any other window with clocks (prefs) is
visible while no session is loaded.
2023-06-05 15:58:50 +02:00
Robin Gareus e938d4936f
Further speed up Windows freewheel export 2023-06-05 01:42:24 +02:00
Robin Gareus c24b456211
Windows: unconditionally request high timer resolution
Previously timeBeginPeriod() was only called when MIDI
system was set to WinMME. It was also possible that
it was never unset in case starting the engine failed.

This significantly speeds up freewheel export which uses
Glib::usleep(100) when MIDI is disabled.

see also: https://randomascii.wordpress.com/2020/10/04/windows-timer-resolution-the-great-rule-change/
2023-06-05 00:02:54 +02:00
Robin Gareus fbfeff4168
Work around finish_capture() race
In rare cases DiskWriter::run() may call finish_capture()
concurrently with the butler thread from transport_stopped_wallclock,
this can lead to memory corruption (CaptureInfo).

Using a Mutex here is not great, but it is not usually contended
and better than crashing at rec-stop.

We should probably change DiskWrWiter::_was_recording into an
atomic bool, and use CAS to prevent concurrent calls.
2023-06-04 22:19:53 +02:00
Robin Gareus 464df06419
Fix signal emission order ambiguity (record regionview)
A rec-region is added to the streamview just like any other region
(::add_region_view_internal). This subscribes to region->DropReferences.

When the DropReferences is handled first by StreamView::remove_region_view
the corresponding RegionView is destroyed.

This can happen even while recording is still active, eg. when locating
(which stops the current recording).
MidiStreamView::setup_rec_box() is called and crashes in
`dynamic_cast<MidiRegionView*> (rec_regions.back().second);`
due to a use after free.

Strictly speaking this is a logic error in how ::setup_rec_box()
determines if to add or remove the rec-box. But due to the
asynchronous nature of signal emission and transport-state changes
the best solution is to destroy the rec-region at the same
when the RegionView is destroyed.

To reproduce:
 * create a session with a MIDI track
 * disconnect the input (empty MIDI regions are removed)
 * Preferences > Transport > *enable* latched-record-enable
 * use the Dummy backend's MIDI generator
 * connect Hardware > MIDI > MMC -> Ardour misc > MMC in
   OR use JACK-transport to locate while recording.
2023-06-04 21:42:02 +02:00
Robin Gareus ad5d355fb5
Fix remove_source assert()
With empty MIDI regions it can happen that the GUI
still retains a reference (rec_regions)
2023-06-04 21:26:41 +02:00
Robin Gareus 1feb9b5e89
Streamview: NO-OP, consolidate code 2023-06-04 20:21:41 +02:00
Edgar Aichinger 1e8a1f29c4 a few corrections and (slightly) better translations regarding Varispeed/resampling 2023-06-04 17:34:02 +02:00
Edgar Aichinger ba019053b6
more translation updates 2023-06-04 16:52:50 +02:00
Edgar Aichinger 714c093208
updated german translation 2023-06-04 16:52:50 +02:00
Robin Gareus 175f3c2405
Properly set xrun marker flags (#8952) 2023-06-04 16:49:10 +02:00
Robin Gareus d6144ab8cf
partially revert db97db2513 - allow to activate sub-menu with LMB 2023-06-04 16:44:18 +02:00
Robin Gareus 4628be8ed3
Fix capitalization in running text 2023-06-04 16:08:11 +02:00
Robin Gareus d206e5daa7
Allow translation, Track and Bus may have different gender 2023-06-04 15:55:33 +02:00
Robin Gareus e9e4757a3c
Make a note how to use valgrind with gdb 2023-06-04 02:56:22 +02:00
Robin Gareus 36056597ce
GUI: use new MidiPort::set_tracer API 2023-06-04 01:15:14 +02:00
Robin Gareus 7e567468b2
Fix crash when resetting MIDI tracer
The GUI was able to free memory (MidiTracer::disconnect),
while the tracer is concurrently still in use in rt-context.
This lead to memory corruption in MIDI::Parser::scanner.
2023-06-04 01:15:11 +02:00
Robin Gareus d16c5d69ed
Prepare GUI for MIDI trace API update 2023-06-04 01:15:08 +02:00
Robin Gareus dad725688d
Fix various MMC commands, set request-source 2023-06-04 01:15:02 +02:00
Robin Gareus 8bf8e67545
midiUI thread needs tempo-map (#9358)
This fixes handling MMC commands (locate, record) or
any async MIDI message that uses timepos_t/timecnt_t.
2023-06-03 19:10:36 +02:00
Robin Gareus 0006f4d8cd
Dummy: add MMC test sequence 2023-06-03 19:10:32 +02:00
Robin Gareus 766e9dc7a1
Improve MidiTracer, format MMC messages 2023-06-03 19:10:27 +02:00
Robin Gareus db97db2513
Activate track-header context menu items with RBM
Popup menu should handle the button that was used
to show the popup menu.
2023-06-03 15:13:04 +02:00
Robin Gareus d66b70f3a2
Distinct engine-states per sample-rate
Previously only the one engine-state per device was
saved. However systemic latency depends on the sample-rate
(and buffersize)
2023-06-02 22:31:02 +02:00
Robin Gareus 5a17ca56ea
Clarify boost check
Boost may not be "too old", but simply not present.
2023-06-02 21:31:36 +02:00
Robin Gareus 8794145c9d
Centralize setting undo/redo action sensitivity
This fixes undo/redo action sensitivity for non-editor
history stack changes.

Notably recording was not undoable, because the butler
thread creates the reversible "capture" command.
2023-06-02 18:11:53 +02:00
Robin Gareus c56313cea0
Fix setting pretty-names when engine is restarted
port-meta-data depends on the audioengine backend/device
settings. Those are only available after the engine is started,
not from within the backend's _start() method.

This is is only relevant for callback based backends.

Backends with a blocking process thread explicitly emit
port-manager callbacks there before entering the main loop.
2023-06-02 00:29:03 +02:00
Ben Loftis 6640a4afb3 fix Faderport2 port name = FP2 2023-06-01 16:20:48 -05:00
Robin Gareus 921b4aaa75
Allow to drag time selection markers 2023-06-01 21:37:40 +02:00
Robin Gareus c063be6a76
Implement Editor::abort_reversible_selection_op 2023-06-01 21:37:37 +02:00