// 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 <windows.h>
|
#include <mmsystem.h>
|
#include <list>
|
|
#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<std::pair<AudioSample *, AudioSource *> > &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<WAVEHDR*> freeBuffers;
|
HANDLE pauseEvent;
|
CRITICAL_SECTION dataMutex;
|
CRITICAL_SECTION freeBuffersMutex;
|
CRITICAL_SECTION filterMutex;
|
};
|
|
#endif // !defined(AFX_WAVEAUDIOSINK_H__82B1217D_28FD_4C8A_B8FA_ADF13478A7CF__INCLUDED_)
|