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()方法停止录制。最后,不要忘记清理资源。。

相关推荐
fqbqrr2 小时前
2607C++,使用微软detours勾挂工具
c++
mabing9935 小时前
Qt 生成条纹图
开发语言·qt
蓝悦无人机5 小时前
C++基础 — 函数总结
开发语言·c++
Fu_Lin_5 小时前
Qt 嵌入式从零基础到精通总纲
开发语言·qt·嵌入式·qt嵌入式
我不是懒洋洋7 小时前
从零实现一个分布式监控:Prometheus的核心设计
c++
An_s7 小时前
c++对接pdfium(一)win系统篇
开发语言·c++
众少成多积小致巨7 小时前
C++ 规范参考(上)
c++
茯苓gao7 小时前
嵌入式开发笔记:Qt信号槽机制深度解析——从原理到实战的全方位指南
开发语言·笔记·嵌入式硬件·qt·学习
Lyndon-李大鹏9 小时前
QT-VS环境
开发语言·qt
byte轻骑兵9 小时前
【AVDTP】规范精讲[6]: 打通全流程,蓝牙音频连接背后的12步信令博弈
人工智能·音视频·avrcp·蓝牙耳机·蓝牙车机