LargeFileWaveOut.h
上传用户:goak128
上传日期:2013-07-17
资源大小:155k
文件大小:2k
- #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