154 virtual std::unique_ptr<AudioDevice>
create_device(
const std::string& device_id =
"") = 0;
169 std::lock_guard<std::mutex> lock(device_change_callback_mutex_);
171 device_change_callback_ = std::make_shared<DeviceChangeCallback>(std::move(cb));
173 device_change_callback_.reset();
192 std::shared_ptr<DeviceChangeCallback> callback;
194 std::lock_guard<std::mutex> lock(device_change_callback_mutex_);
195 callback = device_change_callback_;
197 if (callback && *callback) (*callback)();
201 std::lock_guard<std::mutex> lock(device_change_callback_mutex_);
202 return static_cast<bool>(device_change_callback_ && *device_change_callback_);
206 mutable std::mutex device_change_callback_mutex_;
207 std::shared_ptr<DeviceChangeCallback> device_change_callback_;
virtual int buffer_size() const =0
virtual bool is_running() const =0
virtual void set_workgroup_change_callback(WorkgroupChangeCallback callback)
Atomically subscribe to callback_workgroup() changes and synchronously deliver the current value befo...
Definition device.hpp:129
virtual ~AudioDevice()=default
virtual bool is_open() const =0
virtual DeviceInfo info() const =0
virtual void quiesce_workgroup_changes()
Disable future workgroup-change notifications and serialize with any notification already in flight.
Definition device.hpp:137
virtual double sample_rate() const =0
virtual bool open(const DeviceConfig &config)=0
virtual bool start(AudioCallback callback)=0
std::function< void(void *workgroup)> WorkgroupChangeCallback
Definition device.hpp:72
virtual void * callback_workgroup() const
Opaque handle to the OS-supplied real-time workgroup associated with this device's I/O thread,...
Definition device.hpp:105
virtual std::uint64_t xrun_count() const
Cumulative xrun (overload/underrun) count since start() or the last reset_xrun_counter().
Definition device.hpp:111
virtual void reset_xrun_counter()
Reset the xrun counter to 0. Safe from any thread.
Definition device.hpp:114
Definition device.hpp:149
virtual std::unique_ptr< AudioDevice > create_device(const std::string &device_id="")=0
virtual DeviceInfo default_output_device()=0
virtual DeviceInfo default_input_device()=0
virtual ~AudioSystem()=default
virtual std::vector< DeviceInfo > enumerate_devices()=0
virtual void set_device_change_callback(DeviceChangeCallback cb)
Default implementation stores the callback in a base-class slot.
Definition device.hpp:168
bool has_device_change_callback() const
Observe whether a caller registered a callback.
Definition device.hpp:200
std::function< void()> DeviceChangeCallback
Register a callback for device list changes (hotplug/unplug).
Definition device.hpp:161
void fire_device_change()
Dispatch a stored device-change callback.
Definition device.hpp:191
Non-owning view over multi-channel audio sample data.
Definition buffer.hpp:30
Definition analyzer_provider.hpp:12
std::function< void( const BufferView< const float > &input, BufferView< float > &output, const CallbackContext &context)> AudioCallback
Definition device.hpp:63
std::optional< AudioIoTiming > query_audio_io_timing(const AudioDevice &device) noexcept
Current route timing, or no value when the concrete backend has not implemented timing publication.
std::unique_ptr< AudioSystem > create_audio_system()
ShareMode
Definition device.hpp:32
@ shared
Definition device.hpp:32
@ exclusive
Definition device.hpp:32
int buffer_size
Definition device.hpp:57
double sample_rate
Definition device.hpp:56
uint64_t sample_position
Definition device.hpp:58
std::string device_id
Definition device.hpp:36
double sample_rate
Definition device.hpp:37
bool low_latency
Definition device.hpp:51
int output_channels
Definition device.hpp:40
int input_channels
Definition device.hpp:39
int buffer_size
Definition device.hpp:38
ShareMode share_mode
Definition device.hpp:41
bool is_default_input
Definition device.hpp:24
std::vector< int > buffer_sizes
Definition device.hpp:23
std::string id
Definition device.hpp:18
std::string name
Definition device.hpp:19
int max_output_channels
Definition device.hpp:21
int max_input_channels
Definition device.hpp:20
bool is_default_output
Definition device.hpp:25
std::vector< double > sample_rates
Definition device.hpp:22