c++实现waveinopen录音功能

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 这是一个简单的C++示例,使用 `waveInOpen`函数来录制音频数据,然后通过回调函数 `waveInProc`处理录音数据。需要注意的是,实际使用中可能需要更多的错误处理和资源管理。同时,这个示例是基于Windows的,使用了Windows Multimedia API来进行音频录制。买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云

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

目录
相关文章
|
2月前
文字转语音后的音频结束以后,再播放一段时间的背景音乐。什么方案能实现
【2月更文挑战第13天】文字转语音后的音频结束以后,再播放一段时间的背景音乐。什么方案能实现
16 2
|
8月前
|
JavaScript API
uniapp实现录音功能和播放功能
uniapp实现录音功能和播放功能
|
5月前
uniapp制作录音播放功能
uniapp制作录音播放功能
75 0
|
5月前
|
存储
uniapp录音功能和音频播放功能制作
uniapp录音功能和音频播放功能制作
147 0
|
9月前
|
前端开发 JavaScript
uniapp 录音和播放功能
uniapp 录音和播放功能
226 0
|
存储 视频直播
FreeSwitch中的录像和录音设置
FreeSwitch中的录像和录音设置
|
Web App开发 Java API
浅析webrtc中音频的录制和播放流程
本文是基于PineAppRtc项目github.com/thfhongfeng… 在webrtc中音频的录制和播放都是封装在内部,一般情况下我们也不需要关注,直接使用即可。 但是最近有一个需求,需要将我们自己的数据进行传输,所以就需要将这些接口暴露出来使用。所以就需要去研究一下它的源码,就有了这篇文章。
762 0
Andorid通话自动录音
Andorid通话自动录音
148 0
Andorid通话自动录音
|
Web App开发 API

热门文章

最新文章