以下是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来进行音频录制。


香港五网CN2网络云服务器链接:www.tsyvps.com

蓝易云香港五网CN2 GIA/GT精品网络服务器。拒绝绕路,拒绝不稳定。

蓝易云是一家专注于香港及国内数据中心服务的提供商,提供高质量的服务器租用和云计算服务、包括免备案香港服务器、香港CN2、美国服务器、海外高防服务器、国内高防服务器、香港VPS等。致力于为用户提供稳定,快速的网络连接和优质的客户体验。
最后修改:2023 年 08 月 18 日
如果觉得我的文章对你有用,请随意赞赏