Commit Graph

952 Commits

Author SHA1 Message Date
Paul Davis
88ee3af3ea JACK backend: add a mutex to serialize per-thread port register requests to server
Without this, two threads can both sleep on the same communication channel, and the wake order
is non-determinate, so the wrong thread may process the response to the other thread's request.
2023-09-12 22:41:26 -06:00
Robin Gareus
efed61af44 Amend d899441df1, fix duplicate device map entries 2023-07-03 19:57:55 +02:00
Robin Gareus
e6bed9330f CoreMIDI: fix capture/playback alignment
MIDI playback used samples instead of usec.
MIDI capture used time-stamp from previous cycle.
buffer-size changes were not applied to MIDI port latency
2023-06-29 00:32:46 +02:00
Robin Gareus
bef4596dd1 NO-OP: whitespace 2023-06-29 00:32:46 +02:00
Robin Gareus
651dcbc96e CoreAudio: Remove unused API 2023-06-29 00:32:46 +02:00
Robin Gareus
9a010404d1 CoreMIDI: Remove unused API 2023-06-29 00:32:43 +02:00
Robin Gareus
a10e3edb53 Remove unused backend API 2023-06-21 23:59:49 +02:00
Robin Gareus
341cd455d8 CoreAudio: unconditionally apply device latency 2023-06-21 23:54:55 +02:00
Robin Gareus
cd4fff863a Dummy backend: add realtime option
On windows this is still limited by the timer resolution, but
it's a start. This is mainly intended to be used with NDI or
other external sources without actual audio hardware.
2023-06-20 01:36:44 +02:00
Robin Gareus
00b2f5696c PortAudio: implement MIDI device config 2023-06-18 02:35:03 +02:00
Robin Gareus
9b797dc4c1 PortAudio: fix latency reporting, disable custom MIDI cfg
This correctly sets audio port I/O latency using the
portaudio API.

Per MIDI device port settings are not completely implemented.
En/disabling MIDI devices or setting custom MIDI port latency
is not functional as-is.
2023-06-17 05:49:11 +02:00
Robin Gareus
639696c1a8 ALSA: fix adding n_period playback latency
Use playback port, not capture port.
2023-06-17 00:53:22 +02:00
Robin Gareus
7aad0bbe15 CoreMIDI: use dedicated packet buffer on stack 2023-06-13 16:50:53 +02:00
Paul Davis
12c3daa46b JACK: fix reported tempo & meter when functioning as JACK timebase master
TempoMap::metric_at() has a superclock_t variant that was being called
with a samplepos_t value. Full check (and removal, hopefully) coming up.
2023-06-12 12:10:26 -06: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
0006f4d8cd Dummy: add MMC test sequence 2023-06-03 19:10:32 +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
Robin Gareus
edcf850aaf Fix Wformat 2023-05-19 06:16:49 +02:00
Robin Gareus
a7ca4cf8a1 CoreAudio: subscribe to device-alive property
This notifies the user about device disconnect and properly
shuts down the backend.
2023-04-22 19:36:37 +02:00
Paul Davis
0eed821eb9 JACK: do not set the thread-init callback
Because we use the non-callback API, we can call our thread init callback
ourselves from ::process_thread(). In addition, the init_callback in JACK is
used by every thread JACK creates, including the messagebuffer thread, and this
confuses things from an Ardour POV where the callback was intended just for
realtime threads.
2023-04-21 12:16:37 -06:00
Robin Gareus
295dbd8e1e Make RCU reader return a const pointer (omnibus commit) 2023-04-08 00:15:37 +02:00
Robin Gareus
d9c35199cc CoreAudio: Update latency when buffesize changes 2023-04-04 19:26:17 +02:00
Paul Davis
a486fba3e9 std::atomic - 2nd batch of changes to convert from glib to std::atomic 2023-03-24 14:19:15 -06:00
Paul Davis
4ba4cd69ff switch from glib atomic to std::atomic (libs edition) 2023-03-24 14:19:15 -06:00
Paul Davis
b35518e212 switch from boost::{shared,weak}_ptr to std::{shared,weak}_ptr
This is mostly a simple lexical search+replace but the absence of operator< for
std::weak_ptr<T> leads to some complications, particularly with Evoral::Sequence
and ExportPortChannel.
2023-03-24 14:19:15 -06:00
Paul Davis
39ed528e25 std-ize: convert all boost shared/weak ptr includes to <memory>
Also fix stdint.h -> cstdint and alphabetically order std includes
2023-03-24 14:19:15 -06:00
Robin Gareus
475063c24d ALSA: update endianess conversion functions
This follows upstream zita-alsa-pcmi-0.6.1
2022-12-27 13:32:31 +01:00
Robin Gareus
a7d2718aa4 ALSA: use dedicated device reservation for probing
It can happen that the main AlsaAudioBackend::_device_reservation
is still busy while I/O devices are set. In this case a
dedicated AlsaDeviceReservation needs to be used which can fail
silently.

A common example is disconnecting a USB device while it is in
use. The Halted signal can show the session dialog, which calls
set_input_device_name before the device reservation of the
unplugged device terminated.
2022-11-29 17:34:45 +01:00
Robin Gareus
3f4feb6cc8 ALSA: fix autostart when using different I/O devices
ALSA backend modified the internal state when different devices
were used, re-assigning one (usually input-device) to "None"
when it's resampled. This lead to EngineHints not matching the
EngineState, and autostart was disabled, and a dialog
"Engine I/O device has changed since you last opened this session."
2022-11-29 06:39:50 +01:00
Mads Kiilerich
4958c0d666 PulseAudio: fix error message 2022-11-04 13:44:55 +01:00
Mads Kiilerich
c2db9b4606 PulseAudio: just start stream uncorked
There was no reason to cork it when it was uncorked right after.

Playback will start when the buffer is full anyway.
2022-11-04 13:44:55 +01:00
Mads Kiilerich
00d3ce6b62 PulseAudio: remove commented out code 2022-11-04 13:44:55 +01:00
Mads Kiilerich
40f9e0c6a6 PulseAudio: use explicit defaults for tlength and prebuf
These might be the values that PA would have chosen anyway, but make it
clear that Ardour is in control ... and will let the user control
"everything" with the buffer size.
2022-11-04 13:44:55 +01:00
Mads Kiilerich
584ee51ca8 PulseAudio: set buffer attributes where they are used
Just moving code.
2022-11-04 13:44:55 +01:00
Mads Kiilerich
8e7ef0d42c PulseAudio: use correct casing
This will also change the internal backend name, so it will miss the
previous 'config' setting '<State backend="Pulseaudio" ...'` and the
session file's '<EngineHints backend="Pulseaudio" ...'. But that is no
big deal after upgrading. Especially after the backend has been broken
for some users for a while.
2022-11-04 13:44:55 +01:00
Mads Kiilerich
ef5b29c6dd PulseAudio: group operations and their verification together
Improves readability a bit. IMO.
2022-11-02 02:24:35 +01:00
Mads Kiilerich
b046ffe395 PulseAudio: drop idempotent dynamic cast 2022-11-02 02:24:35 +01:00
Mads Kiilerich
5bb7336c79 PulseAudio: consistent use of _buffer
For consistency and readability, avoid using high level getter in low
level code.
2022-11-02 02:24:35 +01:00
Mads Kiilerich
51501e5532 PulseAudio: don't set _run = false when stop() already did it 2022-11-02 02:24:35 +01:00
Mads Kiilerich
ba5ca2de05 PulseAudio: always log error reason in error handling
It adds some new strings to translate. These strings might be so rare
and technical that it is a bit pointless to translate them. But let's
stay consistent...
2022-11-02 02:24:35 +01:00
Mads Kiilerich
3fbbef3038 PulseAudio: fix "already active" message emitted when not active
Apparently just a missing fixup after copy-paste.
2022-11-02 02:24:34 +01:00
Mads Kiilerich
2666dfe900 PulseAudio: add missing return in error handling
Don't try to continue if the initial uncorking fails.
2022-11-02 02:24:34 +01:00
Mads Kiilerich
06b3d5ba33 PulseAudio: spin waiting for enough capacity to write
pa_threaded_mainloop_wait might wake up for several reasons. And there
is no point (but possibly harm) in moving on before we have verified
that PA actually is ready to receive our write without overflow.
2022-11-02 02:24:34 +01:00
Mads Kiilerich
27a2bf1f59 PulseAudio: clean up freewheeling transitions
ae3c8b19c6 and 03a17df68c reworked the transitions to and from
freewheeling. Some of it seems to have been experiments that tried
several things out, and generally it seems to have worked. It left some
commented out code. Clean that up.
2022-11-02 02:24:34 +01:00
Mads Kiilerich
04c24be2db PulseAudio: don't drain the stream right after initial uncorking
The draining was introduced in ae3c8b19c6, apparently as an experiment
doing several changes. But the drain is outside the loop where
freewheeling changes, so the fix must have worked for other reasons.

There doesn't seem to be any benefit from draining at that point. The
stream is already empty. If not, we could have flushed it.

Draining right after uncorking will conceptualy create an intentional
underflow, even though it isn't reported as such. PipeWire seems to
(something like 6-12 months ago) have regressed in handling of that grey
area, causing that *underflow* to cause a request for too much data, and
thus causing constant *overflows* and unusable playback.

This change makes PulseAudio playback work for me again.
2022-11-02 02:24:34 +01:00
Paul Davis
1eaaf4303b jack backend: catch some possible errors in ::get_port_name() 2022-10-29 09:37:17 -06:00
+merlan #flirora
79f55742d6 JACKAudioBackend::join_process_threads: Don’t pass NULL for jack_client_stop_thread
This is needed for PipeWire’s JACK frontend, which implements this
function and expects the first argument to be non-null.
2022-10-24 04:45:08 +02:00
Robin Gareus
7e5fe695d0 Increase coreMIDI robustness, do not drop late events
see also https://discourse.ardour.org/t/ardour-not-getting-all-messages-from-midi-keyboard/107618/13
2022-09-24 02:29:50 +02:00
Robin Gareus
9b65be0e17 Add debug information for coreMIDI events 2022-09-22 00:42:56 +02:00