以下是C++使用 waveInOpen
录音功能的基本示例代码:
#include <windows.h>
#include <mmsystem.h>
// 回调函数,处理录音数据
void CALLBACK waveInProc(HWAVEIN hwi, UINT uMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2) {
if (uMsg == WIM_DATA) {
WAVEHDR* pWaveHdr = reinterpret_cast<WAVEHDR*>(dwParam1);
// 在这里处理录音数据,可以保存到文件或进行其他操作
// ...
// 准备好缓冲区,继续录音
waveInAddBuffer(hwi, pWaveHdr, sizeof(WAVEHDR));
}
}
int main() {
HWAVEIN hWaveIn;
WAVEFORMATEX wfx;
WAVEHDR whdr;
// 设置录音格式
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = 1;
wfx.nSamplesPerSec = 44100;
wfx.wBitsPerSample = 16;
wfx.nBlockAlign = wfx.nChannels * wfx.wBitsPerSample / 8;
wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign;
wfx.cbSize = 0;
// 打开录音设备
waveInOpen(&hWaveIn, WAVE_MAPPER, &wfx, (DWORD_PTR)waveInProc, 0, CALLBACK_FUNCTION);
// 准备录音缓冲区
whdr.lpData = new char[1024];
whdr.dwBufferLength = 1024;
whdr.dwBytesRecorded = 0;
whdr.dwUser = 0;
whdr.dwFlags = 0;
whdr.dwLoops = 0;
// 添加录音缓冲区
waveInPrepareHeader(hWaveIn, &whdr, sizeof(WAVEHDR));
waveInAddBuffer(hWaveIn, &whdr, sizeof(WAVEHDR));
// 开始录音
waveInStart(hWaveIn);
// 录音时间
Sleep(5000); // 录制5秒
// 停止录音
waveInStop(hWaveIn);
// 清理资源
waveInUnprepareHeader(hWaveIn, &whdr, sizeof(WAVEHDR));
delete[] whdr.lpData;
waveInClose(hWaveIn);
return 0;
}
这是一个简单的C++示例,使用 waveInOpen
函数来录制音频数据,然后通过回调函数 waveInProc
处理录音数据。需要注意的是,实际使用中可能需要更多的错误处理和资源管理。同时,这个示例是基于Windows的,使用了Windows Multimedia API来进行音频录制。