// WaveAudioSink.h: interface for the WaveAudioSink class. // ////////////////////////////////////////////////////////////////////// #ifndef AFX_WAVEAUDIOSINK_H__82B1217D_28FD_4C8A_B8FA_ADF13478A7CF__INCLUDED_ #define AFX_WAVEAUDIOSINK_H__82B1217D_28FD_4C8A_B8FA_ADF13478A7CF__INCLUDED_ #include #include #include #include "AudioSink.h" #include "Parameters.h" class WaveAudioSink : public AudioSink { public: WaveAudioSink(); virtual ~WaveAudioSink(); virtual int SinkStarted(); virtual int SinkStopped(); virtual int SinkThreadStarted(HANDLE sinkThreadHandle, DWORD sinkThreadID); virtual int SinkThreadStopped(HANDLE sinkThreadHandle, DWORD sinkThreadID); int SetVolume(unsigned long volume); int SetDeviceID(unsigned int deviceID); unsigned int GetDeviceID(); int SetFrameSize(unsigned long size); int SetNumFrames(unsigned long numFrames); int SetFormat(int waveFormatNumber); protected: virtual int RenderAudioSamples(std::vector > &data); virtual int SetTraceLevel(); private: int BeginAudioRender(); int EndAudioRender(); int ResetAudioRender(); WAVEHDR *GetBuffer(); static void CALLBACK SpeakerCallback(HWAVEOUT hWaveOut, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2); private: bool enabled; bool bRunning; unsigned long frameSize; unsigned long numFrames; unsigned int waveoutDeviceID; HANDLE dataEvent; HWAVEOUT hWaveOut; WAVEHDR waveHdr[WAVESINK_MAX_WAVEHDR]; WAVEFORMATEX wfx; char dataBuffer[WAVESINK_MAX_WAVEHDR][WAVESINK_MAX_WAVEHDR_SIZE]; std::list freeBuffers; HANDLE pauseEvent; CRITICAL_SECTION dataMutex; CRITICAL_SECTION freeBuffersMutex; CRITICAL_SECTION filterMutex; }; #endif // !defined(AFX_WAVEAUDIOSINK_H__82B1217D_28FD_4C8A_B8FA_ADF13478A7CF__INCLUDED_)