MusicKit  0.0.0
AudOut.h
00001 
00002 //
00003 // CAudOut - Audio streaming base class
00004 //  |
00005 //  +- CAudOutWO 
00006 //  +- CAudOutDX
00007 //
00008 // SKoT McDonald / Vellocet
00009 // skot@vellocet.ii.net
00010 // (c) 1999 Vellocet 
00011 // All rights reserved.
00012 //
00013 // Last change: 14 July 1999
00014 //
00016 
00017 #ifndef __VELLOCET_AUDOUT_H
00018 #define __VELLOCET_AUDOUT_H
00019 
00020 #include "dsound.h"
00021 
00023 
00024 class CAudOut
00025 {
00026 public:
00027 
00028   // Constant values
00029 
00030   enum
00031   {
00032     maxBuffers     = 16,  
00033     maxBufferSize  = 4096, 
00034     defFormat      = WAVE_FORMAT_PCM,
00035     defNumChans    = 2,
00036     defNumBuffers  = 4,
00037     defBufferSize  = 440, // ~ 1/100 of a sec
00038     defSamRate     = 44100,
00039     defBitsPerSam  = 16
00040   };
00041 
00042   enum audioMode
00043   {
00044     modeNone       = 0, // base class
00045     waveOut        = 1, // CAudOutWO
00046     directX        = 2, // CAudOutDX
00047     rewire         = 3, // not implemented yet
00048     cubaseVST      = 4, // not implemented yet
00049     lastMode       = 5
00050   };
00051 
00052   enum audPriority
00053   {
00054     audpriorityMin      = 0,
00055     audpriorityIdle     = 0,
00056     audpriorityLowest   = 1,
00057     audpriorityLow      = 2,
00058     audpriorityNormal   = 3,
00059     audpriorityHigh     = 4,
00060     audpriorityHighest  = 5,
00061     audpriorityTimeCrit = 6,
00062     audpriorityMax      = 6
00063   };
00064   // Error codes
00065 
00066   enum audioError 
00067   {
00068     err_none            = 0,
00069     err_badAlloc        = 1,
00070     err_notInit         = 2,
00071     err_badParam        = 3,
00072     err_notWhileActive  = 4,
00073     err_badDevID        = 5,
00074     err_badGenAudioPtr  = 6,
00075     err_badObjectState  = 7,
00076     err_alreadyInit     = 8
00077   };
00078 
00079 protected:
00080 
00081   bool          m_bInit;
00082   DWORD         m_dwMode;
00083   CString       m_errstr;
00084   bool          m_bActive;
00085 
00086   WAVEFORMATEX  m_wfx;
00087   long          m_err;
00088   short         m_iCurDev;
00089   DWORD         m_dwNumDev;
00090   DWORD         m_dwBufferSize; // in bytes
00091   DWORD         m_dwNumBuffers;
00092   DWORD         m_dwNumSamples;
00093   float       **m_ppfGenBuffer; // the float based generation buffer
00094   void         (*m_GenAudio)(float**,DWORD,DWORD,DWORD);  
00095   DWORD         m_dwGenAudioData;
00096 
00097   HANDLE        m_hAudThread;
00098   short         m_iAudThreadPriority;
00099 
00101 // METHODS
00103 
00104 protected:
00105 
00106   bool PackOutput  (float** input, void* output); 
00107   bool Open        (short dwDevID);
00108   bool FreeBuffers (void);
00109 
00110 public:
00111 
00112   CAudOut();
00113   ~CAudOut();
00114 
00115   virtual bool  Initialise (void (*GenAudio)(float**, DWORD, DWORD, DWORD), 
00116                             DWORD dwGenAudioData);
00117   virtual char* GetDevName (DWORD n) = 0; // pure virtual!
00118   virtual bool  Start(void) = 0;          // pure virtual!
00119   void          Stop(void);
00120 
00121   virtual bool  AllocateBuffers (DWORD dwNumBuffers, DWORD dwBufferSize);
00122 
00123   void SetGenAudioData (DWORD dwI) { m_dwGenAudioData = dwI;};
00124   bool SetGenAudio     (void (*GenAudio)(float**, DWORD, DWORD, DWORD));
00125   bool SetCurDev       (short iDevID);
00126   bool SetSampleRate   (DWORD r);
00127 
00128   bool  SetAudThreadPriority (short p);
00129   short GetAudThreadPriority (void);
00130 
00131   CString GetErrMsg    (void);
00132   void GetErrMsg       (char* pchErrText, DWORD len);
00133 
00134   inline short   GetCurDev(void)         { return m_iCurDev;            };
00135   inline DWORD   GetSampleRate(void)     { return m_wfx.nSamplesPerSec; };
00136   inline DWORD   GetMode(void)           { return m_dwMode;             };
00137   inline DWORD   NumDev()                { return m_dwNumDev;           };
00138   inline bool    IsInit(void)            { return m_bInit;              };
00139   inline bool    IsActive(void)          { return m_bActive;            };
00140   inline DWORD   NumBuffers(void)        { return m_dwNumBuffers;       };
00141   inline DWORD   NumChans(void)          { return m_wfx.nChannels;      };
00142   inline DWORD   BufferSizeBytes(void)   { return m_dwBufferSize;       };
00143   inline DWORD   BufferSizeSamples(void) { return m_dwNumSamples;       };
00144 };
00145 
00147 
00148 #endif