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();
相关推荐
haiyaoyouyou3 小时前
Qt6.8 使用QAudioSink 播放网络PCM语音
pcm·qt6·qaudiosink
mftang3 小时前
MCU上应用的主流NVM技术: 嵌入式相变存储器(PCM) 和嵌入式磁阻随机存取存储器(MRAM)
单片机·嵌入式硬件·pcm
proware16 天前
3588 ES8388 PCM之需求分析
pcm·3588·es8388
Android系统攻城狮19 天前
Android tinyalsa深度解析之pcm_format_to_bits调用流程与实战(一百二十三)
android·pcm·tinyalsa·音频进阶·音频性能实战
Android系统攻城狮19 天前
Android tinyalsa深度解析之pcm_set_avail_min调用流程与实战(一百二十二)
android·pcm·tinyalsa·音频进阶·android hal·audio hal
Android系统攻城狮20 天前
Android tinyalsa深度解析之pcm_get_delay调用流程与实战(一百一十九)
android·pcm·tinyalsa·音频进阶·android hal·audio hal
Android系统攻城狮22 天前
Android tinyalsa深度解析之pcm_get_timestamp调用流程与实战(一百一十八)
android·pcm·tinyalsa·android hal·audio hal
Android系统攻城狮24 天前
Android tinyalsa深度解析之pcm_state调用流程与实战(一百一十七)
android·pcm·tinyalsa·音频进阶·音频性能实战
Android系统攻城狮25 天前
Android tinyalsa深度解析之pcm_get_available_min调用流程与实战(一百一十六)
android·pcm·tinyalsa·音频进阶·音频性能实战