00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
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
00029
00030 enum
00031 {
00032 maxBuffers = 16,
00033 maxBufferSize = 4096,
00034 defFormat = WAVE_FORMAT_PCM,
00035 defNumChans = 2,
00036 defNumBuffers = 4,
00037 defBufferSize = 440,
00038 defSamRate = 44100,
00039 defBitsPerSam = 16
00040 };
00041
00042 enum audioMode
00043 {
00044 modeNone = 0,
00045 waveOut = 1,
00046 directX = 2,
00047 rewire = 3,
00048 cubaseVST = 4,
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
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;
00091 DWORD m_dwNumBuffers;
00092 DWORD m_dwNumSamples;
00093 float **m_ppfGenBuffer;
00094 void (*m_GenAudio)(float**,DWORD,DWORD,DWORD);
00095 DWORD m_dwGenAudioData;
00096
00097 HANDLE m_hAudThread;
00098 short m_iAudThreadPriority;
00099
00101
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;
00118 virtual bool Start(void) = 0;
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