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();
相关推荐
REDcker4 天前
PCM与音量详解
pcm
碧海银沙音频科技研究院18 天前
音箱录音的pcm出现削波问题原因以及解决方法
pcm
Android系统攻城狮19 天前
Android tinyalsa深度解析之pcm_plugin_write调用流程与实战(一百七十九)
android·pcm·tinyalsa·android16·音频进阶·android音频进阶
zc.z21 天前
JAVA实现:纯PCM格式音频转换成BASE64
java·音视频·pcm
悠哉清闲23 天前
生成pcm文件并播放查看波形
java·pcm
Lucas_coding2 个月前
【语音相关】Opus编码器生命周期管理:从“有噪音“到“无噪音“的完美转换 [opus, pcm 转化电流音问题解决]
macos·xcode·pcm
Android系统攻城狮2 个月前
Android tinyalsa深度解析之pcm_params_get_periods_min调用流程与实战(一百七十三)
android·pcm·tinyalsa·音频进阶手册
@insist1232 个月前
网络工程师-信道容量计算与 PCM 编码:数据通信核心原理及软考考点解析
网络·网络工程师·pcm·软考·软件水平考试
Android系统攻城狮2 个月前
Android tinyalsa深度解析之pcm_plugin_open调用流程与实战(一百七十四)
android·pcm·tinyalsa·音频进阶手册
Android系统攻城狮2 个月前
Android tinyalsa深度解析之pcm_params_set_max调用流程与实战(一百七十)
android·pcm·tinyalsa·android音频进阶