录音
1、初始化
memset(&hWaveIn, 0, sizeof(HWAVEIN));
memset(&waveForm, 0, sizeof(WAVEFORMATEX));
if (getAudioDevices()) //判断能否获取设备
{
//设置采样频率
setWaveFormat(&waveForm, 2, 44100, 16);
//初始化设备缓冲区
for (int i = 0; i < 2; ++i)
{
whdr[i].lpData = (CHAR*)malloc(bufLength);
memset(whdr[i].lpData, 0, bufLength);
whdr[i].dwBufferLength = bufLength; //缓冲区大小
whdr[i].dwBytesRecorded = 0; //已填充字节数,结束时未填充的自动处理
whdr[i].dwUser = 0; //用户自定义数据
whdr[i].dwFlags = 0; //用不着
whdr[i].dwLoops = 0; //用不着
whdr[i].lpNext = NULL; //用不着
whdr[i].reserved = 0; //用不着
}
}
bool InputSound::getAudioDevices()
{
//获取音频设备数量
int count = 0;
count = waveInGetNumDevs();
if (count == 0)
{
printf("未获取到音频设备,请检查设备\n");
return false;
}
printf("音频输入设备数据量:%d\n", count);
//获取设备的信息
WAVEINCAPS waveIncaps;
MMRESULT mmResult = waveInGetDevCaps(0, &waveIncaps, sizeof(WAVEINCAPS));
if (mmResult != MMSYSERR_NOERROR)
{
printf("获取设备信息异常\n");
return false;
}
//printf("音频输入设备:%s\n", waveIncaps.szP

本文详细介绍了如何使用Windows API进行录音和播放操作。在录音部分,包括初始化、设置参数、开始录音、回调处理及停止录音等步骤,强调了回调处理后的缓冲区清理。在播放环节,初始化阶段用dwUser作为播放状态标记,并提到了与录音相关的getAudioDevices()和setWaveFormat()函数的应用,以及开始播放和回调处理的实现。

2279

被折叠的 条评论
为什么被折叠?



