?? wavein.h
字號:
/*------------------------------------------------------------------------------*\
[模塊名稱]
CWaveIn
[文件名稱]
WaveIn.h
[相關文件]
WaveIn.cpp
[目的]
方便音頻采集
[描述]
封裝 wavein api
只使用了 pcm 方式
只使用 函數回調方式
所有的設置屬性的函數只應在錄音前使用,否者會在下次錄音時才生效
應該重載 virtual void GetData(char *pBuffer,int iLen);
[注意]
對于 StartRecord 中的PerPareBuffer() OpenRecord()是乎應該同時調用,
要么就都不調用,其原因好象是 waveInAddBuffer 之后必須 使用saveInStart
否則好象不能關閉設備
SIZE_AUDIO_FRAME 是 160 倍數
SIZE_AUDIO_PACKED 是 對應的輸出 為 SIZE_AUDIO_FRAME / 160 * 10
關閉的時候注意,在closerecord后有可能線程中還有數據到來,導致關閉不正確,所以關閉的時候sleep(1000),詳細原因我也不太清楚
[依賴性]
Winmm.lib
[版權]
2002.12 hb 版權所有
[修改記錄]
版本: 1.01.01
日期: 02-12-13 ~ 02-12-16
作者: hb
Mial: sendh@21cn.com
備注:
\*------------------------------------------------------------------------------*/
#ifndef _WAVEIN_H_
#define _WAVEIN_H_
#define WISA_POOR 8000
#define WISA_LOW 11025
#define WISA_NORMAL 22050
#define WISA_HIGH 44100
#define NUM_BUF 10
#define SIZE_AUDIO_FRAME 960
#define SIZE_AUDIO_PACKED 60
#include <mmsystem.h>
class CWaveIn
{
public:
static DWORD WINAPI AudioInThreadProc(LPVOID lpParameter);
public:
virtual void GetData(char *pBuffer,int iLen);
BOOL StartRec();
BOOL StopRec();
inline DWORD GetInstance();
inline WORD GetBit();
inline DWORD GetSample();
inline WORD GetChannel();
inline void SetBit(WORD wBit);
inline void SetSample(DWORD dwSample);
inline void SetChannel(WORD wChannel);
inline MMRESULT GetLastMMError();
CString GetLastErrorString();
CWaveIn();
virtual ~CWaveIn();
protected:
BOOL OpenDev();
BOOL CloseDev();
BOOL StopThread();
BOOL StartThread();
BOOL PerPareBuffer();
BOOL FreeBuffer();
BOOL OpenRecord();
BOOL CloseRecord();
protected:
static DWORD s_dwInstance;
protected:
WORD m_wChannel;
DWORD m_dwSample;
WORD m_wBit;
protected:
HWAVEIN m_hIn;
MMRESULT m_mmr;
DWORD m_dwAudioInId;
HANDLE m_hAudioIn;
WAVEHDR* m_pHdr;
BOOL m_bThreadStart;
BOOL m_bDevOpen;
BOOL m_bAllocBuffer;
BOOL m_bRecord;
};
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -