Qt6.8 使用QAudioBufferInput 录制网络PCM语音流成文件

1 相关参数

PCM 音频参数: 8K 16位 单声道

Qt版本:6.8及以上

录制的文件: wave格式

2 使用到的Qt类

缓存输入类:QAudioBufferInput (QAudioBufferInput 仅支持 FFmpeg 后端。)

桥接器:QMediaCaptureSession

录制器:QMediaRecorder

声音缓存类: QAudioBuffer

这些类的详细资料可以在这里查看:https://doc.qt.io/qt-6/zh/qaudiobufferinput.html

3 初始化各种类

cpp 复制代码
    QMediaRecorder  *m_audioRecorder=nullptr; //录音器(最终写文件)
    
    QAudioBufferInput *audioBufferInput;//语音数据输入缓存

    QMediaCaptureSession *m_captureSession;

    QAudioFormat outputAudioFormat;
cpp 复制代码
    outputAudioFormat.setSampleRate(8000); //设置采样率以对赫兹采样。 以秒为单位,每秒采集多少声音数据的频率.
    outputAudioFormat.setChannelCount(1);   //将通道数设置为通道。
    outputAudioFormat.setSampleFormat(QAudioFormat::Int16);

    RecordStarted=false;

    m_captureSession=new QMediaCaptureSession();
    m_audioRecorder= new QMediaRecorder(); //创建录音器
    m_captureSession->setRecorder(m_audioRecorder); // 桥接录制器

    audioBufferInput =new QAudioBufferInput();//创建声音输入缓存

    m_captureSession->setAudioBufferInput(audioBufferInput);  // 桥接音频输入缓存

4 开始录音

cpp 复制代码
            //设置输出文件
            m_audioRecorder->setOutputLocation(QUrl::fromLocalFile(QString::fromStdString(recordFilePath)));
 
            QMediaFormat format;
            format.setFileFormat(QMediaFormat::FileFormat::Wave );
            format.setAudioCodec(QMediaFormat::AudioCodec::Wave );
            m_audioRecorder->setMediaFormat(format);

            m_audioRecorder->setAudioSampleRate(8000);
            m_audioRecorder->setAudioChannelCount(1);
            m_audioRecorder->setAudioBitRate(96000);
            m_audioRecorder->setQuality(QMediaRecorder::Quality::NormalQuality);
            m_audioRecorder->setEncodingMode(QMediaRecorder::ConstantBitRateEncoding);

            m_audioRecorder->record(); //开始录音
            qDebug()<<"+++录音开始+++";

5 写入网络PCM数据

cpp 复制代码
   QAudioBuffer audioBuffer =QAudioBuffer(Chunk,outputAudioFormat);

    bool ret= audioBufferInput->sendAudioBuffer(audioBuffer);
    //qDebug() <<ret;

6 停止录音

cpp 复制代码
        qDebug() <<"+++停止录音+++" ;
        m_audioRecorder->stop();
相关推荐
女神下凡4 小时前
带NPU的电脑 和不带NPU的电脑 在使用上有什么不样
arm开发·单片机·pcm
STQY燊桐启元(深圳)电子科技13 天前
太阳能追踪设备散热优化,相变陶瓷片解决全日照高温积温故障
经验分享·笔记·pcm
STQY燊桐启元(深圳)电子科技17 天前
耐高温工况专项适配:相变陶瓷片如何突破高温工业设备散热瓶颈
经验分享·笔记·pcm
STQY燊桐启元(深圳)电子科技17 天前
工业物联网网关散热升级,相变陶瓷片解决微型设备积温过热难题
经验分享·笔记·pcm
STQY燊桐启元(深圳)电子科技18 天前
大功率储能PCS散热升级,ST-PCM180氮化铝相变陶瓷适配高密度热管理
经验分享·笔记·pcm
STQY燊桐启元(深圳)电子科技20 天前
免涂硅脂新时代,ST‑PCMTC96 与 ST‑PCM180 相变陶瓷片重构功率器件热管理
经验分享·笔记·重构·pcm
折枝吖25 天前
音视频开发-PCM 原理与 AI 模块实战
音视频·pcm
程序员老陆1 个月前
FFmpeg6 在 Windows 打开麦克风并录成 PCM:不走 Qt Multimedia,也不碰 WASAPI
windows·ffmpeg·音视频·pcm
PGCCC1 个月前
PostgreSQL 数据库认证体系技术解析:PCA / PCP / PCM 三级能力模型与考纲拆解
数据库·postgresql·pcm
砚凝霜2 个月前
软考网络工程师|第 2 章 信道延迟、传输介质、数据编码、数字调制、PCM 完整备考笔记
网络·笔记·pcm