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实现录音监听的主要内容,如果未能解决你的问题,请参考以下文章

QT学习_青云客网络聊天

QT学习_log分析器程序

QT学习_录音功能

opencv学习_qt显示图片

opencv学习_qt显示图片

Qt学习总结(C鱼)之信号与槽01