LargeFileWaveOut.h
上传用户:goak128
上传日期:2013-07-17
资源大小:155k
文件大小:2k
源码类别:

控制台编程

开发平台:

C/C++

  1. #pragma once
  2. #include "filewaveout.h"
  3. #ifndef _LARGEWAVEOUT_H_
  4. #define _LARGEWAVEOUT_H_
  5. // 定义缓冲区中缓冲块个数
  6. #define LARGEWAVEOUT_BUFFER_NUMS 5
  7. // 定义默认的每个缓冲块中包含的样本数
  8. #define LARGEWAVEOUT_SAMPLES_PER_BLOCK 128
  9. //////////////////////////////////////////////////////////////////////////
  10. // 负责文件播放,裸音频数据用环形队列保存
  11. //
  12. // 功能: 实现内存中的裸音频数据的播放
  13. // 创建人: 陈文凯 (chwkai@gmail.com)
  14. // 创建日期:2005年5月30日
  15. // 修改人:
  16. // 修改日期:
  17. // 版本
  18. class CLargeFileWaveOut :
  19. public CFileWaveOut
  20. {
  21. public:
  22. CLargeFileWaveOut(void);
  23. ~CLargeFileWaveOut(void);
  24. protected:
  25. //////////////////////////////////////////////////////////////////////////
  26. // 打开输出设备,设置回调方式,并分配播放缓冲
  27. BOOL Init(WAVEFORMATEX fmt, DWORD hWnd);
  28. //////////////////////////////////////////////////////////////////////////
  29. // 清除缓冲区,初始化数据
  30. void Dispose();
  31. public:
  32. //////////////////////////////////////////////////////////////////////////
  33. // 设置缓冲块数量
  34. void SetBufferNums(UINT nCount);
  35. //////////////////////////////////////////////////////////////////////////
  36. // 处理WOM_DONE消息,继续播放下一个缓冲块
  37. LRESULT OnDone(DWORD dwParam);
  38. //////////////////////////////////////////////////////////////////////////
  39. // 设定每个缓冲块中保存的样本数
  40. void SetSamplesPerBlock(UINT nSamplesCount);
  41. //////////////////////////////////////////////////////////////////////////
  42. // 开始播放音频逻数据,发送第一个缓冲块
  43. void Start();
  44. //////////////////////////////////////////////////////////////////////////
  45. // 停止播放,关闭输出设备, UnPrepare缓冲块
  46. void Stop();
  47. private:
  48. DWORD m_dwBufferSize; // 缓存块大小,以byte为单位
  49. UINT m_nBufferNums; // 缓存块个数
  50. UINT m_nSamplesPerBlock; // 每个缓冲块中保存的样本数
  51. WAVEHDR* m_pAllocBuffer; // 缓冲区头指针
  52. WAVEHDR* m_pNextBuffer; // 待播放的缓冲块指针
  53. };
  54. #endif