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

控制台编程

开发平台:

C/C++

  1. #pragma once
  2. #include <MMSystem.h> // 包含音频处理API
  3. #include "WaveFile.h"
  4. //////////////////////////////////////////////////////////////////////////
  5. // 负责音频输入
  6. class CWaveIn
  7. {
  8. public:
  9. CWaveIn(WAVEFORMATEX fmt);
  10. CWaveIn(
  11. WORD wChannels /*声道数*/, 
  12. DWORD dwSamplesPerSec /*采样频率*/, 
  13. WORD wBitsPerSample /*位数*/,
  14. WORD wFormatTag = WAVE_FORMAT_PCM /*Wave格式*/
  15. );
  16. ~CWaveIn(void);
  17. public:
  18. BOOL Open(); // 打开输入设备
  19. void Start(); // 开始录音
  20. void Pause(); // 暂停录音
  21. void Stop(); // 停止录音
  22. void Close(); // 关闭输入设备
  23. void SaveTo(LPCTSTR lpszFileName); // 录音数据保存到wav文件
  24. BOOL IsDevAvailable() const; // 返回是否有可用的输入设备
  25. // 消息处理函数
  26. private:
  27. void OnData();
  28. void OnClose();
  29. void OnOpen();
  30. private:
  31. WAVEFORMATEX m_format; // wav的格式
  32. HWAVEIN m_hWaveIn; // 所打开的输入设备的句柄
  33. BOOL m_bOpen; // 输入设备是否打开
  34. BOOL m_bPaused; // 当前状态是否暂停录音
  35. BOOL m_bStoped; // 当前状态是否停止录音
  36. BOOL m_bStarted; // 当前状态是否为正在录音
  37. CString m_strLastErrText; // 最后的错误信息
  38. UINT m_nLastErr; // 最后的错误代码
  39. WAVEHDR m_waveHdr; // 缓冲区
  40. UINT m_nBufferSize; // 缓冲区大小,以Sample Frame为单位
  41. DWORD m_dwSize; // 已经输入的数据大小,以Sample Frame为单位,不包括正在缓存的数据
  42. CFile m_bufferFile; // 用于缓存的文件,当缓冲区填满时数据保存至缓存文件
  43. };