Ardour
9.0-pre0-582-g084a23a80d
|
#include <audio_backend.h>
Classes | |
struct | DeviceStatus |
Public Member Functions | |
AudioBackend (AudioEngine &e, AudioBackendInfo &i) | |
virtual | ~AudioBackend () |
AudioBackendInfo & | info () const |
virtual std::string | name () const =0 |
virtual bool | is_realtime () const =0 |
virtual bool | is_jack () const |
virtual int | client_real_time_priority () |
virtual bool | requires_driver_selection () const |
virtual std::vector< std::string > | enumerate_drivers () const |
virtual int | set_driver (const std::string &drivername) |
virtual bool | use_separate_input_and_output_devices () const |
virtual bool | match_input_output_devices_or_none () const |
virtual std::vector< DeviceStatus > | enumerate_devices () const =0 |
virtual std::vector< DeviceStatus > | enumerate_input_devices () const |
virtual std::vector< DeviceStatus > | enumerate_output_devices () const |
virtual bool | can_set_period_size () const |
virtual std::vector< uint32_t > | available_period_sizes (const std::string &driver, const std::string &device) const |
virtual int | set_peridod_size (uint32_t) |
virtual bool | can_request_update_devices () |
virtual bool | update_devices () |
virtual bool | can_use_buffered_io () |
virtual void | set_use_buffered_io (bool) |
virtual bool | get_use_buffered_io () |
virtual std::vector< float > | available_sample_rates (const std::string &device) const =0 |
virtual std::vector< float > | available_sample_rates2 (const std::string &input_device, const std::string &output_device) const |
virtual float | default_sample_rate () const |
virtual std::vector< uint32_t > | available_buffer_sizes (const std::string &device) const =0 |
virtual std::vector< uint32_t > | available_buffer_sizes2 (const std::string &input_device, const std::string &output_device) const |
virtual uint32_t | default_buffer_size (const std::string &device) const |
virtual bool | can_change_sample_rate_when_running () const =0 |
virtual bool | can_change_buffer_size_when_running () const =0 |
virtual bool | can_measure_systemic_latency () const =0 |
virtual bool | can_change_systemic_latency_when_running () const |
virtual int | set_device_name (const std::string &)=0 |
virtual int | set_input_device_name (const std::string &) |
virtual int | set_output_device_name (const std::string &) |
virtual int | drop_device () |
virtual int | set_sample_rate (float)=0 |
virtual int | set_buffer_size (uint32_t)=0 |
virtual int | set_interleaved (bool yn)=0 |
virtual int | set_systemic_input_latency (uint32_t)=0 |
virtual int | set_systemic_output_latency (uint32_t)=0 |
virtual int | set_systemic_midi_input_latency (std::string const, uint32_t)=0 |
virtual int | set_systemic_midi_output_latency (std::string const, uint32_t)=0 |
virtual std::string | device_name () const =0 |
virtual std::string | input_device_name () const |
virtual std::string | output_device_name () const |
virtual float | sample_rate () const =0 |
virtual uint32_t | buffer_size () const =0 |
virtual bool | interleaved () const =0 |
virtual uint32_t | systemic_input_latency () const =0 |
virtual uint32_t | systemic_output_latency () const =0 |
virtual uint32_t | systemic_midi_input_latency (std::string const) const =0 |
virtual uint32_t | systemic_midi_output_latency (std::string const) const =0 |
virtual uint32_t | period_size () const |
virtual std::string | driver_name () const |
virtual std::string | control_app_name () const =0 |
virtual void | launch_control_app ()=0 |
virtual std::vector< std::string > | enumerate_midi_options () const =0 |
virtual int | set_midi_option (const std::string &option)=0 |
virtual std::string | midi_option () const =0 |
virtual std::vector< DeviceStatus > | enumerate_midi_devices () const =0 |
virtual int | set_midi_device_enabled (std::string const, bool)=0 |
virtual bool | midi_device_enabled (std::string const) const =0 |
virtual bool | can_set_systemic_midi_latencies () const =0 |
int | start (bool for_latency_measurement=false) |
virtual int | stop ()=0 |
virtual int | reset_device ()=0 |
virtual int | freewheel (bool start_stop)=0 |
virtual float | dsp_load () const =0 |
virtual void | transport_start () |
virtual void | transport_stop () |
virtual TransportState | transport_state () const |
virtual void | transport_locate (samplepos_t pos) |
virtual samplepos_t | transport_sample () const |
virtual int | set_time_master (bool yn) |
virtual int | usecs_per_cycle () const |
virtual size_t | raw_buffer_size (DataType t)=0 |
virtual samplepos_t | sample_time ()=0 |
virtual samplepos_t | sample_time_at_cycle_start ()=0 |
virtual pframes_t | samples_since_cycle_start ()=0 |
virtual bool | get_sync_offset (pframes_t &offset) const |
virtual int | create_process_thread (std::function< void()> func)=0 |
virtual int | join_process_threads ()=0 |
virtual bool | in_process_thread ()=0 |
virtual uint32_t | process_thread_count ()=0 |
virtual void | update_latencies ()=0 |
virtual bool | speed_and_position (double &speed, samplepos_t &position) |
Public Member Functions inherited from ARDOUR::PortEngine | |
PortEngine (PortManager &pm) | |
virtual | ~PortEngine () |
virtual void * | private_handle () const =0 |
virtual const std::string & | my_name () const =0 |
virtual uint32_t | port_name_size () const =0 |
virtual int | set_port_name (PortHandle port, const std::string &name)=0 |
virtual std::string | get_port_name (PortHandle port) const =0 |
virtual PortFlags | get_port_flags (PortHandle port) const =0 |
virtual int | get_port_property (PortHandle, const std::string &key, std::string &value, std::string &type) const |
virtual int | set_port_property (PortHandle, const std::string &key, const std::string &value, const std::string &type) |
virtual PortPtr | get_port_by_name (const std::string &name) const =0 |
virtual int | get_ports (const std::string &port_name_pattern, DataType type, PortFlags flags, std::vector< std::string > &ports) const =0 |
virtual DataType | port_data_type (PortHandle port) const =0 |
virtual PortPtr | register_port (const std::string &shortname, ARDOUR::DataType type, ARDOUR::PortFlags flags)=0 |
virtual void | unregister_port (PortHandle port)=0 |
virtual int | connect (const std::string &src, const std::string &dst)=0 |
virtual int | disconnect (const std::string &src, const std::string &dst)=0 |
virtual int | connect (PortHandle src, const std::string &dst)=0 |
virtual int | disconnect (PortHandle src, const std::string &dst)=0 |
virtual int | disconnect_all (PortHandle port)=0 |
virtual bool | connected (PortHandle port, bool process_callback_safe=true)=0 |
virtual bool | connected_to (PortHandle port, const std::string &name, bool process_callback_safe=true)=0 |
virtual bool | physically_connected (PortHandle port, bool process_callback_safe=true)=0 |
virtual bool | externally_connected (PortHandle port, bool process_callback_safe=true) |
virtual int | get_connections (PortHandle port, std::vector< std::string > &names, bool process_callback_safe=true)=0 |
virtual int | midi_event_get (pframes_t ×tamp, size_t &size, uint8_t const **buf, void *port_buffer, uint32_t event_index)=0 |
virtual int | midi_event_put (void *port_buffer, pframes_t timestamp, const uint8_t *buffer, size_t size)=0 |
virtual uint32_t | get_midi_event_count (void *port_buffer)=0 |
virtual void | midi_clear (void *port_buffer)=0 |
virtual bool | can_monitor_input () const =0 |
virtual int | request_input_monitoring (PortHandle port, bool yn)=0 |
virtual int | ensure_input_monitoring (PortHandle port, bool yn)=0 |
virtual bool | monitoring_input (PortHandle port)=0 |
virtual void | set_latency_range (PortHandle port, bool for_playback, LatencyRange r)=0 |
virtual LatencyRange | get_latency_range (PortHandle port, bool for_playback)=0 |
virtual bool | port_is_physical (PortHandle port) const =0 |
virtual void | get_physical_outputs (DataType type, std::vector< std::string > &names)=0 |
virtual void | get_physical_inputs (DataType type, std::vector< std::string > &names)=0 |
virtual ChanCount | n_physical_outputs () const =0 |
virtual ChanCount | n_physical_inputs () const =0 |
virtual void * | get_buffer (PortHandle port, pframes_t off)=0 |
Static Public Member Functions | |
static std::string | get_error_string (ErrorCode) |
static std::string | get_standard_device_name (StandardDeviceName) |
static size_t | thread_stack_size () |
Public Attributes | |
PBD::TimingStats | dsp_stats [NTT] |
Protected Member Functions | |
virtual int | _start (bool for_latency_measurement)=0 |
Protected Attributes | |
AudioBackendInfo & | _info |
AudioEngine & | engine |
Protected Attributes inherited from ARDOUR::PortEngine | |
PortManager & | manager |
AudioBackend is an high-level abstraction for interacting with the operating system's audio and midi I/O.
Definition at line 84 of file audio_backend.h.
Definition at line 95 of file audio_backend.h.
Enumerator | |
---|---|
DeviceNone | |
DeviceDefault |
Definition at line 134 of file audio_backend.h.
Enumerator | |
---|---|
DeviceWait | |
RunLoop | |
NTT |
Definition at line 824 of file audio_backend.h.
|
inline |
Definition at line 87 of file audio_backend.h.
|
inlinevirtual |
Definition at line 93 of file audio_backend.h.
|
protectedpure virtual |
|
pure virtual |
Returns a collection of uint32 identifying buffer sizes that are potentially usable with the hardware identified by device
. Any of these values may be supplied in other calls to this backend as the desired buffer size to use with the name device, but the requested buffer size may turn out to be unavailable, or become invalid at any time.
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
inlinevirtual |
Reimplemented in ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
Definition at line 390 of file audio_backend.h.
|
inlinevirtual |
Returns a vector of supported period-sizes for the given driver
Reimplemented in ARDOUR::JACKAudioBackend, and ARDOUR::AlsaAudioBackend.
Definition at line 286 of file audio_backend.h.
|
pure virtual |
Returns a collection of float identifying sample rates that are potentially usable with the hardware identified by device
. Any of these values may be supplied in other calls to this backend as the desired sample rate to use with the name device, but the requested sample rate may turn out to be unavailable, or become invalid at any time.
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
inlinevirtual |
Reimplemented in ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
Definition at line 355 of file audio_backend.h.
|
pure virtual |
|
pure virtual |
|
pure virtual |
|
inlinevirtual |
return true if the backend can measure and update systemic latencies without restart.
Reimplemented in ARDOUR::AlsaAudioBackend.
Definition at line 430 of file audio_backend.h.
|
pure virtual |
return true if the backend is configured using a single full-duplex device and measuring systemic latency can produce meaningful results.
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
inlinevirtual |
Reimplemented in ARDOUR::PortAudioBackend, and ARDOUR::AlsaAudioBackend.
Definition at line 303 of file audio_backend.h.
|
inlinevirtual |
An interface to set buffers/period for playback latency. useful for ALSA or JACK/ALSA on Linux.
Reimplemented in ARDOUR::JACKAudioBackend, and ARDOUR::AlsaAudioBackend.
Definition at line 280 of file audio_backend.h.
|
pure virtual |
if backend supports systemic_midi_[in|ou]tput_latency()
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
inlinevirtual |
Reimplemented in ARDOUR::PortAudioBackend.
Definition at line 323 of file audio_backend.h.
|
inlinevirtual |
Reimplemented in ARDOUR::JACKAudioBackend.
Definition at line 165 of file audio_backend.h.
|
pure virtual |
Return the name of a control application for the selected/in-use device. If no such application exists, or if no device has been selected or is in-use, return an empty string.
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
Create a new thread suitable for running part of the buffer process cycle (i.e. Realtime scheduling, memory allocation, stacksize, etc. are all correctly setup). The thread will begin executing func, and will exit when that function returns.
func | process function to run |
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
inlinevirtual |
Definition at line 406 of file audio_backend.h.
|
inlinevirtual |
Definition at line 372 of file audio_backend.h.
|
pure virtual |
|
inlinevirtual |
override this if this implementation returns true from requires_driver_selection()
Reimplemented in ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, and ARDOUR::DummyAudioBackend.
Definition at line 546 of file audio_backend.h.
|
inlinevirtual |
Deinitialize and destroy current device
Definition at line 470 of file audio_backend.h.
|
pure virtual |
return the fraction of the time represented by the current buffer size that is being used for each buffer process cycle, as a value from 0.0 to 1.0
E.g. if the buffer size represents 5msec and current processing takes 1msec, the returned value should be 0.2.
Implementations can feel free to smooth the values returned over time (e.g. high pass filtering, or its equivalent).
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
Returns a collection of DeviceStatuses identifying devices discovered by this backend since the start of the process.
Any of the names in each DeviceStatus may be used to identify a device in other calls to the backend, though any of them may become invalid at any time.
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
inlinevirtual |
If the return value of requires_driver_selection() is true, then this function can return the list of known driver names.
If the return value of requires_driver_selection() is false, then this function should not be called. If it is called its return value is an empty vector of strings.
Reimplemented in ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, and ARDOUR::DummyAudioBackend.
Definition at line 189 of file audio_backend.h.
|
inlinevirtual |
Returns a collection of DeviceStatuses identifying input devices discovered by this backend since the start of the process.
Any of the names in each DeviceStatus may be used to identify a device in other calls to the backend, though any of them may become invalid at any time.
Reimplemented in ARDOUR::PortAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
Definition at line 258 of file audio_backend.h.
|
pure virtual |
Detailed MIDI device list - if available
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
|
inlinevirtual |
Returns a collection of DeviceStatuses identifying output devices discovered by this backend since the start of the process.
Any of the names in each DeviceStatus may be used to identify a device in other calls to the backend, though any of them may become invalid at any time.
Reimplemented in ARDOUR::PortAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
Definition at line 270 of file audio_backend.h.
|
pure virtual |
While remaining connected to the device, and without changing its configuration, start (or stop) calling the process_callback of the engine without waiting for the device. Once process_callback() has returned, it will be called again immediately, thus allowing for faster-than-realtime processing.
All registered ports remain in existence and all connections remain unaltered. However, any physical ports should NOT be used by the process_callback() during freewheeling - the data behaviour is undefined.
If start_stop
is true, begin this behaviour; otherwise cease this behaviour if it currently occuring, and return to calling process_callback() of the engine by waiting for the device.
start_stop | true to engage freewheel processing |
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
static |
|
static |
|
inlinevirtual |
Return true if it possible to determine the offset in samples of the first video frame that starts within the current buffer process cycle, measured from the first sample of the cycle. If returning true, set offset
to that offset.
Eg. if it can be determined that the first video frame within the cycle starts 28 samples after the first sample of the cycle, then this method should return true and set offset
to 28.
May be impossible to support outside of JACK, which has specific support (in some cases, hardware support) for this feature.
Can ONLY be called from within a process() callback tree (which implies that it can only be called by a process thread)
Reimplemented in ARDOUR::JACKAudioBackend.
Definition at line 773 of file audio_backend.h.
|
inlinevirtual |
Reimplemented in ARDOUR::PortAudioBackend.
Definition at line 337 of file audio_backend.h.
|
pure virtual |
Return true if execution context is in a backend thread
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
inline |
Return the AudioBackendInfo object from which this backend was constructed.
Definition at line 144 of file audio_backend.h.
|
inlinevirtual |
Reimplemented in ARDOUR::PortAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
Definition at line 523 of file audio_backend.h.
|
pure virtual |
|
inlinevirtual |
Return true if the backed is JACK
Reimplemented in ARDOUR::JACKAudioBackend.
Definition at line 163 of file audio_backend.h.
|
pure virtual |
Return true if the callback from the underlying mechanism/API (CoreAudio, JACK, ASIO etc.) occurs in a thread subject to realtime constraints. Return false otherwise.
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
Wait for all processing threads to exit.
Return zero on success, non-zero on failure.
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
Launch the control app for the currently in-use or selected device. May do nothing if the control app is undefined or cannot be launched.
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
inlinevirtual |
Reimplemented in ARDOUR::AlsaAudioBackend.
Definition at line 237 of file audio_backend.h.
|
pure virtual |
query if a midi-device is enabled
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
|
pure virtual |
Return the name of this backend.
Should use a well-known, unique term. Expected examples might include "JACK", "CoreAudio", "ASIO" etc.
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
inlinevirtual |
Reimplemented in ARDOUR::PortAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
Definition at line 528 of file audio_backend.h.
|
inlinevirtual |
Reimplemented in ARDOUR::JACKAudioBackend, and ARDOUR::AlsaAudioBackend.
Definition at line 541 of file audio_backend.h.
|
pure virtual |
Return number of processing threads
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
|
inlinevirtual |
Return true if this backend requires the selection of a "driver" before any device can be selected. Return false otherwise.
Intended mainly to differentiate between meta-APIs like JACK which can still expose different backends (such as ALSA or CoreAudio or FFADO or netjack) and those like ASIO or CoreAudio which do not.
Reimplemented in ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, and ARDOUR::DummyAudioBackend.
Definition at line 177 of file audio_backend.h.
|
pure virtual |
Reset device.
Return zero if successful, negative values on error
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
|
pure virtual |
return the time according to the sample clock in use, measured in samples since an arbitrary zero time in the past. The value should increase monotonically and linearly, without interruption from any source (including CPU frequency scaling).
It is extremely likely that any implementation will use a DLL, since this function can be called from any thread, at any time, and must be able to accurately determine the correct sample time.
Can be called from any thread.
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
Return the time according to the sample clock in use when the most recent buffer process cycle began. Can be called from any thread.
Implements ARDOUR::PortEngine.
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
Return the time since the current buffer process cycle started, in samples, according to the sample clock in use.
Can ONLY be called from within a process() callback tree (which implies that it can only be called by a process thread)
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
Set the buffer size to be used.
The device is assumed to use a double buffering scheme, so that one buffer's worth of data can be processed by hardware while software works on the other buffer. All known suitable audio APIs support this model (though ALSA allows for alternate numbers of buffers, and CoreAudio doesn't directly expose the concept).
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
Set the name of the device to be used
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
inlinevirtual |
Returns zero if the backend can successfully use drivername
as the driver, non-zero otherwise.
Should not be used unless the backend returns true from requires_driver_selection()
Reimplemented in ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, and ARDOUR::DummyAudioBackend.
Definition at line 200 of file audio_backend.h.
|
inlinevirtual |
Set the name of the input device to be used if using separate input/output devices.
Reimplemented in ARDOUR::PortAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
Definition at line 454 of file audio_backend.h.
|
pure virtual |
Set the preferred underlying hardware data layout. If yn
is true, then the hardware will interleave samples for successive channels; otherwise, the hardware will store samples for a single channel contiguously.
Setting this does not change the fact that all data streams to and from Ports are mono (essentially, non-interleaved)
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
mark a midi-devices as enabled
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
|
inlinevirtual |
Set the name of the output device to be used if using separate input/output devices.
Reimplemented in ARDOUR::PortAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
Definition at line 464 of file audio_backend.h.
|
inlinevirtual |
Set the period size to be used. must be called before starting the backend.
Reimplemented in ARDOUR::JACKAudioBackend, and ARDOUR::AlsaAudioBackend.
Definition at line 294 of file audio_backend.h.
|
pure virtual |
Set the sample rate to be used
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
Set the (additional) input latency that cannot be determined via the implementation's underlying code (e.g. latency from external D-A/D-A converters. Units are samples.
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
Set the (additional) input latency for a specific midi device, or if the identifier is empty, apply to all midi devices.
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
Set the (additional) output latency for a specific midi device, or if the identifier is empty, apply to all midi devices.
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
Set the (additional) output latency that cannot be determined via the implementation's underlying code (e.g. latency from external D-A/D-A converters. Units are samples.
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
inlinevirtual |
If yn
is true, become the time master for any inter-application transport timebase, otherwise cease to be the time master for the same.
Return zero on success, non-zero otherwise
JACK is the only currently known audio API with the concept of a shared transport timebase.
Reimplemented in ARDOUR::JACKAudioBackend.
Definition at line 719 of file audio_backend.h.
|
inlinevirtual |
Set the backend to use a blocking or buffered I/O mode
Reimplemented in ARDOUR::PortAudioBackend.
Definition at line 331 of file audio_backend.h.
|
inlinevirtual |
Set speed
and position
to the current speed and position indicated by some transport sync signal. Return whether the current transport state is pending, or finalized.
Derived classes only need implement this if they provide some way to sync to a transport sync signal (e.g. Sony 9 Pin) that is not handled by Ardour itself (LTC and MTC are both handled by Ardour). The canonical example is JACK Transport.
Reimplemented in ARDOUR::JACKAudioBackend.
Definition at line 817 of file audio_backend.h.
|
inline |
Start using the device named in the most recent call to set_device(), with the parameters set by various the most recent calls to set_sample_rate() etc. etc.
At some undetermined time after this function is successfully called, the backend will start calling the process_callback method of the AudioEngine referenced by engine. These calls will occur in a thread created by and/or under the control of the backend.
for_latency_measurement | if true, the device is being started to carry out latency measurements and the backend should this take care to return latency numbers that do not reflect any existing systemic latency settings. |
Return zero if successful, negative values otherwise.
Why is this non-virtual but _start() is virtual ? Virtual methods with default parameters create possible ambiguity because a derived class may implement the same method with a different type or value of default parameter.
So we make this non-virtual method to avoid possible overrides of default parameters. See Scott Meyers or other books on C++ to understand this pattern, or possibly just this:
http://stackoverflow.com/questions/12139786/good-pratice-default-arguments-for-pure-virtual-method
Definition at line 626 of file audio_backend.h.
|
pure virtual |
Stop using the device currently in use.
If the function is successfully called, no subsequent calls to the process_callback() of engine will be made after the function returns, until parameters are reset and start() are called again.
The backend is considered to be un-configured after a successful return, and requires calls to set hardware parameters before it can be start()-ed again. See pause() for a way to avoid this. stop() should only be used when reconfiguration is required OR when there are no plans to use the backend in the future with a reconfiguration.
Return zero if successful, 1 if the device is not in use, negative values on error
Implemented in ARDOUR::PulseAudioBackend, ARDOUR::PortAudioBackend, ARDOUR::JACKAudioBackend, ARDOUR::DummyAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
|
pure virtual |
|
pure virtual |
|
pure virtual |
|
pure virtual |
|
inlinestatic |
Return the minimum stack size of audio threads in bytes
Definition at line 798 of file audio_backend.h.
|
inlinevirtual |
Attempt to locate the transport to pos
Reimplemented in ARDOUR::JACKAudioBackend.
Definition at line 701 of file audio_backend.h.
|
inlinevirtual |
Return the current transport location, in samples measured from the origin (defined by the transport time master)
Reimplemented in ARDOUR::JACKAudioBackend.
Definition at line 706 of file audio_backend.h.
|
inlinevirtual |
Attempt to change the transport state to TransportRolling.
Reimplemented in ARDOUR::JACKAudioBackend.
Definition at line 689 of file audio_backend.h.
|
inlinevirtual |
return the current transport state
Reimplemented in ARDOUR::JACKAudioBackend.
Definition at line 695 of file audio_backend.h.
|
inlinevirtual |
Attempt to change the transport state to TransportStopped.
Reimplemented in ARDOUR::JACKAudioBackend.
Definition at line 692 of file audio_backend.h.
|
inlinevirtual |
Request an update to the list of devices returned in the enumerations. The Backend must return true from can_request_update_devices to support this interface.
Reimplemented in ARDOUR::PortAudioBackend, and ARDOUR::AlsaAudioBackend.
Definition at line 314 of file audio_backend.h.
|
pure virtual |
|
inlinevirtual |
An optional alternate interface for backends to provide a facility to select separate input and output devices.
If a backend returns true then enumerate_input_devices() and enumerate_output_devices() will be used instead of enumerate_devices() to enumerate devices. Similarly set_input/output_device_name() should be used to set devices instead of set_device_name().
Reimplemented in ARDOUR::PortAudioBackend, ARDOUR::CoreAudioBackend, and ARDOUR::AlsaAudioBackend.
Definition at line 226 of file audio_backend.h.
|
inlinevirtual |
Definition at line 724 of file audio_backend.h.
|
protected |
Definition at line 834 of file audio_backend.h.
PBD::TimingStats ARDOUR::AudioBackend::dsp_stats[NTT] |
Definition at line 831 of file audio_backend.h.
|
protected |
Definition at line 835 of file audio_backend.h.