www.pudn.com > waveinFFT_demo.zip > Recorder.h


// Recorder.h: interface for the CRecorder class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_RECORDER_H__0ADF01BB_785C_4FA5_B241_3E9D26B90EC9__INCLUDED_) 
#define AFX_RECORDER_H__0ADF01BB_785C_4FA5_B241_3E9D26B90EC9__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
#include  
#pragma comment(lib,"winmm.lib") 
 
typedef struct _PCMFORMAT 
{ 
	WORD    wBitsPerSample;//no.of bits per sample for Recording  
	WORD	wChannels;//no.of channels for Recording 
	DWORD	dwSampleRate;//Sampling rate for Recording 
}PCMFORMAT, *LPPCMFORMAT; 
struct WAVECLASS 
{ 
	HWAVE hWave; 
	void* lpData; 
}; 
 
#define MAXNUMOFBUFFER 16 
 
typedef BOOL (*ProcessBuffer)(void* lpData, LPWAVEHDR pwh); 
 
class Recorder 
{ 
public: 
	Recorder(int nBufferLength=2048); 
	Recorder(PCMFORMAT pcm,int nBufferLength=2048); 
	Recorder(WORD wBitsPerSample,WORD wChannels,DWORD dwSampleRate,int nBufferLength=2048); 
	virtual ~Recorder(); 
	void Open(DWORD dwCallBack=NULL,DWORD dwCallbackType=CALLBACK_FUNCTION,MCIDEVICEID wMCIDeviceID=WAVE_MAPPER); 
	void Close(); 
	void Start(); 
	void Stop(); 
	void ProcessNextBuffer(LPWAVEHDR pwh); 
	void SetFormat(LPPCMFORMAT lpPcmFormat); 
	void SetFormat(WORD wBitsPerSample,WORD wChannels,DWORD dwSampleRate); 
	BOOL IsRecording(); 
	BOOL IsDeviceOpen(); 
	void SetBufferFunction(void* lpData, ProcessBuffer fnProcess) { m_lpData = lpData, fnProcessBuffer = fnProcess; } 
	DWORD GetPosition(); 
	BOOL Pause(); 
	BOOL Continue(); 
	BOOL IsFormatSupported(WAVEFORMATEX wfEx, UINT nDev=WAVE_MAPPER); 
	HANDLE m_hEvent; 
	LPWAVEHDR m_lpWaveHdr; 
protected: 
	void* m_lpData; 
	HANDLE m_hThread; 
	ProcessBuffer fnProcessBuffer; 
	WAVECLASS m_waveClass; 
	GLOBALHANDLE m_hWaveInHdr[MAXNUMOFBUFFER]; 
	LPWAVEHDR m_lpWaveInHdr[MAXNUMOFBUFFER]; 
	GLOBALHANDLE m_hInBuffer[MAXNUMOFBUFFER]; 
	LPBYTE m_lpInBuffer [MAXNUMOFBUFFER]; 
	PCMFORMAT m_PcmFormat; 
	WAVEFORMATEX m_WaveFormat; 
	HWAVEIN m_hWaveIn; 
	BOOL m_bRecording; 
	BOOL m_bDeviceOpen; 
	DWORD m_dwBufferSize; 
}; 
 
#endif // !defined(AFX_RECORDER_H__0ADF01BB_785C_4FA5_B241_3E9D26B90EC9__INCLUDED_)