QT进行音频录制
文章目录
- QT使用`AudioRecorder`进行 音频录制
- 首先,确保你的项目文件`.pro`包含多媒体模块:
- 然后,在Qt应用程序中,创建 Widget 类:
- 小结
QT使用AudioRecorder
进行 音频录制
使用Qt框架的AudioRecorder
类进行音频录制,可以通过Qt的MultimediaWidgets
模块实现。
- 首先,确保你的Qt项目中包含了
MultimediaWidgets
模块。这通常在项目的.pro文件中进行配置,通过添加QT += MultimediaWidgets
来启用MultimediaWidgets
模块。 - 创建一个Qt Widgets应用程序,并添加必要的类和方法来处理视频录制。这包括创建一个主窗口类(Widget),并在其中添加音频录制开始,暂停,停止等功能。
- 设置音频编码器设置:使用
QAudioEncoderSettings
类来进行音频编码器设置。 - 音频录制:使用
QAudioRecorder
类来录制音频。配置好录制的参数后,使用QAudioRecorder::record()
方法可以开始录制。录制完成后,可以通过QAudioRecorder::stop()
方法来停止录制。 - 处理事件:为你的主窗口添加事件处理函数,如开始录制和停止录制的按钮点击事件,以及处理录制的开始和结束等。
首先,确保你的项目文件.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()方法停止录制。最后,不要忘记清理资源。。