|
|
@@ -10,7 +10,7 @@ |
|
|
|
RtAudio WWW site: http://www.music.mcgill.ca/~gary/rtaudio/ |
|
|
|
|
|
|
|
RtAudio: realtime audio i/o C++ classes |
|
|
|
Copyright (c) 2001-2014 Gary P. Scavone |
|
|
|
Copyright (c) 2001-2017 Gary P. Scavone |
|
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person |
|
|
|
obtaining a copy of this software and associated documentation files |
|
|
@@ -45,11 +45,12 @@ |
|
|
|
#ifndef __RTAUDIO_H |
|
|
|
#define __RTAUDIO_H |
|
|
|
|
|
|
|
#define RTAUDIO_VERSION "4.1.1" |
|
|
|
#define RTAUDIO_VERSION "5.0.0" |
|
|
|
#define RTAUDIO_DLL_PUBLIC |
|
|
|
|
|
|
|
#include <string> |
|
|
|
#include <vector> |
|
|
|
#include <exception> |
|
|
|
#include <stdexcept> |
|
|
|
#include <iostream> |
|
|
|
|
|
|
|
/*! \typedef typedef unsigned long RtAudioFormat; |
|
|
@@ -86,6 +87,7 @@ static const RtAudioFormat RTAUDIO_FLOAT64 = 0x20; // Normalized between plus/mi |
|
|
|
- \e RTAUDIO_MINIMIZE_LATENCY: Attempt to set stream parameters for lowest possible latency. |
|
|
|
- \e RTAUDIO_HOG_DEVICE: Attempt grab device for exclusive use. |
|
|
|
- \e RTAUDIO_ALSA_USE_DEFAULT: Use the "default" PCM device (ALSA only). |
|
|
|
- \e RTAUDIO_JACK_DONT_CONNECT: Do not automatically connect ports (JACK only). |
|
|
|
|
|
|
|
By default, RtAudio streams pass and receive audio data from the |
|
|
|
client in an interleaved format. By passing the |
|
|
@@ -117,6 +119,9 @@ static const RtAudioFormat RTAUDIO_FLOAT64 = 0x20; // Normalized between plus/mi |
|
|
|
If the RTAUDIO_ALSA_USE_DEFAULT flag is set, RtAudio will attempt to |
|
|
|
open the "default" PCM device when using the ALSA API. Note that this |
|
|
|
will override any specified input or output device id. |
|
|
|
|
|
|
|
If the RTAUDIO_JACK_DONT_CONNECT flag is set, RtAudio will not attempt |
|
|
|
to automatically connect the ports of the client to the audio device. |
|
|
|
*/ |
|
|
|
typedef unsigned int RtAudioStreamFlags; |
|
|
|
static const RtAudioStreamFlags RTAUDIO_NONINTERLEAVED = 0x1; // Use non-interleaved buffers (default = interleaved). |
|
|
@@ -124,6 +129,7 @@ static const RtAudioStreamFlags RTAUDIO_MINIMIZE_LATENCY = 0x2; // Attempt to s |
|
|
|
static const RtAudioStreamFlags RTAUDIO_HOG_DEVICE = 0x4; // Attempt grab device and prevent use by others. |
|
|
|
static const RtAudioStreamFlags RTAUDIO_SCHEDULE_REALTIME = 0x8; // Try to select realtime scheduling for callback thread. |
|
|
|
static const RtAudioStreamFlags RTAUDIO_ALSA_USE_DEFAULT = 0x10; // Use the "default" PCM device (ALSA only). |
|
|
|
static const RtAudioStreamFlags RTAUDIO_JACK_DONT_CONNECT = 0x20; // Do not automatically connect ports (JACK only). |
|
|
|
|
|
|
|
/*! \typedef typedef unsigned long RtAudioStreamStatus; |
|
|
|
\brief RtAudio stream status (over- or underflow) flags. |
|
|
@@ -195,7 +201,7 @@ typedef int (*RtAudioCallback)( void *outputBuffer, void *inputBuffer, |
|
|
|
*/ |
|
|
|
/************************************************************************/ |
|
|
|
|
|
|
|
class RtAudioError : public std::exception |
|
|
|
class RTAUDIO_DLL_PUBLIC RtAudioError : public std::runtime_error |
|
|
|
{ |
|
|
|
public: |
|
|
|
//! Defined RtAudioError types. |
|
|
@@ -214,25 +220,22 @@ class RtAudioError : public std::exception |
|
|
|
}; |
|
|
|
|
|
|
|
//! The constructor. |
|
|
|
RtAudioError( const std::string& message, Type type = RtAudioError::UNSPECIFIED ) throw() : message_(message), type_(type) {} |
|
|
|
|
|
|
|
//! The destructor. |
|
|
|
virtual ~RtAudioError( void ) throw() {} |
|
|
|
RtAudioError( const std::string& message, |
|
|
|
Type type = RtAudioError::UNSPECIFIED ) |
|
|
|
: std::runtime_error(message), type_(type) {} |
|
|
|
|
|
|
|
//! Prints thrown error message to stderr. |
|
|
|
virtual void printMessage( void ) const throw() { std::cerr << '\n' << message_ << "\n\n"; } |
|
|
|
virtual void printMessage( void ) const |
|
|
|
{ std::cerr << '\n' << what() << "\n\n"; } |
|
|
|
|
|
|
|
//! Returns the thrown error message type. |
|
|
|
virtual const Type& getType(void) const throw() { return type_; } |
|
|
|
virtual const Type& getType(void) const { return type_; } |
|
|
|
|
|
|
|
//! Returns the thrown error message string. |
|
|
|
virtual const std::string& getMessage(void) const throw() { return message_; } |
|
|
|
|
|
|
|
//! Returns the thrown error message as a c-style string. |
|
|
|
virtual const char* what( void ) const throw() { return message_.c_str(); } |
|
|
|
virtual const std::string getMessage(void) const |
|
|
|
{ return std::string(what()); } |
|
|
|
|
|
|
|
protected: |
|
|
|
std::string message_; |
|
|
|
Type type_; |
|
|
|
}; |
|
|
|
|
|
|
@@ -258,7 +261,7 @@ typedef void (*RtAudioErrorCallback)( RtAudioError::Type type, const std::string |
|
|
|
|
|
|
|
class RtApi; |
|
|
|
|
|
|
|
class RtAudio |
|
|
|
class RTAUDIO_DLL_PUBLIC RtAudio |
|
|
|
{ |
|
|
|
public: |
|
|
|
|
|
|
@@ -286,12 +289,13 @@ class RtAudio |
|
|
|
bool isDefaultOutput; /*!< true if this is the default output device. */ |
|
|
|
bool isDefaultInput; /*!< true if this is the default input device. */ |
|
|
|
std::vector<unsigned int> sampleRates; /*!< Supported sample rates (queried from list of standard rates). */ |
|
|
|
unsigned int preferredSampleRate; /*!< Preferred sample rate, eg. for WASAPI the system sample rate. */ |
|
|
|
RtAudioFormat nativeFormats; /*!< Bit mask of supported data formats. */ |
|
|
|
|
|
|
|
// Default constructor. |
|
|
|
DeviceInfo() |
|
|
|
:probed(false), outputChannels(0), inputChannels(0), duplexChannels(0), |
|
|
|
isDefaultOutput(false), isDefaultInput(false), nativeFormats(0) {} |
|
|
|
isDefaultOutput(false), isDefaultInput(false), preferredSampleRate(0), nativeFormats(0) {} |
|
|
|
}; |
|
|
|
|
|
|
|
//! The structure for specifying input or ouput stream parameters. |
|
|
@@ -374,7 +378,7 @@ class RtAudio |
|
|
|
}; |
|
|
|
|
|
|
|
//! A static function to determine the current RtAudio version. |
|
|
|
static std::string getVersion( void ) throw(); |
|
|
|
static std::string getVersion( void ); |
|
|
|
|
|
|
|
//! A static function to determine the available compiled audio APIs. |
|
|
|
/*! |
|
|
@@ -382,7 +386,7 @@ class RtAudio |
|
|
|
the enumerated list values. Note that there can be more than one |
|
|
|
API compiled for certain operating systems. |
|
|
|
*/ |
|
|
|
static void getCompiledApi( std::vector<RtAudio::Api> &apis ) throw(); |
|
|
|
static void getCompiledApi( std::vector<RtAudio::Api> &apis ); |
|
|
|
|
|
|
|
//! The class constructor. |
|
|
|
/*! |
|
|
@@ -400,10 +404,10 @@ class RtAudio |
|
|
|
If a stream is running or open, it will be stopped and closed |
|
|
|
automatically. |
|
|
|
*/ |
|
|
|
~RtAudio() throw(); |
|
|
|
~RtAudio(); |
|
|
|
|
|
|
|
//! Returns the audio API specifier for the current instance of RtAudio. |
|
|
|
RtAudio::Api getCurrentApi( void ) const throw(); |
|
|
|
RtAudio::Api getCurrentApi( void ) const; |
|
|
|
|
|
|
|
//! A public function that queries for the number of audio devices available. |
|
|
|
/*! |
|
|
@@ -411,7 +415,7 @@ class RtAudio |
|
|
|
is called, thus supporting devices connected \e after instantiation. If |
|
|
|
a system error occurs during processing, a warning will be issued. |
|
|
|
*/ |
|
|
|
unsigned int getDeviceCount( void ) throw(); |
|
|
|
unsigned int getDeviceCount( void ); |
|
|
|
|
|
|
|
//! Return an RtAudio::DeviceInfo structure for a specified device number. |
|
|
|
/*! |
|
|
@@ -434,7 +438,7 @@ class RtAudio |
|
|
|
client's responsibility to verify that a device is available |
|
|
|
before attempting to open a stream. |
|
|
|
*/ |
|
|
|
unsigned int getDefaultOutputDevice( void ) throw(); |
|
|
|
unsigned int getDefaultOutputDevice( void ); |
|
|
|
|
|
|
|
//! A function that returns the index of the default input device. |
|
|
|
/*! |
|
|
@@ -444,7 +448,7 @@ class RtAudio |
|
|
|
client's responsibility to verify that a device is available |
|
|
|
before attempting to open a stream. |
|
|
|
*/ |
|
|
|
unsigned int getDefaultInputDevice( void ) throw(); |
|
|
|
unsigned int getDefaultInputDevice( void ); |
|
|
|
|
|
|
|
//! A public function for opening a stream with the specified parameters. |
|
|
|
/*! |
|
|
@@ -497,7 +501,7 @@ class RtAudio |
|
|
|
If a stream is not open, this function issues a warning and |
|
|
|
returns (no exception is thrown). |
|
|
|
*/ |
|
|
|
void closeStream( void ) throw(); |
|
|
|
void closeStream( void ); |
|
|
|
|
|
|
|
//! A function that starts a stream. |
|
|
|
/*! |
|
|
@@ -527,10 +531,10 @@ class RtAudio |
|
|
|
void abortStream( void ); |
|
|
|
|
|
|
|
//! Returns true if a stream is open and false if not. |
|
|
|
bool isStreamOpen( void ) const throw(); |
|
|
|
bool isStreamOpen( void ) const; |
|
|
|
|
|
|
|
//! Returns true if the stream is running and false if it is stopped or not open. |
|
|
|
bool isStreamRunning( void ) const throw(); |
|
|
|
bool isStreamRunning( void ) const; |
|
|
|
|
|
|
|
//! Returns the number of elapsed seconds since the stream was started. |
|
|
|
/*! |
|
|
@@ -564,7 +568,7 @@ class RtAudio |
|
|
|
unsigned int getStreamSampleRate( void ); |
|
|
|
|
|
|
|
//! Specify whether warning messages should be printed to stderr. |
|
|
|
void showWarnings( bool value = true ) throw(); |
|
|
|
void showWarnings( bool value = true ); |
|
|
|
|
|
|
|
protected: |
|
|
|
|
|
|
@@ -615,7 +619,7 @@ struct CallbackInfo { |
|
|
|
|
|
|
|
// Default constructor. |
|
|
|
CallbackInfo() |
|
|
|
:object(0), callback(0), userData(0), errorCallback(0), apiInfo(0), isRunning(false), doRealtime(false) {} |
|
|
|
:object(0), callback(0), userData(0), errorCallback(0), apiInfo(0), isRunning(false), doRealtime(false), priority(0) {} |
|
|
|
}; |
|
|
|
|
|
|
|
// **************************************************************** // |
|
|
@@ -668,7 +672,7 @@ class S24 { |
|
|
|
|
|
|
|
#include <sstream> |
|
|
|
|
|
|
|
class RtApi |
|
|
|
class RTAUDIO_DLL_PUBLIC RtApi |
|
|
|
{ |
|
|
|
public: |
|
|
|
|
|
|
@@ -823,22 +827,22 @@ protected: |
|
|
|
// |
|
|
|
// **************************************************************** // |
|
|
|
|
|
|
|
inline RtAudio::Api RtAudio :: getCurrentApi( void ) const throw() { return rtapi_->getCurrentApi(); } |
|
|
|
inline unsigned int RtAudio :: getDeviceCount( void ) throw() { return rtapi_->getDeviceCount(); } |
|
|
|
inline RtAudio::Api RtAudio :: getCurrentApi( void ) const { return rtapi_->getCurrentApi(); } |
|
|
|
inline unsigned int RtAudio :: getDeviceCount( void ) { return rtapi_->getDeviceCount(); } |
|
|
|
inline RtAudio::DeviceInfo RtAudio :: getDeviceInfo( unsigned int device ) { return rtapi_->getDeviceInfo( device ); } |
|
|
|
inline unsigned int RtAudio :: getDefaultInputDevice( void ) throw() { return rtapi_->getDefaultInputDevice(); } |
|
|
|
inline unsigned int RtAudio :: getDefaultOutputDevice( void ) throw() { return rtapi_->getDefaultOutputDevice(); } |
|
|
|
inline void RtAudio :: closeStream( void ) throw() { return rtapi_->closeStream(); } |
|
|
|
inline unsigned int RtAudio :: getDefaultInputDevice( void ) { return rtapi_->getDefaultInputDevice(); } |
|
|
|
inline unsigned int RtAudio :: getDefaultOutputDevice( void ) { return rtapi_->getDefaultOutputDevice(); } |
|
|
|
inline void RtAudio :: closeStream( void ) { return rtapi_->closeStream(); } |
|
|
|
inline void RtAudio :: startStream( void ) { return rtapi_->startStream(); } |
|
|
|
inline void RtAudio :: stopStream( void ) { return rtapi_->stopStream(); } |
|
|
|
inline void RtAudio :: abortStream( void ) { return rtapi_->abortStream(); } |
|
|
|
inline bool RtAudio :: isStreamOpen( void ) const throw() { return rtapi_->isStreamOpen(); } |
|
|
|
inline bool RtAudio :: isStreamRunning( void ) const throw() { return rtapi_->isStreamRunning(); } |
|
|
|
inline bool RtAudio :: isStreamOpen( void ) const { return rtapi_->isStreamOpen(); } |
|
|
|
inline bool RtAudio :: isStreamRunning( void ) const { return rtapi_->isStreamRunning(); } |
|
|
|
inline long RtAudio :: getStreamLatency( void ) { return rtapi_->getStreamLatency(); } |
|
|
|
inline unsigned int RtAudio :: getStreamSampleRate( void ) { return rtapi_->getStreamSampleRate(); } |
|
|
|
inline double RtAudio :: getStreamTime( void ) { return rtapi_->getStreamTime(); } |
|
|
|
inline void RtAudio :: setStreamTime( double time ) { return rtapi_->setStreamTime( time ); } |
|
|
|
inline void RtAudio :: showWarnings( bool value ) throw() { rtapi_->showWarnings( value ); } |
|
|
|
inline void RtAudio :: showWarnings( bool value ) { rtapi_->showWarnings( value ); } |
|
|
|
|
|
|
|
// RtApi Subclass prototypes. |
|
|
|
|
|
|
@@ -911,6 +915,8 @@ public: |
|
|
|
unsigned int firstChannel, unsigned int sampleRate, |
|
|
|
RtAudioFormat format, unsigned int *bufferSize, |
|
|
|
RtAudio::StreamOptions *options ); |
|
|
|
|
|
|
|
bool shouldAutoconnect_; |
|
|
|
}; |
|
|
|
|
|
|
|
#endif |
|
|
|