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包含多媒体模块:

 QT       += core gui multimedia multimediawidgets

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

  • C++头文件 “widget.h” 内容如下:
#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 内容如下:
#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 内容如下
#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()方法停止录制。最后,不要忘记清理资源。。

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值