c++实现waveinopen录音功能
以下是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来进行音频录制。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号