www.pudn.com > hmmPlatform.rar > WaveIn.h


#pragma once 
 
#include 		// 包含音频处理API 
#include "WaveFile.h" 
 
////////////////////////////////////////////////////////////////////////// 
// 负责音频输入 
class CWaveIn 
{ 
public: 
	CWaveIn(WAVEFORMATEX fmt); 
	CWaveIn( 
		WORD wChannels /*声道数*/,  
		DWORD dwSamplesPerSec /*采样频率*/,  
		WORD wBitsPerSample /*位数*/, 
		WORD wFormatTag = WAVE_FORMAT_PCM /*Wave格式*/ 
		); 
 
	~CWaveIn(void); 
 
public: 
	BOOL Open();							// 打开输入设备 
	void Start();							// 开始录音 
	void Pause();							// 暂停录音 
	void Stop();							// 停止录音 
	void Close();							// 关闭输入设备 
	void SaveTo(LPCTSTR lpszFileName);		// 录音数据保存到wav文件 
	BOOL IsDevAvailable() const;			// 返回是否有可用的输入设备 
 
	// 消息处理函数 
private: 
	void OnData(); 
	void OnClose(); 
	void OnOpen(); 
 
private: 
	WAVEFORMATEX m_format;		// wav的格式 
	HWAVEIN m_hWaveIn;			// 所打开的输入设备的句柄 
	BOOL m_bOpen;				// 输入设备是否打开 
	BOOL m_bPaused;				// 当前状态是否暂停录音 
	BOOL m_bStoped;				// 当前状态是否停止录音 
	BOOL m_bStarted;			// 当前状态是否为正在录音 
 
	CString m_strLastErrText;	// 最后的错误信息 
	UINT m_nLastErr;			// 最后的错误代码 
 
	WAVEHDR m_waveHdr;			// 缓冲区 
	UINT m_nBufferSize;			// 缓冲区大小,以Sample Frame为单位 
	DWORD m_dwSize;				// 已经输入的数据大小,以Sample Frame为单位,不包括正在缓存的数据 
	CFile m_bufferFile;			// 用于缓存的文件,当缓冲区填满时数据保存至缓存文件 
};