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


/**********************************************************/ 
/*类名:CWaveIn                                           */ 
/*简述:封装的音频采集类                                  */ 
/**********************************************************/ 
// WaveIn.h: interface for the CWaveIn class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_WAVEIN_H__D485FF82_F8EF_40D6_8019_F468F0FE8A50__INCLUDED_) 
#define AFX_WAVEIN_H__D485FF82_F8EF_40D6_8019_F468F0FE8A50__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
#include  
#include  
#include "SendSocket.h" 
 
#define WISA_POOR	8000 
#define WISA_LOW	11025 
#define WISA_NORMAL	22050 
#define WISA_HIGH	44100 
 
#define SIZE_AUDIO_FRAME 960//音频块大小 
#define SIZE_AUDIO_PACKED 60 
 
class CWaveIn   
{ 
//////////////////////////////////////////////////// 
//成员函数 
public: 
	//音频初始化 
	BOOL Ini(); 
	BOOL Release(); 
 
	static DWORD WINAPI AudioInThreadProc(LPVOID lpParameter); 
 
	//错误处理 
	MMRESULT GetLastMMError(); 
	CString GetLastErrorString(); 
 
	//参数设定 
	inline void SetBit(WORD wBit); 
	inline void SetSample(DWORD dwSample); 
	inline void SetChannel(WORD wChannel); 
	inline void SetBuf_Number(int buf_number); 
 
	//参数查询 
	inline WORD GetBit(); 
	inline DWORD GetSample(); 
	inline WORD GetChannel(); 
	inline int GetBuf_Number(); 
	inline DWORD GetInstance(); 
     
	//转接口 
	virtual void GetData(char *pBuffer,int iLen); 
	void EnableSend(BOOL bSend); 
	 
	CWaveIn(CSendSocket *temp_socket,CNC_ClientDlg *temp); 
	virtual ~CWaveIn();	 
protected: 
	//线程处理 
	BOOL StopThread(); 
	BOOL StartThread(); 
	//设备处理 
	BOOL OpenDev(); 
	BOOL CloseDev(); 
	//缓冲区处理 
	BOOL PerPareBuffer(); 
	BOOL FreeBuffer(); 
	//采集控制 
	BOOL OpenRecord(); 
	BOOL CloseRecord(); 
////////////////////////////////////////////////////////// 
//成员变量 
protected: 
	CNC_ClientDlg *m_dlg; 
 
	WORD m_wChannel;//声道数 1/2 
	DWORD m_dwSample;//采样频率 8.0 kHz/11.025 kHz/22.05 kHz/44.1 kHz 
	WORD m_wBit;//存储位数 8/16 bit 
	int m_buf_number;//缓冲队列大小 
 
	static DWORD s_dwInstance; 
 
    HWAVEIN m_hIn; 
	MMRESULT m_mmr; 
	DWORD m_dwAudioInId; 
	HANDLE m_hAudioIn;//线程句柄 
	WAVEHDR* m_pHdr; 
	WAVEINCAPS m_WaveInDevCaps; 
 
	//信号量 
	BOOL m_bThreadStart; 
	BOOL m_bDevOpen; 
	BOOL m_bAllocBuffer; 
	BOOL m_bRecord; 
	BOOL m_bSend; 
 
	CCriticalSection m_soLock;//临界区 
	char m_cBufOut[60]; 
	CSendSocket *send_socket; 
 
	SHORT  InputBuffer[1024]; 
}; 
 
#endif // !defined(AFX_WAVEIN_H__D485FF82_F8EF_40D6_8019_F468F0FE8A50__INCLUDED_)