-
#include "audio.h"
//#include "qaudiodevice.h"
#include <QObject>
#include <QMediaRecorder>
#include <QMediaCaptureSession>
#include <QAudioInput>
#include <QFile>
#include <QMessageBox>
#include <QMediaDevices>
#include <QMediaFormat>
#include <QDebug>Audio::Audio(QObject *parent) : QObject(parent),
m_captureSession(new QMediaCaptureSession(this)),
m_mediaRecorder(new QMediaRecorder(this)),
m_audioInput(nullptr),
m_outputFile(nullptr)
{
}void Audio::startAudio(QString fileName)
{
// 获取默认的音频输入设备
//QList<QAudioDevice> audioInputs = QAudioDevice::availableDevices(QAudio::AudioInput);
QList<QAudioDevice> audioInputs = QMediaDevices::audioInputs();
//QMediaRecorder::supportedAudioSampleRates();if (audioInputs.isEmpty()) { QMessageBox::warning(nullptr, "QAudioDevice", "录音设备不存在"); } // 假设使用第一个音频输入设备 QAudioDevice audioDevice = audioInputs.first(); // 创建音频输入 m_audioInput = new QAudioInput(audioDevice, this); // 设置媒体捕获会话的音频输入 m_captureSession->setAudioInput(m_audioInput); // 设置输出文件名 m_outputFile = new QFile(fileName); // 初始化媒体录制器 m_mediaRecorder->setOutputLocation(QUrl::fromLocalFile(fileName)); // 设置音频编码器等 QAudioFormat format; format.setSampleRate(16000); // 设置采样率: 16000MHz format.setChannelCount(1); QMediaFormat f2; f2.setAudioCodec(QMediaFormat::AudioCodec::AAC); //format.setSampleSize(16); // 开始录制 if (!m_mediaRecorder->isAvailable()) { // 处理媒体录制器不可用的情况 qDebug() << "Media recorder is not available"<<m_mediaRecorder->errorString(); } // 尝试开始录制 m_mediaRecorder->record(); if (!m_outputFile->open(QIODevice::WriteOnly)) { // 打开输出文件失败 qDebug() << "Failed to open output file"; } // 检查状态或错误(这里没有直接的方法,但您可以监听状态改变信号) if (m_mediaRecorder->error()) { qDebug() << "Recording started"; }
}
void Audio::stopAudio()
{
m_mediaRecorder->stop();
m_outputFile->close();
delete m_outputFile;
m_outputFile=NULL;
}格式支持:pcm(不压缩)、wav(不压缩,pcm编码)、amr(压缩格式)、m4a(压缩格式)。推荐pcm 采样率 :16000、8000(仅支持普通话模型) 固定值。 编码:16bit 位深的单声道。
But “Media recorder is not available ""”
I don‘t know why. -