Commit Graph

30463 Commits

Author SHA1 Message Date
Paul Davis
764dd20f93 Editor: allow name and path column in editor source list to be manually resizable 2020-07-19 23:10:43 -06:00
Paul Davis
808b4d69c8 Editor: replicate nudge-forward/nudge-backward in the Editor/ action namespace and use these actions for the default key bindings
Previously the bindings were given to the Region/* equivalents and made insensitive if there was no selected region.

Given that we have specific actions for nudge-playhead-*, and the ones in Region/ will always work on regions
if there are any selected regions, this provides a better set of possible actions, even if the naming is not
totally consistent.
2020-07-19 22:44:11 -06:00
Robin Gareus
92e67a1ab6 Update LoudnessDialog layout, display short/momentary loudness 2020-07-20 05:26:32 +02:00
Robin Gareus
f52faf48a6 Update export-report to show short/momentary loudness 2020-07-20 05:17:34 +02:00
Robin Gareus
d794f39e20 Update post-export analysis to report max short/mom loudness 2020-07-20 05:16:51 +02:00
Robin Gareus
a26be84a5e Update EBU VAMP plugin, report max short/mometary loudness 2020-07-20 05:16:04 +02:00
Robin Gareus
239319c214 Initial prototype for session loudness #8318 2020-07-20 03:37:14 +02:00
Robin Gareus
1421512510 Allow to skip installing 3rd party plugins 2020-07-19 22:05:38 +02:00
Robin Gareus
9d119b5ac5 Allow export-graph for analysis only
This is in preparation for #8318 to allow loudness analysis
of an export-range without actually writing a file.
2020-07-19 20:43:35 +02:00
Paul Davis
15fcb5c782 Transport: engaging loop play while rolling with no audio tracks now works
At present only audio data from disk readers is declicked. MIDI tracks with audio output should
likely also be declicked, at which time Session::need_declick_before_locate() will require
amending
2020-07-18 17:30:06 -06:00
Robin Gareus
c778ded411 Auto-connect MIDI track/bus when output ports change
previously this subscription was handle done in
Route::add_routes() -> add_routes_inner() for MIDI tracks only.

Since f6c0b02d9f this was only done when adding
tracks, after any instruments were loaded (and fanned out).
2020-07-19 01:07:57 +02:00
Robin Gareus
f5727e50d1 Another attempt at fixing the auto-connect race condition 2020-07-19 01:05:35 +02:00
Robin Gareus
7f20e9c705 Fix auto-connect thread race-condition 2020-07-19 00:40:34 +02:00
Robin Gareus
f6c0b02d9f Overhaul MIDI auto-connect #8317, #8307
This consolidates instrument creation for midi tracks & routes.
If an instrument is added, output auto-connect is postponed until
after the instrument plugin is added. Also when a multi-channel
instrument is fanned-out, the track outputs are not auto-connected.

This also subscribes MIDI-Busses to auto-connect when an instrument
is loaded or replaced at a later time.
2020-07-18 23:27:11 +02:00
Robin Gareus
a7a938275f Add API to query if an instrument was fanned out
Since fan-out happens (interactively) in the GUI thread,
we need to keep track of this, in order to prevent later
auto-connection of the track to the master-bus.
2020-07-18 22:59:43 +02:00
Robin Gareus
e4232197fe Revert recent auto-connect hack
..forth and back..
1882c1ba7e
dabd5715e9
fac8d84786

This needs a [much] better solution:

e.g. Wait until instrument is instantiated (ports are created),
then auto-connect, and finally fan-out
(or alternatively skip auto-connect for fanned-out tracks).

Currently both auto-connect as well as fan-out and port-creation
take place asynchronously.

Also MIDI track subscribe to &Session::midi_output_change_handler,
(MIDI busses don't).
2020-07-18 22:11:31 +02:00
Robin Gareus
4bbe6f20de Auto-connect MIDI-Busses to master 2020-07-18 21:45:43 +02:00
Robin Gareus
1882c1ba7e Add instrument before adding route #8317
This may (or may not) fix #8317. Usually changing I/O triggers
an auto-connect. The actual issue seems that auto-connect
thread runs before the ports are created.
2020-07-18 21:43:02 +02:00
Robin Gareus
fb9f1eff12 Add debug flags to track down #8317 2020-07-18 20:09:14 +02:00
Robin Gareus
6d6db90b60 Remove delay when engaging record while rolling 2020-07-17 17:08:59 +02:00
Robin Gareus
9242bc55a5 Do not emit StateSaved signal for backup saves
StateSaved() is mainly used for updating window title and
the snapshot list, unrelated to .pending or backup saves.
2020-07-17 16:55:16 +02:00
Robin Gareus
0b89d69de1 Copy state files for backup, instead of serializing
This should speed up backup saves of large session files.
2020-07-17 15:22:40 +02:00
Robin Gareus
5ae0039e5b Don't allow to run Linux installer on other unices
e.g. on MacOS, BUNDLE_DIR variable is not set correctly, resulting
in the whole hard drive content being copied to /opt
2020-07-16 20:38:51 +02:00
Robin Gareus
c6b87972b1 Remove unused libsmf seconds/time API
This significantly speeds up parsing MIDI files with complex
tempo-maps. e.g. "Black MIDI Trilogy_2.mid" has 24134 Tempo
changes. Prior to this commit parsing that file took over 5 minutes.
now it loads in under one seconds (libsmf only; libardour still
add overhead, and now needs about 30-40 seconds, previously
it took about 10 mins).

The problem was that every call to `smf_track_add_event_pulses()`
calls `seconds_from_pulses()` which calls `smf_get_tempo_by_seconds()`
which iterates over the tempo-map:

  for every midi-event { for ever tempo until that midi-event {..} }

This does not scale to 3.5M events and 24k tempo-changes.
2020-07-16 18:38:03 +02:00
Robin Gareus
ba7db8759b SMF: remove unused variable (from 803dab7d87) 2020-07-16 18:35:43 +02:00
Robin Gareus
9fcb51de2e Use signed int for atomic operations part II -- #8314 2020-07-16 18:07:14 +02:00
Robin Gareus
803dab7d87 SMF: various backports from libsmf PR7
see also https://github.com/stump/libsmf/pull/7

* Fix validity checks of escaped data
* Handle non-EOT-terminated tracks.
* Fix buffer overflow on tempo change event
* Fix memory leaks in case loading fails
* Fix a logic errors in extract_escaped_event()
* Fix the assertion problem `is_sysex_byte(status)`
* Make libsmf more tolerant to malformed MIDI files.
  (fixes import of files generated by NoteEdit)
2020-07-16 18:00:40 +02:00
Robin Gareus
23e6dd5f6b NO-OP: backport some libsmf doc and warnings 2020-07-16 17:58:04 +02:00
Robin Gareus
43158047ed SMF: use glib macros for endian conversion 2020-07-16 17:57:59 +02:00
Robin Gareus
6d950d15ba Use signed int for atomic operations -- #8314 2020-07-16 16:13:21 +02:00
Robin Gareus
baa8cd1b52 Fix LV2 buffersize option interface
https://lv2plug.in/doc/html/group__options.html specifies
a NULL terminated array of options (not a single option).

Since the call is the "instantiation" LV2 threading class, and
a single fixed value is passed with a direct call into the
plugin, using a stack-allocated LV2_Options_Option is sufficient.
2020-07-16 15:57:42 +02:00
Robin Gareus
4b1a41ff53 Add a tool to test-load SMF 2020-07-13 21:45:04 +02:00
Robin Gareus
398101ad92 Add cross-fade and A/B switch plugins 2020-07-13 00:53:45 +02:00
Robin Gareus
c03f3d81a6 Allow Lua DSP scripts to override strict-i/o
This is handy for 1in, 2out plugins or 2in, 1in out (and multiples
thereof).
2020-07-13 00:52:59 +02:00
Robin Gareus
9d7ca1dfa9 Remove debug message 2020-07-12 21:44:46 +02:00
Ben Loftis
89a7c41175 Likely fix for occasional crash in editor_regions::region_changed() 2020-07-12 12:05:23 -05:00
Ben Loftis
472e8a0d7b When copying a Range of MIDI, special-case the midi start+end in beats. This will likely get cleaner after nutempo. 2020-07-12 11:18:22 -05:00
Iurie Nistor
4e6a15938c double click to expand / contract the track 2020-07-12 16:09:07 +02:00
Robin Gareus
f89ef872dd Increase a-fluidsynth polyphony 2020-07-12 06:33:34 +02:00
Robin Gareus
9d390f38bf Cache MIDI generator port latency
This reduces excessive, expensive calls to get_connected_latency_range()
2020-07-12 01:50:01 +02:00
Robin Gareus
ce47898639 Queue latency updates for initial connection
This may fix an issue with latency not being set correctly
on initial session-load (more common with Mixbus/JACK).
2020-07-12 01:48:45 +02:00
Robin Gareus
1796ee60b2 Clean up b5e479df and expose API to queue latency-updates 2020-07-12 00:38:56 +02:00
Robin Gareus
b5e479dfc3 Handle JACK latency callbacks in sync with process thread #8304
This is only relevant with JACK, where different implementations
use threads for the latency callback.

With jack 2, jack_port_register() blocks and the jack_latency_callback
arrives in a different thread: https://pastebin.com/mitGBwpq
with jack 1 the callback arrives in sync

In either case this usually happens while
_adding_routes_in_progress == true and Ardour holds the process-lock,
because jack2 can process in parallel with reconfiguring latency

See also 1983f56592
2020-07-12 00:15:26 +02:00
Robin Gareus
97025cf5a3 Improve debug message (tracking down JACK latency updates) 2020-07-11 23:38:44 +02:00
Robin Gareus
156c1e354a Fix recursive locks when removing procs with a sidechain - #8301
When removing a plugin-insert that has a sidechain on a bus
that is implicitly soloed the following happens:

 * Route::remove_processor() takes a  WriterLock(_processor_lock)
 * The sidechain input is disconnected
 * Route::sidechain_change_handler() is called which calls
 * Route::input_change_handler()
 * Since the route is implicitly soloed, propagation is attempted
   which calls
 * Route::direct_feeds_according_to_reality()
   which takes ReaderLock(_processor_lock)

Recursive locks, reader-lock after writer-lock don't cause
a deadlock, releasing the reader-lock effectively also
releases the writer-lock...
2020-07-11 22:10:43 +02:00
Robin Gareus
68082abc22 Fix track-header visibility for inactive tracks
This supersedes 0708cdb6b4, an explicit `name_label.show()`
is not needed. The inactive label was missing an explicit call
to show.

This also fixes MIDI track MIDNAM Selector visibility
2020-07-10 18:16:18 +02:00
Robin Gareus
c398d85f0b Disabled routes do not have a label that can be edited 2020-07-10 17:47:10 +02:00
Iurie Nistor
0708cdb6b4 Show name when audio track is inactive 2020-07-10 17:44:04 +02:00
Vincenzo Reale
759ba6a7c9 Editing about.cc 2020-07-10 00:28:16 +02:00
Robin Gareus
edfca68494 Auto write-activate automation in latch mode
This allows to use of control-surfaces without touch-sensitivity
or mouse-wheel to write automation on demand (until transport stop).
2020-07-09 22:33:09 +02:00