QT学习_QAudioInput/output实现录音监听
Posted Leslie X徐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT学习_QAudioInput/output实现录音监听相关的知识,希望对你有一定的参考价值。
实现录音和监听
用到的类
-
QAudioDeviceInfo
-
QAudioFormat
-
QIODevice
-
QAudioInput
-
QAudioOutput
头文件
#include <QMainWindow>
#include <QAudioInput>
#include <QAudioOutput>
#include <QAudioFormat>
#include <QAudioDeviceInfo>
#include <QList>
#include <QMessageBox>
#include <QFile>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
QFile saveFile;
QAudioDeviceInfo input_Device; //音频输入设备
QAudioDeviceInfo output_Device; //音频输出设备
QAudioInput *audioInput;
QAudioOutput *audioOutput;
QIODevice* input_stream;
QIODevice* output_stream;
QAudioFormat settings;
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
//开始录音
void on_actionstart_triggered();
//结束录音
void on_actionstop_triggered();
private:
Ui::MainWindow *ui;
};
源文件
构造函数
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
input_stream = nullptr;
output_stream = nullptr;
//获取音频设备
input_Device = QAudioDeviceInfo::defaultInputDevice();
output_Device = QAudioDeviceInfo::defaultOutputDevice();
}
录音返音函数
void MainWindow::on_actionstart_triggered()
{
//设置音频格式
settings.setCodec("audio/pcm");
settings.setSampleRate(44100);
settings.setSampleType(QAudioFormat::SampleType(1));
settings.setSampleSize(16);
settings.setChannelCount(1);
settings.setByteOrder(QAudioFormat::LittleEndian);
//格式支持判断,若不支持则选择相近格式
if(!input_Device.isFormatSupported(settings))
input_Device.nearestFormat(settings);
if(!output_Device.isFormatSupported(settings))
output_Device.nearestFormat(settings);
//开始录音和监听
qDebug()<<"start recording...";
audioInput = new QAudioInput(input_Device,settings,this);
audioOutput = new QAudioOutput(output_Device,settings,this);
audioInput->setBufferSize(4000);
audioOutput->setBufferSize(4000);
//将QIODevice指向输入流和输出流
input_stream = audioInput->start();
output_stream = audioOutput->start();
connect(input_stream,&QIODevice::readyRead,
[=](){
//当有音频输入时,输入流读取进行录音,然后写给输出流进行监听
auto data = input_stream->readAll();
output_stream->write(data);
});
//若要保存,可以设置保存文件,输出的格式为pcm
// saveFile.setFileName(SAVE_PATH);
// saveFile.open(QIODevice::WriteOnly | QIODevice::Truncate);
// audioInput->start(&saveFile);
}
停止函数
void MainWindow::on_actionstop_triggered()
{
qDebug()<<"stop recording...";
audioInput->stop();
audioOutput->stop();
//saveFile.close();
}
以上是关于QT学习_QAudioInput/output实现录音监听的主要内容,如果未能解决你的问题,请参考以下文章