MusicKit
0.0.0
|
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