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