Home   Class/Enum List   File List   Compound Members  

RtAudio.h

Go to the documentation of this file.
00001 /************************************************************************/
00039 /************************************************************************/
00040 
00045 // RtAudio: Version 4.0.11
00046 
00047 #ifndef __RTAUDIO_H
00048 #define __RTAUDIO_H
00049 
00050 #include <string>
00051 #include <vector>
00052 #include "RtError.h"
00053 
00072 typedef unsigned long RtAudioFormat;
00073 static const RtAudioFormat RTAUDIO_SINT8 = 0x1;    // 8-bit signed integer.
00074 static const RtAudioFormat RTAUDIO_SINT16 = 0x2;   // 16-bit signed integer.
00075 static const RtAudioFormat RTAUDIO_SINT24 = 0x4;   // Lower 3 bytes of 32-bit signed integer.
00076 static const RtAudioFormat RTAUDIO_SINT32 = 0x8;   // 32-bit signed integer.
00077 static const RtAudioFormat RTAUDIO_FLOAT32 = 0x10; // Normalized between plus/minus 1.0.
00078 static const RtAudioFormat RTAUDIO_FLOAT64 = 0x20; // Normalized between plus/minus 1.0.
00079 
00122 typedef unsigned int RtAudioStreamFlags;
00123 static const RtAudioStreamFlags RTAUDIO_NONINTERLEAVED = 0x1;    // Use non-interleaved buffers (default = interleaved).
00124 static const RtAudioStreamFlags RTAUDIO_MINIMIZE_LATENCY = 0x2;  // Attempt to set stream parameters for lowest possible latency.
00125 static const RtAudioStreamFlags RTAUDIO_HOG_DEVICE = 0x4;        // Attempt grab device and prevent use by others.
00126 static const RtAudioStreamFlags RTAUDIO_SCHEDULE_REALTIME = 0x8; // Try to select realtime scheduling for callback thread.
00127 static const RtAudioStreamFlags RTAUDIO_ALSA_USE_DEFAULT = 0x10; // Use the "default" PCM device (ALSA only).
00128 
00140 typedef unsigned int RtAudioStreamStatus;
00141 static const RtAudioStreamStatus RTAUDIO_INPUT_OVERFLOW = 0x1;    // Input data was discarded because of an overflow condition at the driver.
00142 static const RtAudioStreamStatus RTAUDIO_OUTPUT_UNDERFLOW = 0x2;  // The output buffer ran low, likely causing a gap in the output sound.
00143 
00145 
00183 typedef int (*RtAudioCallback)( void *outputBuffer, void *inputBuffer,
00184                                 unsigned int nFrames,
00185                                 double streamTime,
00186                                 RtAudioStreamStatus status,
00187                                 void *userData );
00188 
00189 
00190 // **************************************************************** //
00191 //
00192 // RtAudio class declaration.
00193 //
00194 // RtAudio is a "controller" used to select an available audio i/o
00195 // interface.  It presents a common API for the user to call but all
00196 // functionality is implemented by the class RtApi and its
00197 // subclasses.  RtAudio creates an instance of an RtApi subclass
00198 // based on the user's API choice.  If no choice is made, RtAudio
00199 // attempts to make a "logical" API selection.
00200 //
00201 // **************************************************************** //
00202 
00203 class RtApi;
00204 
00205 class RtAudio
00206 {
00207  public:
00208 
00210   enum Api {
00211     UNSPECIFIED,    
00212     LINUX_ALSA,     
00213     LINUX_PULSE,    
00214     LINUX_OSS,      
00215     UNIX_JACK,      
00216     MACOSX_CORE,    
00217     WINDOWS_ASIO,   
00218     WINDOWS_DS,     
00219     RTAUDIO_DUMMY   
00220   };
00221 
00223   struct DeviceInfo {
00224     bool probed;                  
00225     std::string name;             
00226     unsigned int outputChannels;  
00227     unsigned int inputChannels;   
00228     unsigned int duplexChannels;  
00229     bool isDefaultOutput;         
00230     bool isDefaultInput;          
00231     std::vector<unsigned int> sampleRates; 
00232     RtAudioFormat nativeFormats;  
00234     // Default constructor.
00235     DeviceInfo()
00236       :probed(false), outputChannels(0), inputChannels(0), duplexChannels(0),
00237        isDefaultOutput(false), isDefaultInput(false), nativeFormats(0) {}
00238   };
00239 
00241   struct StreamParameters {
00242     unsigned int deviceId;     
00243     unsigned int nChannels;    
00244     unsigned int firstChannel; 
00246     // Default constructor.
00247     StreamParameters()
00248       : deviceId(0), nChannels(0), firstChannel(0) {}
00249   };
00250 
00252 
00308   struct StreamOptions {
00309     RtAudioStreamFlags flags;      
00310     unsigned int numberOfBuffers;  
00311     std::string streamName;        
00312     int priority;                  
00314     // Default constructor.
00315     StreamOptions()
00316     : flags(0), numberOfBuffers(0), priority(0) {}
00317   };
00318 
00320 
00325   static void getCompiledApi( std::vector<RtAudio::Api> &apis ) throw();
00326 
00328 
00336   RtAudio( RtAudio::Api api=UNSPECIFIED ) throw();
00337 
00339 
00343   ~RtAudio() throw();
00344 
00346   RtAudio::Api getCurrentApi( void ) throw();
00347 
00349 
00354   unsigned int getDeviceCount( void ) throw();
00355 
00357 
00367   RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
00368 
00370 
00377   unsigned int getDefaultOutputDevice( void ) throw();
00378 
00380 
00387   unsigned int getDefaultInputDevice( void ) throw();
00388 
00390 
00427   void openStream( RtAudio::StreamParameters *outputParameters,
00428                    RtAudio::StreamParameters *inputParameters,
00429                    RtAudioFormat format, unsigned int sampleRate,
00430                    unsigned int *bufferFrames, RtAudioCallback callback,
00431                    void *userData = NULL, RtAudio::StreamOptions *options = NULL );
00432 
00434 
00438   void closeStream( void ) throw();
00439 
00441 
00447   void startStream( void );
00448 
00450 
00456   void stopStream( void );
00457 
00459 
00465   void abortStream( void );
00466 
00468   bool isStreamOpen( void ) const throw();
00469 
00471   bool isStreamRunning( void ) const throw();
00472 
00474 
00477   double getStreamTime( void );
00478 
00480 
00488   long getStreamLatency( void );
00489 
00491 
00496   unsigned int getStreamSampleRate( void );
00497 
00499   void showWarnings( bool value = true ) throw();
00500 
00501  protected:
00502 
00503   void openRtApi( RtAudio::Api api );
00504   RtApi *rtapi_;
00505 };
00506 
00507 // Operating system dependent thread functionality.
00508 #if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__)
00509   #include <windows.h>
00510   #include <process.h>
00511 
00512   typedef unsigned long ThreadHandle;
00513   typedef CRITICAL_SECTION StreamMutex;
00514 
00515 #elif defined(__LINUX_ALSA__) || defined(__LINUX_PULSE__) || defined(__UNIX_JACK__) || defined(__LINUX_OSS__) || defined(__MACOSX_CORE__)
00516   // Using pthread library for various flavors of unix.
00517   #include <pthread.h>
00518 
00519   typedef pthread_t ThreadHandle;
00520   typedef pthread_mutex_t StreamMutex;
00521 
00522 #else // Setup for "dummy" behavior
00523 
00524   #define __RTAUDIO_DUMMY__
00525   typedef int ThreadHandle;
00526   typedef int StreamMutex;
00527 
00528 #endif
00529 
00530 // This global structure type is used to pass callback information
00531 // between the private RtAudio stream structure and global callback
00532 // handling functions.
00533 struct CallbackInfo {
00534   void *object;    // Used as a "this" pointer.
00535   ThreadHandle thread;
00536   void *callback;
00537   void *userData;
00538   void *apiInfo;   // void pointer for API specific callback information
00539   bool isRunning;
00540 
00541   // Default constructor.
00542   CallbackInfo()
00543     :object(0), callback(0), userData(0), apiInfo(0), isRunning(false) {}
00544 };
00545 
00546 // **************************************************************** //
00547 //
00548 // RtApi class declaration.
00549 //
00550 // Subclasses of RtApi contain all API- and OS-specific code necessary
00551 // to fully implement the RtAudio API.
00552 //
00553 // Note that RtApi is an abstract base class and cannot be
00554 // explicitly instantiated.  The class RtAudio will create an
00555 // instance of an RtApi subclass (RtApiOss, RtApiAlsa,
00556 // RtApiJack, RtApiCore, RtApiDs, or RtApiAsio).
00557 //
00558 // **************************************************************** //
00559 
00560 #if defined( HAVE_GETTIMEOFDAY )
00561   #include <sys/time.h>
00562 #endif
00563 
00564 #include <sstream>
00565 
00566 class RtApi
00567 {
00568 public:
00569 
00570   RtApi();
00571   virtual ~RtApi();
00572   virtual RtAudio::Api getCurrentApi( void ) = 0;
00573   virtual unsigned int getDeviceCount( void ) = 0;
00574   virtual RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) = 0;
00575   virtual unsigned int getDefaultInputDevice( void );
00576   virtual unsigned int getDefaultOutputDevice( void );
00577   void openStream( RtAudio::StreamParameters *outputParameters,
00578                    RtAudio::StreamParameters *inputParameters,
00579                    RtAudioFormat format, unsigned int sampleRate,
00580                    unsigned int *bufferFrames, RtAudioCallback callback,
00581                    void *userData, RtAudio::StreamOptions *options );
00582   virtual void closeStream( void );
00583   virtual void startStream( void ) = 0;
00584   virtual void stopStream( void ) = 0;
00585   virtual void abortStream( void ) = 0;
00586   long getStreamLatency( void );
00587   unsigned int getStreamSampleRate( void );
00588   virtual double getStreamTime( void );
00589   bool isStreamOpen( void ) const { return stream_.state != STREAM_CLOSED; };
00590   bool isStreamRunning( void ) const { return stream_.state == STREAM_RUNNING; };
00591   void showWarnings( bool value ) { showWarnings_ = value; };
00592 
00593 
00594 protected:
00595 
00596   static const unsigned int MAX_SAMPLE_RATES;
00597   static const unsigned int SAMPLE_RATES[];
00598 
00599   enum { FAILURE, SUCCESS };
00600 
00601   enum StreamState {
00602     STREAM_STOPPED,
00603     STREAM_STOPPING,
00604     STREAM_RUNNING,
00605     STREAM_CLOSED = -50
00606   };
00607 
00608   enum StreamMode {
00609     OUTPUT,
00610     INPUT,
00611     DUPLEX,
00612     UNINITIALIZED = -75
00613   };
00614 
00615   // A protected structure used for buffer conversion.
00616   struct ConvertInfo {
00617     int channels;
00618     int inJump, outJump;
00619     RtAudioFormat inFormat, outFormat;
00620     std::vector<int> inOffset;
00621     std::vector<int> outOffset;
00622   };
00623 
00624   // A protected structure for audio streams.
00625   struct RtApiStream {
00626     unsigned int device[2];    // Playback and record, respectively.
00627     void *apiHandle;           // void pointer for API specific stream handle information
00628     StreamMode mode;           // OUTPUT, INPUT, or DUPLEX.
00629     StreamState state;         // STOPPED, RUNNING, or CLOSED
00630     char *userBuffer[2];       // Playback and record, respectively.
00631     char *deviceBuffer;
00632     bool doConvertBuffer[2];   // Playback and record, respectively.
00633     bool userInterleaved;
00634     bool deviceInterleaved[2]; // Playback and record, respectively.
00635     bool doByteSwap[2];        // Playback and record, respectively.
00636     unsigned int sampleRate;
00637     unsigned int bufferSize;
00638     unsigned int nBuffers;
00639     unsigned int nUserChannels[2];    // Playback and record, respectively.
00640     unsigned int nDeviceChannels[2];  // Playback and record channels, respectively.
00641     unsigned int channelOffset[2];    // Playback and record, respectively.
00642     unsigned long latency[2];         // Playback and record, respectively.
00643     RtAudioFormat userFormat;
00644     RtAudioFormat deviceFormat[2];    // Playback and record, respectively.
00645     StreamMutex mutex;
00646     CallbackInfo callbackInfo;
00647     ConvertInfo convertInfo[2];
00648     double streamTime;         // Number of elapsed seconds since the stream started.
00649 
00650 #if defined(HAVE_GETTIMEOFDAY)
00651     struct timeval lastTickTimestamp;
00652 #endif
00653 
00654     RtApiStream()
00655       :apiHandle(0), deviceBuffer(0) { device[0] = 11111; device[1] = 11111; }
00656   };
00657 
00658   typedef signed short Int16;
00659   typedef signed int Int32;
00660   typedef float Float32;
00661   typedef double Float64;
00662 
00663   std::ostringstream errorStream_;
00664   std::string errorText_;
00665   bool showWarnings_;
00666   RtApiStream stream_;
00667 
00675   virtual bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
00676                                 unsigned int firstChannel, unsigned int sampleRate,
00677                                 RtAudioFormat format, unsigned int *bufferSize,
00678                                 RtAudio::StreamOptions *options );
00679 
00681   void tickStreamTime( void );
00682 
00684   void clearStreamInfo();
00685 
00690   void verifyStream( void );
00691 
00693   void error( RtError::Type type );
00694 
00699   void convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info );
00700 
00702   void byteSwapBuffer( char *buffer, unsigned int samples, RtAudioFormat format );
00703 
00705   unsigned int formatBytes( RtAudioFormat format );
00706 
00708   void setConvertInfo( StreamMode mode, unsigned int firstChannel );
00709 };
00710 
00711 // **************************************************************** //
00712 //
00713 // Inline RtAudio definitions.
00714 //
00715 // **************************************************************** //
00716 
00717 inline RtAudio::Api RtAudio :: getCurrentApi( void ) throw() { return rtapi_->getCurrentApi(); }
00718 inline unsigned int RtAudio :: getDeviceCount( void ) throw() { return rtapi_->getDeviceCount(); }
00719 inline RtAudio::DeviceInfo RtAudio :: getDeviceInfo( unsigned int device ) { return rtapi_->getDeviceInfo( device ); }
00720 inline unsigned int RtAudio :: getDefaultInputDevice( void ) throw() { return rtapi_->getDefaultInputDevice(); }
00721 inline unsigned int RtAudio :: getDefaultOutputDevice( void ) throw() { return rtapi_->getDefaultOutputDevice(); }
00722 inline void RtAudio :: closeStream( void ) throw() { return rtapi_->closeStream(); }
00723 inline void RtAudio :: startStream( void ) { return rtapi_->startStream(); }
00724 inline void RtAudio :: stopStream( void )  { return rtapi_->stopStream(); }
00725 inline void RtAudio :: abortStream( void ) { return rtapi_->abortStream(); }
00726 inline bool RtAudio :: isStreamOpen( void ) const throw() { return rtapi_->isStreamOpen(); }
00727 inline bool RtAudio :: isStreamRunning( void ) const throw() { return rtapi_->isStreamRunning(); }
00728 inline long RtAudio :: getStreamLatency( void ) { return rtapi_->getStreamLatency(); }
00729 inline unsigned int RtAudio :: getStreamSampleRate( void ) { return rtapi_->getStreamSampleRate(); };
00730 inline double RtAudio :: getStreamTime( void ) { return rtapi_->getStreamTime(); }
00731 inline void RtAudio :: showWarnings( bool value ) throw() { rtapi_->showWarnings( value ); }
00732 
00733 // RtApi Subclass prototypes.
00734 
00735 #if defined(__MACOSX_CORE__)
00736 
00737 #include <CoreAudio/AudioHardware.h>
00738 
00739 class RtApiCore: public RtApi
00740 {
00741 public:
00742 
00743   RtApiCore();
00744   ~RtApiCore();
00745   RtAudio::Api getCurrentApi( void ) { return RtAudio::MACOSX_CORE; };
00746   unsigned int getDeviceCount( void );
00747   RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
00748   unsigned int getDefaultOutputDevice( void );
00749   unsigned int getDefaultInputDevice( void );
00750   void closeStream( void );
00751   void startStream( void );
00752   void stopStream( void );
00753   void abortStream( void );
00754   long getStreamLatency( void );
00755 
00756   // This function is intended for internal use only.  It must be
00757   // public because it is called by the internal callback handler,
00758   // which is not a member of RtAudio.  External use of this function
00759   // will most likely produce highly undesireable results!
00760   bool callbackEvent( AudioDeviceID deviceId,
00761                       const AudioBufferList *inBufferList,
00762                       const AudioBufferList *outBufferList );
00763 
00764   private:
00765 
00766   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
00767                         unsigned int firstChannel, unsigned int sampleRate,
00768                         RtAudioFormat format, unsigned int *bufferSize,
00769                         RtAudio::StreamOptions *options );
00770   static const char* getErrorCode( OSStatus code );
00771 };
00772 
00773 #endif
00774 
00775 #if defined(__UNIX_JACK__)
00776 
00777 class RtApiJack: public RtApi
00778 {
00779 public:
00780 
00781   RtApiJack();
00782   ~RtApiJack();
00783   RtAudio::Api getCurrentApi( void ) { return RtAudio::UNIX_JACK; };
00784   unsigned int getDeviceCount( void );
00785   RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
00786   void closeStream( void );
00787   void startStream( void );
00788   void stopStream( void );
00789   void abortStream( void );
00790   long getStreamLatency( void );
00791 
00792   // This function is intended for internal use only.  It must be
00793   // public because it is called by the internal callback handler,
00794   // which is not a member of RtAudio.  External use of this function
00795   // will most likely produce highly undesireable results!
00796   bool callbackEvent( unsigned long nframes );
00797 
00798   private:
00799 
00800   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
00801                         unsigned int firstChannel, unsigned int sampleRate,
00802                         RtAudioFormat format, unsigned int *bufferSize,
00803                         RtAudio::StreamOptions *options );
00804 };
00805 
00806 #endif
00807 
00808 #if defined(__WINDOWS_ASIO__)
00809 
00810 class RtApiAsio: public RtApi
00811 {
00812 public:
00813 
00814   RtApiAsio();
00815   ~RtApiAsio();
00816   RtAudio::Api getCurrentApi( void ) { return RtAudio::WINDOWS_ASIO; };
00817   unsigned int getDeviceCount( void );
00818   RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
00819   void closeStream( void );
00820   void startStream( void );
00821   void stopStream( void );
00822   void abortStream( void );
00823   long getStreamLatency( void );
00824 
00825   // This function is intended for internal use only.  It must be
00826   // public because it is called by the internal callback handler,
00827   // which is not a member of RtAudio.  External use of this function
00828   // will most likely produce highly undesireable results!
00829   bool callbackEvent( long bufferIndex );
00830 
00831   private:
00832 
00833   std::vector<RtAudio::DeviceInfo> devices_;
00834   void saveDeviceInfo( void );
00835   bool coInitialized_;
00836   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
00837                         unsigned int firstChannel, unsigned int sampleRate,
00838                         RtAudioFormat format, unsigned int *bufferSize,
00839                         RtAudio::StreamOptions *options );
00840 };
00841 
00842 #endif
00843 
00844 #if defined(__WINDOWS_DS__)
00845 
00846 class RtApiDs: public RtApi
00847 {
00848 public:
00849 
00850   RtApiDs();
00851   ~RtApiDs();
00852   RtAudio::Api getCurrentApi( void ) { return RtAudio::WINDOWS_DS; };
00853   unsigned int getDeviceCount( void );
00854   unsigned int getDefaultOutputDevice( void );
00855   unsigned int getDefaultInputDevice( void );
00856   RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
00857   void closeStream( void );
00858   void startStream( void );
00859   void stopStream( void );
00860   void abortStream( void );
00861   long getStreamLatency( void );
00862 
00863   // This function is intended for internal use only.  It must be
00864   // public because it is called by the internal callback handler,
00865   // which is not a member of RtAudio.  External use of this function
00866   // will most likely produce highly undesireable results!
00867   void callbackEvent( void );
00868 
00869   private:
00870 
00871   bool coInitialized_;
00872   bool buffersRolling;
00873   long duplexPrerollBytes;
00874   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
00875                         unsigned int firstChannel, unsigned int sampleRate,
00876                         RtAudioFormat format, unsigned int *bufferSize,
00877                         RtAudio::StreamOptions *options );
00878 };
00879 
00880 #endif
00881 
00882 #if defined(__LINUX_ALSA__)
00883 
00884 class RtApiAlsa: public RtApi
00885 {
00886 public:
00887 
00888   RtApiAlsa();
00889   ~RtApiAlsa();
00890   RtAudio::Api getCurrentApi() { return RtAudio::LINUX_ALSA; };
00891   unsigned int getDeviceCount( void );
00892   RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
00893   void closeStream( void );
00894   void startStream( void );
00895   void stopStream( void );
00896   void abortStream( void );
00897 
00898   // This function is intended for internal use only.  It must be
00899   // public because it is called by the internal callback handler,
00900   // which is not a member of RtAudio.  External use of this function
00901   // will most likely produce highly undesireable results!
00902   void callbackEvent( void );
00903 
00904   private:
00905 
00906   std::vector<RtAudio::DeviceInfo> devices_;
00907   void saveDeviceInfo( void );
00908   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
00909                         unsigned int firstChannel, unsigned int sampleRate,
00910                         RtAudioFormat format, unsigned int *bufferSize,
00911                         RtAudio::StreamOptions *options );
00912 };
00913 
00914 #endif
00915 
00916 #if defined(__LINUX_PULSE__)
00917 
00918 class RtApiPulse: public RtApi
00919 {
00920 public:
00921   ~RtApiPulse();
00922   RtAudio::Api getCurrentApi() { return RtAudio::LINUX_PULSE; };
00923   unsigned int getDeviceCount( void );
00924   RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
00925   void closeStream( void );
00926   void startStream( void );
00927   void stopStream( void );
00928   void abortStream( void );
00929 
00930   // This function is intended for internal use only.  It must be
00931   // public because it is called by the internal callback handler,
00932   // which is not a member of RtAudio.  External use of this function
00933   // will most likely produce highly undesireable results!
00934   void callbackEvent( void );
00935 
00936   private:
00937 
00938   std::vector<RtAudio::DeviceInfo> devices_;
00939   void saveDeviceInfo( void );
00940   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
00941                         unsigned int firstChannel, unsigned int sampleRate,
00942                         RtAudioFormat format, unsigned int *bufferSize,
00943                         RtAudio::StreamOptions *options );
00944 };
00945 
00946 #endif
00947 
00948 
00949 #if defined(__LINUX_OSS__)
00950 
00951 class RtApiOss: public RtApi
00952 {
00953 public:
00954 
00955   RtApiOss();
00956   ~RtApiOss();
00957   RtAudio::Api getCurrentApi() { return RtAudio::LINUX_OSS; };
00958   unsigned int getDeviceCount( void );
00959   RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
00960   void closeStream( void );
00961   void startStream( void );
00962   void stopStream( void );
00963   void abortStream( void );
00964 
00965   // This function is intended for internal use only.  It must be
00966   // public because it is called by the internal callback handler,
00967   // which is not a member of RtAudio.  External use of this function
00968   // will most likely produce highly undesireable results!
00969   void callbackEvent( void );
00970 
00971   private:
00972 
00973   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
00974                         unsigned int firstChannel, unsigned int sampleRate,
00975                         RtAudioFormat format, unsigned int *bufferSize,
00976                         RtAudio::StreamOptions *options );
00977 };
00978 
00979 #endif
00980 
00981 #if defined(__RTAUDIO_DUMMY__)
00982 
00983 class RtApiDummy: public RtApi
00984 {
00985 public:
00986 
00987   RtApiDummy() { errorText_ = "RtApiDummy: This class provides no functionality."; error( RtError::WARNING ); };
00988   RtAudio::Api getCurrentApi( void ) { return RtAudio::RTAUDIO_DUMMY; };
00989   unsigned int getDeviceCount( void ) { return 0; };
00990   RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) { RtAudio::DeviceInfo info; return info; };
00991   void closeStream( void ) {};
00992   void startStream( void ) {};
00993   void stopStream( void ) {};
00994   void abortStream( void ) {};
00995 
00996   private:
00997 
00998   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
00999                         unsigned int firstChannel, unsigned int sampleRate,
01000                         RtAudioFormat format, unsigned int *bufferSize,
01001                         RtAudio::StreamOptions *options ) { return false; };
01002 };
01003 
01004 #endif
01005 
01006 #endif
01007 
01008 // Indentation settings for Vim and Emacs
01009 //
01010 // Local Variables:
01011 // c-basic-offset: 2
01012 // indent-tabs-mode: nil
01013 // End:
01014 //
01015 // vim: et sts=2 sw=2

©2001-2012 Gary P. Scavone, McGill University. All Rights Reserved.
Maintained by Gary P. Scavone.