X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=RtAudio.h;h=82c3f6476ee7498cc737ee39468f8e9db210b98c;hb=fa8b676a577de663b8622d0e8f6ce3605576b977;hp=4969102fb0248d5a13be0bd2bb3bcb92e5e8a11e;hpb=ee94a98f961163e8ddf59b8cddee32bc9f3c6b67;p=rtaudio-cdist.git diff --git a/RtAudio.h b/RtAudio.h index 4969102..82c3f64 100644 --- a/RtAudio.h +++ b/RtAudio.h @@ -10,7 +10,7 @@ RtAudio WWW site: http://www.music.mcgill.ca/~gary/rtaudio/ RtAudio: realtime audio i/o C++ classes - Copyright (c) 2001-2016 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,25 +45,27 @@ #ifndef __RTAUDIO_H #define __RTAUDIO_H -#define RTAUDIO_VERSION "4.1.2" +#define RTAUDIO_VERSION "5.0.0" + +#if defined _WIN32 || defined __CYGWIN__ + #if defined(RTAUDIO_EXPORT) + #define RTAUDIO_DLL_PUBLIC __declspec(dllexport) + #else + #define RTAUDIO_DLL_PUBLIC + #endif +#else + #if __GNUC__ >= 4 + #define RTAUDIO_DLL_PUBLIC __attribute__( (visibility( "default" )) ) + #else + #define RTAUDIO_DLL_PUBLIC + #endif +#endif #include #include -#include +#include #include -#ifndef _NOEXCEPT -#ifdef _GLIBCXX_NOEXCEPT -#define _NOEXCEPT _GLIBCXX_NOEXCEPT -#else -#ifdef _GLIBCXX_USE_NOEXCEPT -#define _NOEXCEPT _GLIBCXX_USE_NOEXCEPT -#else -#define _NOEXCEPT -#endif -#endif -#endif - /*! \typedef typedef unsigned long RtAudioFormat; \brief RtAudio data format type. @@ -98,6 +100,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 @@ -113,7 +116,7 @@ static const RtAudioFormat RTAUDIO_FLOAT64 = 0x20; // Normalized between plus/mi Certain audio APIs offer a number of parameters that influence the I/O latency of a stream. By default, RtAudio will attempt to set these parameters internally for robust (glitch-free) performance - (though some APIs, like Windows Direct Sound, make this difficult). + (though some APIs, like Windows DirectSound, make this difficult). By passing the RTAUDIO_MINIMIZE_LATENCY flag to the openStream() function, internal stream settings will be influenced in an attempt to minimize stream latency, though possibly at the expense of stream @@ -129,6 +132,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). @@ -136,6 +142,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. @@ -207,7 +214,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. @@ -226,25 +233,22 @@ class RtAudioError : public std::exception }; //! The constructor. - RtAudioError( const std::string& message, Type type = RtAudioError::UNSPECIFIED ) : message_(message), type_(type) {} - - //! The destructor. - virtual ~RtAudioError( void ) _NOEXCEPT {} + 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 { 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 { return type_; } //! Returns the thrown error message string. - virtual const std::string& getMessage(void) const { return message_; } - - //! Returns the thrown error message as a c-style string. - virtual const char* what( void ) const _NOEXCEPT { return message_.c_str(); } + virtual const std::string getMessage(void) const + { return std::string(what()); } protected: - std::string message_; Type type_; }; @@ -270,7 +274,7 @@ typedef void (*RtAudioErrorCallback)( RtAudioError::Type type, const std::string class RtApi; -class RtAudio +class RTAUDIO_DLL_PUBLIC RtAudio { public: @@ -284,8 +288,9 @@ class RtAudio MACOSX_CORE, /*!< Macintosh OS-X Core Audio API. */ WINDOWS_WASAPI, /*!< The Microsoft WASAPI API. */ WINDOWS_ASIO, /*!< The Steinberg Audio Stream I/O API. */ - WINDOWS_DS, /*!< The Microsoft Direct Sound API. */ - RTAUDIO_DUMMY /*!< A compilable but non-functional API. */ + WINDOWS_DS, /*!< The Microsoft DirectSound API. */ + RTAUDIO_DUMMY, /*!< A compilable but non-functional API. */ + NUM_APIS /*!< Number of values in this enum. */ }; //! The public device information structure for returning queried values. @@ -298,7 +303,7 @@ class RtAudio bool isDefaultOutput; /*!< true if this is the default output device. */ bool isDefaultInput; /*!< true if this is the default input device. */ std::vector sampleRates; /*!< Supported sample rates (queried from list of standard rates). */ - unsigned int preferredSampleRate; /*!< Preferred sample rate, eg. for WASAPI the system sample rate. */ + unsigned int preferredSampleRate; /*!< Preferred sample rate, e.g. for WASAPI the system sample rate. */ RtAudioFormat nativeFormats; /*!< Bit mask of supported data formats. */ // Default constructor. @@ -343,7 +348,7 @@ class RtAudio Certain audio APIs offer a number of parameters that influence the I/O latency of a stream. By default, RtAudio will attempt to set these parameters internally for robust (glitch-free) performance - (though some APIs, like Windows Direct Sound, make this difficult). + (though some APIs, like Windows DirectSound, make this difficult). By passing the RTAUDIO_MINIMIZE_LATENCY flag to the openStream() function, internal stream settings will be influenced in an attempt to minimize stream latency, though possibly at the expense of stream @@ -397,6 +402,29 @@ class RtAudio */ static void getCompiledApi( std::vector &apis ); + //! Return the name of a specified compiled audio API. + /*! + This obtains a short lower-case name used for identification purposes. + This value is guaranteed to remain identical across library versions. + If the API is unknown, this function will return the empty string. + */ + static std::string getApiName( RtAudio::Api api ); + + //! Return the display name of a specified compiled audio API. + /*! + This obtains a long name used for display purposes. + If the API is unknown, this function will return the empty string. + */ + static std::string getApiDisplayName( RtAudio::Api api ); + + //! Return the compiled audio API having the given name. + /*! + A case insensitive comparison will check the specified name + against the list of compiled APIs, and return the one which + matches. On failure, the function returns UNSPECIFIED. + */ + static RtAudio::Api getCompiledApiByName( const std::string &name ); + //! The class constructor. /*! The constructor performs minor initialization tasks. An exception @@ -681,7 +709,7 @@ class S24 { #include -class RtApi +class RTAUDIO_DLL_PUBLIC RtApi { public: @@ -874,7 +902,6 @@ public: void startStream( void ); void stopStream( void ); void abortStream( void ); - long getStreamLatency( void ); // This function is intended for internal use only. It must be // public because it is called by the internal callback handler, @@ -910,7 +937,6 @@ public: void startStream( void ); void stopStream( void ); void abortStream( void ); - long getStreamLatency( void ); // This function is intended for internal use only. It must be // public because it is called by the internal callback handler, @@ -924,6 +950,8 @@ public: unsigned int firstChannel, unsigned int sampleRate, RtAudioFormat format, unsigned int *bufferSize, RtAudio::StreamOptions *options ); + + bool shouldAutoconnect_; }; #endif @@ -943,7 +971,6 @@ public: void startStream( void ); void stopStream( void ); void abortStream( void ); - long getStreamLatency( void ); // This function is intended for internal use only. It must be // public because it is called by the internal callback handler, @@ -981,7 +1008,6 @@ public: void startStream( void ); void stopStream( void ); void abortStream( void ); - long getStreamLatency( void ); // This function is intended for internal use only. It must be // public because it is called by the internal callback handler, @@ -1011,7 +1037,7 @@ class RtApiWasapi : public RtApi { public: RtApiWasapi(); - ~RtApiWasapi(); + virtual ~RtApiWasapi(); RtAudio::Api getCurrentApi( void ) { return RtAudio::WINDOWS_WASAPI; } unsigned int getDeviceCount( void );