Browse Source

An update to RtAudio.h for the new RtAudioError class.

tags/4.1.0
Gary Scavone 11 years ago
parent
commit
c01dce01ba
1 changed files with 68 additions and 71 deletions
  1. +68
    -71
      RtAudio.h

+ 68
- 71
RtAudio.h View File

@@ -186,12 +186,64 @@ typedef int (*RtAudioCallback)( void *outputBuffer, void *inputBuffer,
RtAudioStreamStatus status, RtAudioStreamStatus status,
void *userData ); void *userData );


/************************************************************************/
/*! \class RtAudioError
\brief Exception handling class for RtAudio & RtMidi.

The RtAudioError class is quite simple but it does allow errors to be
"caught" by RtAudioError::Type. See the RtAudio and RtMidi
documentation to know which methods can throw an RtAudioError.

*/
/************************************************************************/

class RtAudioError : public std::exception
{
public:
//! Defined RtAudioError types.
enum Type {
WARNING, /*!< A non-critical error. */
DEBUG_WARNING, /*!< A non-critical error which might be useful for debugging. */
UNSPECIFIED, /*!< The default, unspecified error type. */
NO_DEVICES_FOUND, /*!< No devices found on system. */
INVALID_DEVICE, /*!< An invalid device ID was specified. */
MEMORY_ERROR, /*!< An error occured during memory allocation. */
INVALID_PARAMETER, /*!< An invalid parameter was specified to a function. */
INVALID_USE, /*!< The function was called incorrectly. */
DRIVER_ERROR, /*!< A system driver error occured. */
SYSTEM_ERROR, /*!< A system error occured. */
THREAD_ERROR /*!< A thread error occured. */
};

//! The constructor.
RtAudioError( const std::string& message, Type type = RtAudioError::UNSPECIFIED ) throw() : message_(message), type_(type) {}
//! The destructor.
virtual ~RtAudioError( void ) throw() {}

//! Prints thrown error message to stderr.
virtual void printMessage( void ) const throw() { std::cerr << '\n' << message_ << "\n\n"; }

//! Returns the thrown error message type.
virtual const Type& getType(void) const throw() { 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(); }

protected:
std::string message_;
Type type_;
};

//! RtAudio error callback function prototype. //! RtAudio error callback function prototype.
/*! /*!
\param type Type of error. \param type Type of error.
\param errorText Error description. \param errorText Error description.
*/ */
typedef void (*RtAudioErrorCallback)( RtError::Type type, const std::string &errorText );
typedef void (*RtAudioErrorCallback)( RtAudioError::Type type, const std::string &errorText );


// **************************************************************** // // **************************************************************** //
// //
@@ -206,7 +258,6 @@ typedef void (*RtAudioErrorCallback)( RtError::Type type, const std::string &err
// //
// **************************************************************** // // **************************************************************** //


class RtAudioError;
class RtApi; class RtApi;


class RtAudio class RtAudio
@@ -367,7 +418,7 @@ class RtAudio
/*! /*!


Any device integer between 0 and getDeviceCount() - 1 is valid. Any device integer between 0 and getDeviceCount() - 1 is valid.
If an invalid argument is provided, an RtError (type = INVALID_USE)
If an invalid argument is provided, an RtAudioError (type = INVALID_USE)
will be thrown. If a device is busy or otherwise unavailable, the will be thrown. If a device is busy or otherwise unavailable, the
structure member "probed" will have a value of "false" and all structure member "probed" will have a value of "false" and all
other members are undefined. If the specified device is the other members are undefined. If the specified device is the
@@ -398,9 +449,9 @@ class RtAudio


//! A public function for opening a stream with the specified parameters. //! A public function for opening a stream with the specified parameters.
/*! /*!
An RtError (type = SYSTEM_ERROR) is thrown if a stream cannot be
An RtAudioError (type = SYSTEM_ERROR) is thrown if a stream cannot be
opened with the specified parameters or an error occurs during opened with the specified parameters or an error occurs during
processing. An RtError (type = INVALID_USE) is thrown if any
processing. An RtAudioError (type = INVALID_USE) is thrown if any
invalid device ID or channel number parameters are specified. invalid device ID or channel number parameters are specified.


\param outputParameters Specifies output stream parameters to use \param outputParameters Specifies output stream parameters to use
@@ -451,8 +502,8 @@ class RtAudio


//! A function that starts a stream. //! A function that starts a stream.
/*! /*!
An RtError (type = SYSTEM_ERROR) is thrown if an error occurs
during processing. An RtError (type = INVALID_USE) is thrown if a
An RtAudioError (type = SYSTEM_ERROR) is thrown if an error occurs
during processing. An RtAudioError (type = INVALID_USE) is thrown if a
stream is not open. A warning is issued if the stream is already stream is not open. A warning is issued if the stream is already
running. running.
*/ */
@@ -460,8 +511,8 @@ class RtAudio


//! Stop a stream, allowing any samples remaining in the output queue to be played. //! Stop a stream, allowing any samples remaining in the output queue to be played.
/*! /*!
An RtError (type = SYSTEM_ERROR) is thrown if an error occurs
during processing. An RtError (type = INVALID_USE) is thrown if a
An RtAudioError (type = SYSTEM_ERROR) is thrown if an error occurs
during processing. An RtAudioError (type = INVALID_USE) is thrown if a
stream is not open. A warning is issued if the stream is already stream is not open. A warning is issued if the stream is already
stopped. stopped.
*/ */
@@ -469,8 +520,8 @@ class RtAudio


//! Stop a stream, discarding any samples remaining in the input/output queue. //! Stop a stream, discarding any samples remaining in the input/output queue.
/*! /*!
An RtError (type = SYSTEM_ERROR) is thrown if an error occurs
during processing. An RtError (type = INVALID_USE) is thrown if a
An RtAudioError (type = SYSTEM_ERROR) is thrown if an error occurs
during processing. An RtAudioError (type = INVALID_USE) is thrown if a
stream is not open. A warning is issued if the stream is already stream is not open. A warning is issued if the stream is already
stopped. stopped.
*/ */
@@ -484,7 +535,7 @@ class RtAudio


//! Returns the number of elapsed seconds since the stream was started. //! Returns the number of elapsed seconds since the stream was started.
/*! /*!
If a stream is not open, an RtError (type = INVALID_USE) will be thrown.
If a stream is not open, an RtAudioError (type = INVALID_USE) will be thrown.
*/ */
double getStreamTime( void ); double getStreamTime( void );


@@ -494,7 +545,7 @@ class RtAudio
caused by internal buffering by the audio system and/or hardware. caused by internal buffering by the audio system and/or hardware.
For duplex streams, the returned value will represent the sum of For duplex streams, the returned value will represent the sum of
the input and output latencies. If a stream is not open, an the input and output latencies. If a stream is not open, an
RtError (type = INVALID_USE) will be thrown. If the API does not
RtAudioError (type = INVALID_USE) will be thrown. If the API does not
report latency, the return value will be zero. report latency, the return value will be zero.
*/ */
long getStreamLatency( void ); long getStreamLatency( void );
@@ -503,7 +554,7 @@ class RtAudio
/*! /*!
On some systems, the sample rate used may be slightly different On some systems, the sample rate used may be slightly different
than that specified in the stream parameters. If a stream is not than that specified in the stream parameters. If a stream is not
open, an RtError (type = INVALID_USE) will be thrown.
open, an RtAudioError (type = INVALID_USE) will be thrown.
*/ */
unsigned int getStreamSampleRate( void ); unsigned int getStreamSampleRate( void );


@@ -731,13 +782,13 @@ protected:
void clearStreamInfo(); void clearStreamInfo();


/*! /*!
Protected common method that throws an RtError (type =
Protected common method that throws an RtAudioError (type =
INVALID_USE) if a stream is not open. INVALID_USE) if a stream is not open.
*/ */
void verifyStream( void ); void verifyStream( void );


//! Protected common error method to allow global control over error handling. //! Protected common error method to allow global control over error handling.
void error( RtError::Type type );
void error( RtAudioError::Type type );


/*! /*!
Protected method used to perform format, channel number, and/or interleaving Protected method used to perform format, channel number, and/or interleaving
@@ -1031,7 +1082,7 @@ class RtApiDummy: public RtApi
{ {
public: public:


RtApiDummy() { errorText_ = "RtApiDummy: This class provides no functionality."; error( RtError::WARNING ); }
RtApiDummy() { errorText_ = "RtApiDummy: This class provides no functionality."; error( RtAudioError::WARNING ); }
RtAudio::Api getCurrentApi( void ) { return RtAudio::RTAUDIO_DUMMY; } RtAudio::Api getCurrentApi( void ) { return RtAudio::RTAUDIO_DUMMY; }
unsigned int getDeviceCount( void ) { return 0; } unsigned int getDeviceCount( void ) { return 0; }
RtAudio::DeviceInfo getDeviceInfo( unsigned int /*device*/ ) { RtAudio::DeviceInfo info; return info; } RtAudio::DeviceInfo getDeviceInfo( unsigned int /*device*/ ) { RtAudio::DeviceInfo info; return info; }
@@ -1050,60 +1101,6 @@ public:


#endif #endif


/************************************************************************/
/*! \class RtError
\brief Exception handling class for RtAudio & RtMidi.

The RtError class is quite simple but it does allow errors to be
"caught" by RtError::Type. See the RtAudio and RtMidi
documentation to know which methods can throw an RtError.

*/
/************************************************************************/

class RtAudioError : public std::exception
{
public:
//! Defined RtAudioError types.
enum Type {
WARNING, /*!< A non-critical error. */
DEBUG_WARNING, /*!< A non-critical error which might be useful for debugging. */
UNSPECIFIED, /*!< The default, unspecified error type. */
NO_DEVICES_FOUND, /*!< No devices found on system. */
INVALID_DEVICE, /*!< An invalid device ID was specified. */
MEMORY_ERROR, /*!< An error occured during memory allocation. */
INVALID_PARAMETER, /*!< An invalid parameter was specified to a function. */
INVALID_USE, /*!< The function was called incorrectly. */
DRIVER_ERROR, /*!< A system driver error occured. */
SYSTEM_ERROR, /*!< A system error occured. */
THREAD_ERROR /*!< A thread error occured. */
};

//! The constructor.
RtAudioError( const std::string& message, Type type = RtAudioError::UNSPECIFIED ) throw() : message_(message), type_(type) {}
//! The destructor.
virtual ~RtAudioError( void ) throw() {}

//! Prints thrown error message to stderr.
virtual void printMessage( void ) const throw() { std::cerr << '\n' << message_ << "\n\n"; }

//! Returns the thrown error message type.
virtual const Type& getType(void) const throw() { 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(); }

protected:
std::string message_;
Type type_;
};

#endif

#endif #endif


// Indentation settings for Vim and Emacs // Indentation settings for Vim and Emacs


Loading…
Cancel
Save