⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 waveaudiosink.h

📁 rtp在linux下的实现
💻 H
字号:
// 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_

#ifdef WIN32
#include <windows.h>
#include <mmsystem.h>
#else
#include "vtypes.h"
typedef struct w_tag {
    char* lpData;
    int32_t dwBufferLength;
    int32_t dwBytesRecord;
    int32_t dwUser;
    int32_t dwFlags;
    int32_t dwLoops;
    struct w_tag* lpNext;
    int32_t res;
} VWaveHdr;

#define WAVEHDR VWaveHdr
#endif
#include <list>

#include "AudioSink.h"
#include "Parameters.h"

class WaveAudioSink : public AudioSink
{
public:
	WaveAudioSink();
	virtual ~WaveAudioSink();
	virtual int StartSink();
	virtual int StopSink();
#ifdef WIN32
	virtual int SinkThreadStarted(HANDLE sinkThreadHandle, DWORD sinkThreadID);
	virtual int SinkThreadStopped(HANDLE sinkThreadHandle, DWORD sinkThreadID);
#else
	virtual int SinkThreadStarted(vthread_t sinkThreadHandle, DWORD sinkThreadID);
	virtual int SinkThreadStopped(vthread_t sinkThreadHandle, DWORD sinkThreadID);
#endif

	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();
#ifdef WIN32
	static void CALLBACK SpeakerCallback(HWAVEOUT hWaveOut, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2);
#endif

private:
	bool				enabled;
	bool				bRunning;
	unsigned long		frameSize;
	unsigned long		numFrames;
	unsigned int		waveoutDeviceID;
#ifdef WIN32
	HANDLE				dataEvent;
	HWAVEOUT			hWaveOut;
	HANDLE				pauseEvent;
#endif
	WAVEHDR				waveHdr[WAVESINK_MAX_WAVEHDR];
	WAVEFORMATEX		wfx;
	char				dataBuffer[WAVESINK_MAX_WAVEHDR][WAVESINK_MAX_WAVEHDR_SIZE];
	std::list<WAVEHDR*> freeBuffers;
	CRITICAL_SECTION	dataMutex;
	CRITICAL_SECTION	freeBuffersMutex;
	CRITICAL_SECTION	filterMutex;
};

#endif // !defined(AFX_WAVEAUDIOSINK_H__82B1217D_28FD_4C8A_B8FA_ADF13478A7CF__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -