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

控制台编程

开发平台:

C/C++

  1. //////////////////////////////////////////////////////////////////////////
  2. // class CWaveOut
  3. //
  4. // 功能: 语音播放的基类
  5. // 创建人: 陈文凯 (chwkai@gmail.com)
  6. // 创建日期:2005年5月19日
  7. // 修改人:
  8. // 修改日期:
  9. // 版本
  10. #ifndef _WAVEOUT_H_
  11. #define _WAVEOUT_H_
  12. #include <MMSystem.h> // 包含音频处理API
  13. #include "WaveFile.h"
  14. //////////////////////////////////////////////////////////////////////////
  15. // 负责音频输出
  16. class CWaveOut
  17. {
  18. public:
  19. CWaveOut(void);
  20. ~CWaveOut(void);
  21. protected:
  22. //////////////////////////////////////////////////////////////////////////
  23. // 打开输出设备,设置回调窗口,初始化参数
  24. virtual BOOL Init(
  25. WAVEFORMATEX fmt, /*wave format信息*/
  26. DWORD hWnd /*回调窗口*/
  27. );
  28. //////////////////////////////////////////////////////////////////////////
  29. // 关闭输出设备
  30. void CloseDev();
  31. //////////////////////////////////////////////////////////////////////////
  32. // 回收资源,派生类中实现分配资源的释放
  33. virtual void Dispose();
  34. public:
  35. //////////////////////////////////////////////////////////////////////////
  36. // 修改当前状态为playing。派生类中实现第一个裸音频块的发送
  37. virtual void Start();
  38. //////////////////////////////////////////////////////////////////////////
  39. // 暂停播放,修改状态为paused
  40. void Pause();
  41. //////////////////////////////////////////////////////////////////////////
  42. // 恢复播放,修改状态为playing
  43. void Resume();
  44. //////////////////////////////////////////////////////////////////////////
  45. // 停止播放。派生类中实现WAVEHDR的Unprepare
  46. virtual void Stop();
  47. //////////////////////////////////////////////////////////////////////////
  48. // 处理WOM_DONE消息,继续播放下一个缓冲块
  49. virtual LRESULT OnDone(DWORD dwParam) = 0;
  50. private:
  51. //////////////////////////////////////////////////////////////////////////
  52. // 是否存在可用的输出设备
  53. BOOL IsDevAvailable() const;
  54. protected:
  55. WAVEFORMATEX m_format; // wave的格式
  56. HWAVEOUT m_hWaveOut; // 所打开的输出设备的句柄
  57. private:
  58. DWORD m_hWnd; // 保存回调窗口的句柄
  59. BOOL m_bPaused; // 当前状态是否暂停播放
  60. BOOL m_bPlaying; // 当前状态是否为正在播放
  61. };
  62. #endif /*_WAVEOUT_H_*/