windows waveIn 录音

编写背景

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_);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值