QT进行音频录制

文章目录

QT使用AudioRecorder进行 音频录制

使用Qt框架的AudioRecorder类进行音频录制,可以通过Qt的MultimediaWidgets模块实现。

  1. 首先,确保你的Qt项目中包含了MultimediaWidgets模块 ‌。这通常在项目的.pro文件中进行配置,通过添加QT += MultimediaWidgets来启用MultimediaWidgets模块。
  2. 创建一个Qt Widgets应用程序‌,并添加必要的类和方法来处理视频录制。这包括创建一个主窗口类(Widget),并在其中添加音频录制开始,暂停,停止等功能。
  3. 设置音频编码器设置 ‌:使用QAudioEncoderSettings类来进行音频编码器设置。
  4. 音频录制 ‌:使用QAudioRecorder类来录制音频。配置好录制的参数后,使用QAudioRecorder::record()方法可以开始录制。录制完成后,可以通过QAudioRecorder::stop()方法来停止录制。
  5. 处理事件‌:为你的主窗口添加事件处理函数,如开始录制和停止录制的按钮点击事件,以及处理录制的开始和结束等。

首先,确保你的项目文件.pro包含多媒体模块:

c++ 复制代码
 QT       += core gui multimedia multimediawidgets

然后,在Qt应用程序中,创建 Widget 类:

  • C++头文件 "widget.h" 内容如下:
C++ 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QAudioRecorder>
#include <QPushButton>
#include <QComboBox>
#include <QLabel>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLineEdit>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_start_clicked();
    void on_stop_clicked();
    void on_select_clicked();
    void updateProgress(qint64 duration);

private:
    QLabel      *labelState;
    QLabel      *label0;
    QLabel      *label1;
    QLabel      *label2;
    QLineEdit   *lineEditFileName;
    QPushButton *pbStop;
    QPushButton *pbStart;
    QPushButton *pbSelect;
    QComboBox   *comboBoxSelect;
    QAudioRecorder *audioRecorder;
};
#endif // WIDGET_H
  • C++源文件 widget.cpp 内容如下:
C++ 复制代码
#include "widget.h"
#include "QUrl"
#include <QFileDialog>
#include <QGridLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    label0 = new QLabel(tr("状态"));
    labelState = new QLabel;
    labelState->setFrameStyle(QFrame::Box);

    label1 = new QLabel(tr("输入设备"));
    audioRecorder = new QAudioRecorder;
    QStringList inputs = audioRecorder->audioInputs();
    comboBoxSelect = new QComboBox;
    comboBoxSelect->addItems(inputs);

    label2 = new QLabel(tr("保存地址"));
    lineEditFileName = new QLineEdit;

    pbStop = new QPushButton(tr("停止"));
    pbStart = new QPushButton(tr("开始"));
    pbSelect = new QPushButton(tr("选择"));

    QAudioEncoderSettings audioSettings;
    audioSettings.setCodec("audio/pcm");
    audioSettings.setQuality(QMultimedia::HighQuality);
    audioRecorder->setAudioSettings(audioSettings);

    QGridLayout *layoutMain = new QGridLayout(this);
    layoutMain->setMargin(20);
    layoutMain->setSpacing(10);
    layoutMain->addWidget(label0,0,0);
    layoutMain->addWidget(labelState,0,1,1,3);
    layoutMain->addWidget(label1,1,0);
    layoutMain->addWidget(comboBoxSelect,1,1,1,3);
    layoutMain->addWidget(label2,2,0);
    layoutMain->addWidget(lineEditFileName,2,1,1,2);
    layoutMain->addWidget(pbSelect,2,3);
    layoutMain->addWidget(pbStart,3,1);
    layoutMain->addWidget(pbStop,3,2);
    resize(480,190);
    setWindowTitle(tr("录音机"));

    connect(pbStop, &QPushButton::clicked, this,
            &Widget::on_stop_clicked);
    connect(pbStart, &QPushButton::clicked, this,
            &Widget::on_start_clicked);
    connect(pbSelect, &QPushButton::clicked, this,
            &Widget::on_select_clicked);
    connect(audioRecorder, &QAudioRecorder::durationChanged, this,
            &Widget::updateProgress);

}


void Widget::on_start_clicked()
{
    if(lineEditFileName->text().isEmpty()) {
        return;
    }
    audioRecorder->setAudioInput(comboBoxSelect->currentText());
    audioRecorder->setOutputLocation(QUrl::fromLocalFile(lineEditFileName->text()));
    audioRecorder->record();
}
void Widget::on_stop_clicked()
{
    audioRecorder->stop();
}
void Widget::on_select_clicked()
{
    QString fileName = QFileDialog::getSaveFileName();
    lineEditFileName->setText(fileName);
}
void Widget::updateProgress(qint64 duration)
{
    if (audioRecorder->error() != QMediaRecorder::NoError || duration < 1000)
        return;
    labelState->setText(tr("Recorded %1 sec").arg(duration / 1000));
}

Widget::~Widget()
{
}
  • 主程序main.cpp 内容如下
C++ 复制代码
#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

小结

​ 这段代码演示了如何使用QT的QAudioRecorder类进行音频录制。首先,创建了一个QAudioRecorder对象并设置了音频输入设备、输出位置和输出格式。然后,通过调用record()方法开始录制,通过调用stop()方法停止录制。最后,不要忘记清理资源。。

相关推荐
一念春风11 分钟前
C# 音频分离(MP3伴奏)
数据库·c#·音视频
努力学习的小廉12 分钟前
【C++】 —— 笔试刷题day_23
开发语言·c++
whoarethenext21 分钟前
加密认证库openssl初始附带c/c++的使用源码
c语言·网络·c++·openssl
虾球xz1 小时前
游戏引擎学习第243天:异步纹理下载
c++·学习·游戏引擎
洛克希德马丁1 小时前
关于Qt对Html/CSS的支持
css·qt·html
Oliverro2 小时前
智慧景区国标GB28181视频平台EasyGBS视频融合应用全场景解决方案
网络·音视频
ptu小鹏8 小时前
类和对象(中)
开发语言·c++
明月看潮生10 小时前
青少年编程与数学 02-018 C++数据结构与算法 06课题、树
数据结构·c++·算法·青少年编程·编程与数学
小指纹10 小时前
动态规划(一)【背包】
c++·算法·动态规划
得鹿梦鱼、11 小时前
Qt案例 使用QFtpServerLib开源库实现Qt软件搭建FTP服务器,使用QFTP模块访问FTP服务器
qt·qftp·qftpserver