Commit graph

16025 commits

Author SHA1 Message Date
Paul Davis
520ccd8ff2 use RTMidiBuffer API correctly when reading for MidiTrack::export_stuff() 2020-05-04 18:48:17 -06:00
Robin Gareus
4508d5bab1
Set de-click reason monitor vs. start/stop.
Previously use-monitor-fades was unused in A6, and transition
between monitoring states used the use-transport-fades preference.
2020-05-04 21:51:53 +02:00
Robin Gareus
a6f95b21fc
Fix alignment and de-click when monitoring changes while playing
Previously it was possible that
 * declick_out = true,
 * target_gain == 0, cur_gain != 0 (fade out active)
 * speed != 0, disk_samples_to_consume > 0.

So the disk-reader advanced the playback_sample, but since
declick_out is active, the read from the ringbuffer was not committed.
2020-05-04 21:48:47 +02:00
Robin Gareus
27f26f5cfd
Cont'd work on ALSA nperiods (amend 2326fb163) 2020-05-03 00:19:56 +02:00
Robin Gareus
2326fb1638
ALSA: only read/clear user-requested nperiods before snd_pcm_start
This should fix excessive latency with the RayDay that
has a fixed buffersize of 16384 samples.
2020-05-01 23:17:31 +02:00
Paul Davis
b258ad792e force provision of "menu-name" for all WindowProxy objects, and thus Tabbables
Actions for hide/show/attach/detach tabbables use hard-coded names which are not
translated. Using Tabbable/WindowProxy::name() to lookup the action will fail,
since the name can be translated. This changes just removes the option to not
provide a menu-name when creating these objects, and uses the name menu-name
when looking up an action by name
2020-05-01 14:33:47 -06:00
Paul Davis
1e814d2573 remove debug output 2020-04-30 13:13:48 -06:00
Paul Davis
106315071a update other .po files 2020-04-30 13:03:46 -06:00
Paul Davis
b95cd280f1 use PROGRAM_NAME to name GUI thread 2020-04-30 11:03:49 -06:00
Paul Davis
70da4ad893 fix 52b9066511 (incorrect logic). Restores audio playback from disk 2020-04-30 10:36:01 -06:00
Robin Gareus
68cb914959
Set Arodur's main thread name to include "Ardour"
This is helpful when debugging by PID (adevices.sh most notably),
just "gui" is not usually helpful.
2020-04-30 18:24:22 +02:00
Robin Gareus
8fa0049d28
ALSA: set start threshold to zero 2020-04-30 04:16:17 +02:00
Robin Gareus
11f68a02cd
Another step towards nperiod fixes for the RayDay 2020-04-30 02:05:14 +02:00
Robin Gareus
3a6a9cfa6c
Tweak ALSA nperiod setting, fallback to nearest
This is mainly for RME RayDAT that has a fixed buffersize of 16k:

  dev_name : hw:HDSPMxc2f6c5,0
  channels : 36
  min_rate : 32000
  max_rate : 192000
  min_bufz : 16384
  max_bufz : 16384
  min_nper : 4
  max_nper : 512

However nperiod configuration determines the effective latency
regardless.

This is similar to https://github.com/jackaudio/jack1/blob/master/drivers/alsa/alsa_driver.c#L476-L486
2020-04-29 23:56:24 +02:00
Paul Davis
6eb48e40a0 do not set declick_amp's gain for declick out during export of MIDI-only tracks
When export is done, nothing a MIDI-only track will reduce the gain ("goto midi" inside
DiskReader::run() and the "declick-in-progress" state will be permanent
2020-04-29 15:36:07 -06:00
Robin Gareus
551be058f2
NO-OP: whitespace 2020-04-29 15:12:23 +02:00
John Emmas
6144de5bf0 Add/remove source(s) in our MSVC project (midi++2) 2020-04-29 10:20:34 +01:00
Robin Gareus
47bb331bfa
Allow to refresh ALSA device list - #8051 2020-04-29 02:19:38 +02:00
Robin Gareus
3d5ea7dfab
ALSA: set min/max sizes before the debug message 2020-04-29 01:16:23 +02:00
Hiroki Inagaki
cce6ac3e73
Update Japanese translation for 6.0 2020-04-28 21:29:04 +02:00
Robin Gareus
6224bf1e27
Revise French translation, part 7 -- #8035 2020-04-28 21:07:56 +02:00
Paul Davis
7a1447b75e remove pointless libs/midi++2/midi++/event.h file
This was just a proxy for libs/evoral/evoral/Event.h. Note that the #define
that controlled allocation that was at the top of the removed header is
replicated in the Evoral header, so there are no semantic changes
2020-04-28 12:01:55 -06:00
Robin Gareus
d94a747180
Revise French translation, part 6 -- #8035 2020-04-28 18:05:11 +02:00
Robin Gareus
8e482ef0fb
Con't work on ALSA nperiod selection (see also d3d120fa) 2020-04-28 17:56:17 +02:00
Robin Gareus
d3d120fa28
Prepare to allow using ALSA backend with nperiods > 3
This will still need an update for Alsa_pcmi::set_hwpar() capture
channel (which is fixed at 2, unless FRAG_NEAR is used).
2020-04-28 03:28:34 +02:00
Robin Gareus
13ed8da2bc
Add flag to allow ALSA backend to fall back to nearest avail. nperiods 2020-04-28 02:51:20 +02:00
Paul Davis
30a60f45df show MTC transport master latency when computed 2020-04-27 15:44:28 -06:00
Robin Gareus
2587ad6dc3
Ignore unconnected ports for latency-compensation
This fixed a false-positive "ambiguous latency" warning for
MIDI busses:

 MIDI track -midi-> MIDI Bus w/instrument -audio|midi-> master

The master-bus only has audio inputs, so the MIDI Bus'
MIDI out is left unconnected. Its latency does not matter,
it can float freely.

Previously it was assumed to be zero. So the MIDI Bus' input
playback latency range was [0, master-bus playback-latency].
2020-04-27 23:10:21 +02:00
Paul Davis
c56e99cd09 nominal improvement for MTC master: use port latency to adjust sampletimes that MTC events "occured at" 2020-04-27 15:02:29 -06:00
Robin Gareus
24d3bf25a9
Don't call into engine for queued latency updates 2020-04-27 17:28:26 +02:00
Robin Gareus
09f9cd377d
Prevent excessive latency recomputations
Session::update_latency() may be called multiple times with
the process-lock being held.
2020-04-27 16:31:40 +02:00
Robin Gareus
d6242f35f5
Remove debug message 2020-04-27 16:26:36 +02:00
Robin Gareus
8aa4ae825d
Skip delayline updates if no change is required 2020-04-27 14:08:37 +02:00
Robin Gareus
1983f56592
Work around jack2's insane thread semantics
jack2 can process in parallel with calling a graph-order or
latency-callback, so Ardour takes a lock to update those in sync.

Yet jack2 can also block while port-registrations happen,
and concurrently emit latency-callback from another thread..
2020-04-27 04:10:18 +02:00
Robin Gareus
b0daa85bfb
Prevent race between adding ports and IO port-lookup 2020-04-26 22:17:18 +02:00
Robin Gareus
31c39ed869
Remove duplicate i/o latency calculation
Port and connection changes always imply a latency_callback from
the engine. Worst I/O latency is updated directly in
Session::update_latency() which is called from
AudioEngine::latency_callback.

Explicit subscriptions to route->output()->changed() is not needed
to update the worst I/O latency.

Only set_block_size() needs to to update the I/O latency when
the buffer-size changes.
2020-04-26 21:34:26 +02:00
Robin Gareus
842e841e0d
Remove common prefix for latency debugging
-DLatency now triggers all four:
  * LatencyCompensation (entry-points, overall flow)
  * LatencyIO (Port/IO query, set/get private/public)
  * LatencyDelayLine (Delaylines for internal sends and alignment)
  * LatencyRoute (route processor latency)
2020-04-26 21:25:07 +02:00
Robin Gareus
de819e579a
Fix a deadlock (process_lock vs _update_latency_lock)
The backend may call update_latency() while at the same time
the auto-connect-port calls set_worst_io_latencies().

The latter already holds the process-lock, so update_latency()
first needs to acquire it, as well. If one already holds the
_update_latency_lock, one must not ask for the process-lock.

---

Previously Ardour's connection manager first took the process_lock
and then waited to the _update_latency_lock.
Meanwhile jack calls latency_callback(), takes the
_update_latency_lock and waits for the process_lock.
Classic deadlock.
2020-04-26 20:25:31 +02:00
Robin Gareus
3785cbbf03
Cont'd work on delayline-config (amend b196cef2) 2020-04-26 05:55:43 +02:00
Robin Gareus
0067a4596d
Speed up loading sessions with synths
LV2 plugins may add a MIDNAM file when they're loaded.
This can be happen concurrently with the MidiPatchManager,
loading the system-wide patch files.

Session load should not be interrupted by the initial
background scan of patch files, which can take a very long time.
We need to allow update_custom_midnam() to grab the _lock.
2020-04-26 04:55:59 +02:00
Robin Gareus
02e5605cdd
NO-OP: reduce scope, return early 2020-04-25 18:24:42 +02:00
Robin Gareus
b9c29c478c
Remove unused signal 2020-04-25 17:53:49 +02:00
Robin Gareus
b196cef2c4
Prevent delay-line reconfiguration while processing
Various backends have different strategies for updating latencies,
and different thread semantics for latency update callbacks.

With jack2 it is possible that processing happens concurrently
while port latencies are being changed.

Ardour internal backends emit the latency callback from the
main process thread, serializing latency changes with processing.

Various user actions can also trigger latency changes. e.g.
with a stopped engine it is possible to re-order plugins.
2020-04-25 17:52:54 +02:00
Robin Gareus
e16ac09e54
Clean up 135814cf0, prefer PannableChanged signal
This allows to also catch cases when a panner-ui directly changes
set_linked_to_route() of the panner shell.
2020-04-25 16:26:37 +02:00
Paul Davis
afc8dd9022 fix thinko in Session::should_ignore_transport_request() and drop out of external sync if command is allowed
The semantics are that if the user configures things to allow transport commands while
using a transport master, issuing such commands first stops using the master
2020-04-24 14:22:06 -06:00
Paul Davis
58304b3a7e make Session::should_ignore_transport_request() non-const 2020-04-24 14:20:59 -06:00
Paul Davis
12b48fff76 fix parentheses around expression that prevented port flags from being set for ltc slave 2020-04-24 11:51:45 -06:00
Paul Davis
e6b12bd0aa ensure that when a Session emits Port::PortDrop, transport master ports are left in place 2020-04-24 11:50:43 -06:00
Robin Gareus
ea8d1d09d4
Fix MacOS builds (API change in 705ac7bfc5) 2020-04-24 07:06:40 +02:00
Robin Gareus
dbcbfd7b5b
Fix builds, missing include 2020-04-24 01:53:59 +02:00