编写背景
windows xp 系统不支持 WASAPI,选择 waveIn API
1查找设备
// 获取音频设备数量
UINT count = waveInGetNumDevs();
if (count < 1) {
return ;
}
2.根据设备名称找到设备
// 获取设备信息
for (size_t i = 0; i < count; i++) {
WAVEINCAPSA wavein_caps;
MMRESULT mmres = waveInGetDevCapsA(i, &wavein_caps, sizeof(WAVEINCAPS));
if (MMSYSERR_NOERROR == mmres) {
// 根据设备名称确定打开的设备...
// wavein_caps.szPname
// if (...)
device_id_ = i;
}
}
3.打开设备
// 回调方法
static CALLBACK CallBack(HWAVEIN hWaveIn, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2) {
switch (uMsg) {
case WIM_OPEN:
break;
case WIM_DATA: {
LPWAVEHDR phdr = (LPWAVEHDR)dwParam1;
// TODO
// 如果关闭录音,不再填充缓冲区
// if (is_stop) { break; }
waveInPrepareHeader(hWaveIn, phdr, sizeof WAVEHDR);
waveInAddBuffer(hWaveIn, phdr, sizeof(WAVEHDR));
}
break;
case WIM_CLOSE:
break;
default: break;
}
return 0;
}
// 打开设备,回调的方式返回消息
MMRESULT mmres = waveInOpen(&wave_in_, device_id_ , &wave_formate_, (DWORD)(Callback), DWORD(this), CALLBACK_FUNCTION);
4.开始录音
MMRESULT mmres = waveInStart(wave_in_);
5.结束录音
MMRESULT mmres = waveInStop(wave_in_);
mmres = waveInReset(wave_in_);
mmres = waveInClose(wave_in_);