1 相关参数
PCM 音频参数: 8K 16位 单声道
Qt版本:6.8及以上
录制的文件: wave格式
2 使用到的Qt类
缓存输入类:QAudioBufferInput (QAudioBufferInput 仅支持 FFmpeg 后端。)
录制器: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();