www.pudn.com > hmmPlatform.rar > LargeFileWaveOut.h


#pragma once 
#include "filewaveout.h" 
 
#ifndef _LARGEWAVEOUT_H_ 
#define _LARGEWAVEOUT_H_ 
 
// 定义缓冲区中缓冲块个数 
#define LARGEWAVEOUT_BUFFER_NUMS 5 
// 定义默认的每个缓冲块中包含的样本数 
#define LARGEWAVEOUT_SAMPLES_PER_BLOCK 128 
 
////////////////////////////////////////////////////////////////////////// 
// 负责文件播放,裸音频数据用环形队列保存 
// 
// 功能:	实现内存中的裸音频数据的播放 
// 创建人:	陈文凯 (chwkai@gmail.com) 
// 创建日期:2005年5月30日 
// 修改人: 
// 修改日期: 
// 版本 
class CLargeFileWaveOut : 
	public CFileWaveOut 
{ 
public: 
	CLargeFileWaveOut(void); 
	~CLargeFileWaveOut(void); 
 
protected: 
	////////////////////////////////////////////////////////////////////////// 
	// 打开输出设备,设置回调方式,并分配播放缓冲 
	BOOL Init(WAVEFORMATEX fmt, DWORD hWnd); 
 
	////////////////////////////////////////////////////////////////////////// 
	// 清除缓冲区,初始化数据 
	void Dispose(); 
 
public: 
	////////////////////////////////////////////////////////////////////////// 
	// 设置缓冲块数量 
	void SetBufferNums(UINT nCount); 
 
	////////////////////////////////////////////////////////////////////////// 
	// 处理WOM_DONE消息,继续播放下一个缓冲块 
	LRESULT OnDone(DWORD dwParam); 
 
	////////////////////////////////////////////////////////////////////////// 
	// 设定每个缓冲块中保存的样本数 
	void SetSamplesPerBlock(UINT nSamplesCount); 
 
	////////////////////////////////////////////////////////////////////////// 
	// 开始播放音频逻数据,发送第一个缓冲块 
	void Start(); 
 
	////////////////////////////////////////////////////////////////////////// 
	// 停止播放,关闭输出设备, UnPrepare缓冲块 
	void Stop(); 
 
private: 
	DWORD m_dwBufferSize;		// 缓存块大小,以byte为单位 
	UINT m_nBufferNums;			// 缓存块个数 
	UINT m_nSamplesPerBlock;	// 每个缓冲块中保存的样本数 
	WAVEHDR* m_pAllocBuffer;	// 缓冲区头指针 
	WAVEHDR* m_pNextBuffer;		// 待播放的缓冲块指针 
}; 
 
#endif