2 Copyright (C) 2013 Paul Davis
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 #ifndef __libardour_audiobackend_h__
21 #define __libardour_audiobackend_h__
29 #include <boost/function.hpp>
31 #include "ardour/libardour_visibility.h"
32 #include "ardour/types.h"
33 #include "ardour/audioengine.h"
34 #include "ardour/port_engine.h"
36 #ifdef ARDOURBACKEND_DLL_EXPORTS // defined if we are building the ARDOUR Panners DLLs (instead of using them)
37 #define ARDOURBACKEND_API LIBARDOUR_DLL_EXPORT
39 #define ARDOURBACKEND_API LIBARDOUR_DLL_IMPORT
41 #define ARDOURBACKEND_LOCAL LIBARDOUR_DLL_LOCAL
45 struct LIBARDOUR_API AudioBackendInfo {
48 /** Using arg1 and arg2, initialize this audiobackend.
50 * Returns zero on success, non-zero otherwise.
52 int (*instantiate) (const std::string& arg1, const std::string& arg2);
54 /** Release all resources associated with this audiobackend
56 int (*deinstantiate) (void);
58 /** Factory method to create an AudioBackend-derived class.
60 * Returns a valid shared_ptr to the object if successfull,
61 * or a "null" shared_ptr otherwise.
63 boost::shared_ptr<AudioBackend> (*factory) (AudioEngine&);
65 /** Return true if the underlying mechanism/API has been
66 * configured and does not need (re)configuration in order
67 * to be usable. Return false otherwise.
69 * Note that this may return true if (re)configuration, even though
70 * not currently required, is still possible.
72 bool (*already_configured)();
74 /** Return true if the underlying mechanism/API can be
75 * used on the given system.
77 * If this function returns false, the backend is not
78 * listed in the engine dialog.
83 /** AudioBackend is an high-level abstraction for interacting with the operating system's
86 class LIBARDOUR_API AudioBackend : public PortEngine {
89 AudioBackend (AudioEngine& e, AudioBackendInfo& i) : PortEngine (e), _info (i), engine (e) {}
90 virtual ~AudioBackend () {}
94 BackendInitializationError = -64,
95 BackendDeinitializationError,
96 BackendReinitializationError,
98 AudioDeviceCloseError,
99 AudioDeviceInvalidError,
100 AudioDeviceNotAvailableError,
101 AudioDeviceNotConnectedError,
102 AudioDeviceReservationError,
105 MidiDeviceCloseError,
106 MidiDeviceNotAvailableError,
107 MidiDeviceNotConnectedError,
109 SampleFormatNotSupportedError,
110 SampleRateNotSupportedError,
111 RequestedInputLatencyNotSupportedError,
112 RequestedOutputLatencyNotSupportedError,
113 PeriodSizeNotSupportedError,
114 PeriodCountNotSupportedError,
115 DeviceConfigurationNotSupportedError,
116 ChannelCountNotSupportedError,
117 InputChannelCountNotSupportedError,
118 OutputChannelCountNotSupportedError,
119 AquireRealtimePermissionError,
120 SettingAudioThreadPriorityError,
121 SettingMIDIThreadPriorityError,
122 ProcessThreadStartError,
123 FreewheelThreadStartError,
124 PortRegistrationError,
129 static std::string get_error_string (ErrorCode);
131 enum StandardDeviceName {
136 static std::string get_standard_device_name (StandardDeviceName);
138 /** Return the AudioBackendInfo object from which this backend
141 AudioBackendInfo& info() const { return _info; }
143 /** Return the name of this backend.
145 * Should use a well-known, unique term. Expected examples
146 * might include "JACK", "CoreAudio", "ASIO" etc.
148 virtual std::string name() const = 0;
150 /** Return true if the callback from the underlying mechanism/API
151 * (CoreAudio, JACK, ASIO etc.) occurs in a thread subject to realtime
152 * constraints. Return false otherwise.
154 virtual bool is_realtime () const = 0;
156 /* Discovering devices and parameters */
158 /** Return true if this backend requires the selection of a "driver"
159 * before any device can be selected. Return false otherwise.
161 * Intended mainly to differentiate between meta-APIs like JACK
162 * which can still expose different backends (such as ALSA or CoreAudio
163 * or FFADO or netjack) and those like ASIO or CoreAudio which
166 virtual bool requires_driver_selection() const { return false; }
168 /** If the return value of requires_driver_selection() is true,
169 * then this function can return the list of known driver names.
171 * If the return value of requires_driver_selection() is false,
172 * then this function should not be called. If it is called
173 * its return value is an empty vector of strings.
175 virtual std::vector<std::string> enumerate_drivers() const { return std::vector<std::string>(); }
177 /** Returns zero if the backend can successfully use @param name as the
178 * driver, non-zero otherwise.
180 * Should not be used unless the backend returns true from
181 * requires_driver_selection()
183 virtual int set_driver (const std::string& /*drivername*/) { return 0; }
185 /** used to list device names along with whether or not they are currently
188 struct DeviceStatus {
192 DeviceStatus (const std::string& s, bool avail) : name (s), available (avail) {}
195 /** An optional alternate interface for backends to provide a facility to
196 * select separate input and output devices.
198 * If a backend returns true then enumerate_input_devices() and
199 * enumerate_output_devices() will be used instead of enumerate_devices()
200 * to enumerate devices. Similarly set_input/output_device_name() should
201 * be used to set devices instead of set_device_name().
203 virtual bool use_separate_input_and_output_devices () const { return false; }
205 /** Returns a collection of DeviceStatuses identifying devices discovered
206 * by this backend since the start of the process.
208 * Any of the names in each DeviceStatus may be used to identify a
209 * device in other calls to the backend, though any of them may become
210 * invalid at any time.
212 virtual std::vector<DeviceStatus> enumerate_devices () const = 0;
214 /** Returns a collection of DeviceStatuses identifying input devices
215 * discovered by this backend since the start of the process.
217 * Any of the names in each DeviceStatus may be used to identify a
218 * device in other calls to the backend, though any of them may become
219 * invalid at any time.
221 virtual std::vector<DeviceStatus> enumerate_input_devices () const
222 { return std::vector<DeviceStatus>(); }
224 /** Returns a collection of DeviceStatuses identifying output devices
225 * discovered by this backend since the start of the process.
227 * Any of the names in each DeviceStatus may be used to identify a
228 * device in other calls to the backend, though any of them may become
229 * invalid at any time.
231 virtual std::vector<DeviceStatus> enumerate_output_devices () const
232 { return std::vector<DeviceStatus>(); }
235 /** An interface to set buffers/period for playback latency.
236 * useful for ALSA or JACK/ALSA on Linux.
238 * @return true if the backend supports period-size configuration
240 virtual bool can_set_period_size () const { return false; }
242 /** Returns a vector of supported period-sizes for the given driver */
243 virtual std::vector<uint32_t> available_period_sizes (const std::string& driver) const { return std::vector<uint32_t>(); }
245 /** Set the period size to be used.
246 * must be called before starting the backend.
248 virtual int set_peridod_size (uint32_t) { return -1; }
251 * @return true if backend supports requesting an update to the device list
252 * and any cached properties associated with the devices.
254 virtual bool can_request_update_devices () { return false; }
257 * Request an update to the list of devices returned in the enumerations.
258 * The Backend must return true from can_request_update_devices to support
260 * @return true if the devices were updated
262 virtual bool update_devices () { return false; }
265 * @return true if backend supports a blocking or buffered mode, false by
266 * default unless implemented by a derived class.
268 virtual bool can_use_buffered_io () { return false; }
271 * Set the backend to use a blocking or buffered I/O mode
273 virtual void set_use_buffered_io (bool) { }
276 * @return Set the backend to use a blocking or buffered I/O mode, false by
277 * default unless implemented by a derived class.
279 virtual bool get_use_buffered_io () { return false; }
281 /** Returns a collection of float identifying sample rates that are
282 * potentially usable with the hardware identified by @param device.
283 * Any of these values may be supplied in other calls to this backend
284 * as the desired sample rate to use with the name device, but the
285 * requested sample rate may turn out to be unavailable, or become invalid
288 virtual std::vector<float> available_sample_rates (const std::string& device) const = 0;
290 /* backends that support separate input and output devices should
291 * implement this function and return an intersection (not union) of available
292 * sample rates valid for the given input + output device combination.
294 virtual std::vector<float> available_sample_rates2 (const std::string& input_device, const std::string& output_device) const {
295 std::vector<float> input_sizes = available_sample_rates (input_device);
296 std::vector<float> output_sizes = available_sample_rates (output_device);
297 std::vector<float> rv;
298 std::set_union (input_sizes.begin (), input_sizes.end (),
299 output_sizes.begin (), output_sizes.end (),
300 std::back_inserter (rv));
304 /* Returns the default sample rate that will be shown to the user when
305 * configuration options are first presented. If the derived class
306 * needs or wants to override this, it can. It also MUST override this
307 * if there is any chance that an SR of 44.1kHz is not in the list
308 * returned by available_sample_rates()
310 virtual float default_sample_rate () const {
314 /** Returns a collection of uint32 identifying buffer sizes that are
315 * potentially usable with the hardware identified by @param device.
316 * Any of these values may be supplied in other calls to this backend
317 * as the desired buffer size to use with the name device, but the
318 * requested buffer size may turn out to be unavailable, or become invalid
321 virtual std::vector<uint32_t> available_buffer_sizes (const std::string& device) const = 0;
323 /* backends that support separate input and output devices should
324 * implement this function and return an intersection (not union) of available
325 * buffer sizes valid for the given input + output device combination.
327 virtual std::vector<uint32_t> available_buffer_sizes2 (const std::string& input_device, const std::string& output_device) const {
328 std::vector<uint32_t> input_rates = available_buffer_sizes (input_device);
329 std::vector<uint32_t> output_rates = available_buffer_sizes (output_device);
330 std::vector<uint32_t> rv;
331 std::set_union (input_rates.begin (), input_rates.end (),
332 output_rates.begin (), output_rates.end (),
333 std::back_inserter (rv));
336 /* Returns the default buffer size that will be shown to the user when
337 * configuration options are first presented. If the derived class
338 * needs or wants to override this, it can. It also MUST override this
339 * if there is any chance that a buffer size of 1024 is not in the list
340 * returned by available_buffer_sizes()
342 virtual uint32_t default_buffer_size (const std::string& device) const {
346 /** Returns the maximum number of input channels that are potentially
347 * usable with the hardware identified by @param device. Any number from 1
348 * to the value returned may be supplied in other calls to this backend as
349 * the input channel count to use with the name device, but the requested
350 * count may turn out to be unavailable, or become invalid at any time.
352 virtual uint32_t available_input_channel_count (const std::string& device) const = 0;
354 /** Returns the maximum number of output channels that are potentially
355 * usable with the hardware identified by @param device. Any number from 1
356 * to the value returned may be supplied in other calls to this backend as
357 * the output channel count to use with the name device, but the requested
358 * count may turn out to be unavailable, or become invalid at any time.
360 virtual uint32_t available_output_channel_count (const std::string& device) const = 0;
362 /* Return true if the derived class can change the sample rate of the
363 * device in use while the device is already being used. Return false
364 * otherwise. (example: JACK cannot do this as of September 2013)
366 virtual bool can_change_sample_rate_when_running () const = 0;
367 /* Return true if the derived class can change the buffer size of the
368 * device in use while the device is already being used. Return false
371 virtual bool can_change_buffer_size_when_running () const = 0;
373 /** return true if the backend can measure and update
374 * systemic latencies without restart.
376 virtual bool can_change_systemic_latency_when_running () const { return false; }
378 /* Set the hardware parameters.
380 * If called when the current state is stopped or paused,
381 * the changes will not take effect until the state changes to running.
383 * If called while running, the state will change as fast as the
384 * implementation allows.
386 * All set_*() methods return zero on success, non-zero otherwise.
389 /** Set the name of the device to be used
391 virtual int set_device_name (const std::string&) = 0;
393 /** Set the name of the input device to be used if using separate
394 * input/output devices.
396 * @see use_separate_input_and_output_devices()
398 virtual int set_input_device_name (const std::string&) { return 0;}
400 /** Set the name of the output device to be used if using separate
401 * input/output devices.
403 * @see use_separate_input_and_output_devices()
405 virtual int set_output_device_name (const std::string&) { return 0;}
407 /** Deinitialize and destroy current device
409 virtual int drop_device() {return 0;};
410 /** Set the sample rate to be used
412 virtual int set_sample_rate (float) = 0;
413 /** Set the buffer size to be used.
415 * The device is assumed to use a double buffering scheme, so that one
416 * buffer's worth of data can be processed by hardware while software works
417 * on the other buffer. All known suitable audio APIs support this model
418 * (though ALSA allows for alternate numbers of buffers, and CoreAudio
419 * doesn't directly expose the concept).
421 virtual int set_buffer_size (uint32_t) = 0;
422 /** Set the preferred underlying hardware data layout.
423 * If @param yn is true, then the hardware will interleave
424 * samples for successive channels; otherwise, the hardware will store
425 * samples for a single channel contiguously.
427 * Setting this does not change the fact that all data streams
428 * to and from Ports are mono (essentially, non-interleaved)
430 virtual int set_interleaved (bool yn) = 0;
431 /** Set the number of input channels that should be used
433 virtual int set_input_channels (uint32_t) = 0;
434 /** Set the number of output channels that should be used
436 virtual int set_output_channels (uint32_t) = 0;
437 /** Set the (additional) input latency that cannot be determined via
438 * the implementation's underlying code (e.g. latency from
439 * external D-A/D-A converters. Units are samples.
441 virtual int set_systemic_input_latency (uint32_t) = 0;
442 /** Set the (additional) output latency that cannot be determined via
443 * the implementation's underlying code (e.g. latency from
444 * external D-A/D-A converters. Units are samples.
446 virtual int set_systemic_output_latency (uint32_t) = 0;
447 /** Set the (additional) input latency for a specific midi device,
448 * or if the identifier is empty, apply to all midi devices.
450 virtual int set_systemic_midi_input_latency (std::string const, uint32_t) = 0;
451 /** Set the (additional) output latency for a specific midi device,
452 * or if the identifier is empty, apply to all midi devices.
454 virtual int set_systemic_midi_output_latency (std::string const, uint32_t) = 0;
456 /* Retrieving parameters */
458 virtual std::string device_name () const = 0;
459 virtual std::string input_device_name () const { return std::string(); }
460 virtual std::string output_device_name () const { return std::string(); }
461 virtual float sample_rate () const = 0;
462 virtual uint32_t buffer_size () const = 0;
463 virtual bool interleaved () const = 0;
464 virtual uint32_t input_channels () const = 0;
465 virtual uint32_t output_channels () const = 0;
466 virtual uint32_t systemic_input_latency () const = 0;
467 virtual uint32_t systemic_output_latency () const = 0;
468 virtual uint32_t systemic_midi_input_latency (std::string const) const = 0;
469 virtual uint32_t systemic_midi_output_latency (std::string const) const = 0;
470 virtual uint32_t period_size () const { return 0; }
472 /** override this if this implementation returns true from
473 * requires_driver_selection()
475 virtual std::string driver_name() const { return std::string(); }
477 /** Return the name of a control application for the
478 * selected/in-use device. If no such application exists,
479 * or if no device has been selected or is in-use,
480 * return an empty string.
482 virtual std::string control_app_name() const = 0;
483 /** Launch the control app for the currently in-use or
484 * selected device. May do nothing if the control
485 * app is undefined or cannot be launched.
487 virtual void launch_control_app () = 0;
489 /* @return a vector of strings that describe the available
492 * These can be presented to the user to decide which
493 * MIDI drivers, options etc. can be used. The returned strings
494 * should be thought of as the key to a map of possible
495 * approaches to handling MIDI within the backend. Ensure that
496 * the strings will make sense to the user.
498 virtual std::vector<std::string> enumerate_midi_options () const = 0;
500 /* Request the use of the MIDI option named @param option, which
501 * should be one of the strings returned by enumerate_midi_options()
503 * @return zero if successful, non-zero otherwise
505 virtual int set_midi_option (const std::string& option) = 0;
507 virtual std::string midi_option () const = 0;
509 /** Detailed MIDI device list - if available */
510 virtual std::vector<DeviceStatus> enumerate_midi_devices () const = 0;
512 /** mark a midi-devices as enabled */
513 virtual int set_midi_device_enabled (std::string const, bool) = 0;
515 /** query if a midi-device is enabled */
516 virtual bool midi_device_enabled (std::string const) const = 0;
518 /** if backend supports systemic_midi_[in|ou]tput_latency() */
519 virtual bool can_set_systemic_midi_latencies () const = 0;
523 /** Start using the device named in the most recent call
524 * to set_device(), with the parameters set by various
525 * the most recent calls to set_sample_rate() etc. etc.
527 * At some undetermined time after this function is successfully called,
528 * the backend will start calling the ::process_callback() method of
529 * the AudioEngine referenced by @param engine. These calls will
530 * occur in a thread created by and/or under the control of the backend.
532 * @param for_latency_measurement if true, the device is being started
533 * to carry out latency measurements and the backend should this
534 * take care to return latency numbers that do not reflect
535 * any existing systemic latency settings.
537 * Return zero if successful, negative values otherwise.
542 * Why is this non-virtual but ::_start() is virtual ?
543 * Virtual methods with default parameters create possible ambiguity
544 * because a derived class may implement the same method with a different
545 * type or value of default parameter.
547 * So we make this non-virtual method to avoid possible overrides of
548 * default parameters. See Scott Meyers or other books on C++ to understand
549 * this pattern, or possibly just this:
551 * http://stackoverflow.com/questions/12139786/good-pratice-default-arguments-for-pure-virtual-method
553 int start (bool for_latency_measurement=false) {
554 return _start (for_latency_measurement);
557 /** Stop using the device currently in use.
559 * If the function is successfully called, no subsequent calls to the
560 * process_callback() of @param engine will be made after the function
561 * returns, until parameters are reset and start() are called again.
563 * The backend is considered to be un-configured after a successful
564 * return, and requires calls to set hardware parameters before it can be
565 * start()-ed again. See pause() for a way to avoid this. stop() should
566 * only be used when reconfiguration is required OR when there are no
567 * plans to use the backend in the future with a reconfiguration.
569 * Return zero if successful, 1 if the device is not in use, negative values on error
571 virtual int stop () = 0;
575 * Return zero if successful, negative values on error
577 virtual int reset_device() = 0;
579 /** While remaining connected to the device, and without changing its
580 * configuration, start (or stop) calling the process_callback() of @param engine
581 * without waiting for the device. Once process_callback() has returned, it
582 * will be called again immediately, thus allowing for faster-than-realtime
585 * All registered ports remain in existence and all connections remain
586 * unaltered. However, any physical ports should NOT be used by the
587 * process_callback() during freewheeling - the data behaviour is undefined.
589 * If @param start_stop is true, begin this behaviour; otherwise cease this
590 * behaviour if it currently occuring, and return to calling
591 * process_callback() of @param engine by waiting for the device.
593 * Return zero on success, non-zero otherwise.
595 virtual int freewheel (bool start_stop) = 0;
597 /** return the fraction of the time represented by the current buffer
598 * size that is being used for each buffer process cycle, as a value
601 * E.g. if the buffer size represents 5msec and current processing
602 * takes 1msec, the returned value should be 0.2.
604 * Implementations can feel free to smooth the values returned over
605 * time (e.g. high pass filtering, or its equivalent).
607 virtual float dsp_load() const = 0;
609 /* Transport Control (JACK is the only audio API that currently offers
610 the concept of shared transport control)
613 /** Attempt to change the transport state to TransportRolling.
615 virtual void transport_start () {}
616 /** Attempt to change the transport state to TransportStopped.
618 virtual void transport_stop () {}
619 /** return the current transport state
621 virtual TransportState transport_state () const { return TransportStopped; }
622 /** Attempt to locate the transport to @param pos
624 virtual void transport_locate (framepos_t /*pos*/) {}
625 /** Return the current transport location, in samples measured
626 * from the origin (defined by the transport time master)
628 virtual framepos_t transport_frame() const { return 0; }
630 /** If @param yn is true, become the time master for any inter-application transport
631 * timebase, otherwise cease to be the time master for the same.
633 * Return zero on success, non-zero otherwise
635 * JACK is the only currently known audio API with the concept of a shared
636 * transport timebase.
638 virtual int set_time_master (bool /*yn*/) { return 0; }
640 virtual int usecs_per_cycle () const { return 1000000 * (buffer_size() / sample_rate()); }
641 virtual size_t raw_buffer_size (DataType t) = 0;
645 /** return the time according to the sample clock in use, measured in
646 * samples since an arbitrary zero time in the past. The value should
647 * increase monotonically and linearly, without interruption from any
648 * source (including CPU frequency scaling).
650 * It is extremely likely that any implementation will use a DLL, since
651 * this function can be called from any thread, at any time, and must be
652 * able to accurately determine the correct sample time.
654 * Can be called from any thread.
656 virtual framepos_t sample_time () = 0;
658 /** Return the time according to the sample clock in use when the most
659 * recent buffer process cycle began. Can be called from any thread.
661 virtual framepos_t sample_time_at_cycle_start () = 0;
663 /** Return the time since the current buffer process cycle started,
664 * in samples, according to the sample clock in use.
666 * Can ONLY be called from within a process() callback tree (which
667 * implies that it can only be called by a process thread)
669 virtual pframes_t samples_since_cycle_start () = 0;
671 /** Return true if it possible to determine the offset in samples of the
672 * first video frame that starts within the current buffer process cycle,
673 * measured from the first sample of the cycle. If returning true,
674 * set @param offset to that offset.
676 * Eg. if it can be determined that the first video frame within the cycle
677 * starts 28 samples after the first sample of the cycle, then this method
678 * should return true and set @param offset to 28.
680 * May be impossible to support outside of JACK, which has specific support
681 * (in some cases, hardware support) for this feature.
683 * Can ONLY be called from within a process() callback tree (which implies
684 * that it can only be called by a process thread)
686 virtual bool get_sync_offset (pframes_t& /*offset*/) const { return false; }
688 /** Create a new thread suitable for running part of the buffer process
689 * cycle (i.e. Realtime scheduling, memory allocation, etc. etc are all
690 * correctly setup), with a stack size given in bytes by specified @param
691 * stacksize. The thread will begin executing @param func, and will exit
692 * when that function returns.
694 virtual int create_process_thread (boost::function<void()> func) = 0;
696 /** Wait for all processing threads to exit.
698 * Return zero on success, non-zero on failure.
700 virtual int join_process_threads () = 0;
702 /** Return true if execution context is in a backend thread
704 virtual bool in_process_thread () = 0;
706 /** Return the minimum stack size of audio threads in bytes
708 static size_t thread_stack_size () { return 100000; }
710 /** Return number of processing threads
712 virtual uint32_t process_thread_count () = 0;
714 virtual void update_latencies () = 0;
716 /** Set @param speed and @param position to the current speed and position
717 * indicated by some transport sync signal. Return whether the current
718 * transport state is pending, or finalized.
720 * Derived classes only need implement this if they provide some way to
721 * sync to a transport sync signal (e.g. Sony 9 Pin) that is not
722 * handled by Ardour itself (LTC and MTC are both handled by Ardour).
723 * The canonical example is JACK Transport.
725 virtual bool speed_and_position (double& speed, framepos_t& position) {
732 AudioBackendInfo& _info;
735 virtual int _start (bool for_latency_measurement) = 0;
740 #endif /* __libardour_audiobackend_h__ */