Qt6 录音

71 篇文章 4 订阅

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QAudioSource>
#include <QFile>
#include <QMediaFormat>
#include <QMediaRecorder>
#include <QUrl>
#include <QMediaCaptureSession>
#include <QTimer>


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void stopRecording();
    void updateProgress(qint64 duration);
    void displayErrorMessage();

private:
    Ui::Widget *ui;

    ///
    QMediaRecorder *audioRecorder = nullptr;
    QMediaCaptureSession captureSession;
};
#endif // WIDGET_H

#include "widget.h"
#include "ui_widget.h"
#include <QAudioSource>
#include <QAudioInput>
#include <QAudioFormat>
#include <QAudioDevice>
#include <QMediaDevices>
#include <QFile>
#include <QTimer>
#include <iostream>
#include <QDir>
#include <QFileDialog>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    
    audioRecorder = new QMediaRecorder(this);
    captureSession.setRecorder(audioRecorder);
    captureSession.setAudioInput(new QAudioInput(this));

    qDebug()<<audioRecorder->recorderState();
    if (audioRecorder->recorderState() == QMediaRecorder::StoppedState) 
    {
        captureSession.audioInput()->setDevice(QMediaDevices::defaultAudioInput());
        qDebug()<<QMediaDevices::defaultAudioInput().description();
        QMediaFormat format;
        format.setFileFormat(QMediaFormat::AAC);
        format.setAudioCodec(QMediaFormat::AudioCodec::AAC);
        audioRecorder->setMediaFormat(format);
        audioRecorder->setAudioSampleRate(44100);
        audioRecorder->setAudioBitRate(0);
        audioRecorder->setAudioChannelCount(2);
        audioRecorder->setQuality(QMediaRecorder::HighQuality);
        audioRecorder->setEncodingMode(QMediaRecorder::ConstantQualityEncoding);
        audioRecorder->setOutputLocation(QUrl::fromLocalFile(QDir::currentPath() + "/output.aac"));

        audioRecorder->record();
        qDebug()<<audioRecorder->recorderState();
        qDebug()<<audioRecorder->outputLocation();
    }
     connect(audioRecorder, &QMediaRecorder::durationChanged, this, &Widget::updateProgress);
     connect(audioRecorder, &QMediaRecorder::errorChanged, this, &Widget::displayErrorMessage);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::stopRecording()
{
    audioRecorder->stop();
}


void Widget::updateProgress(qint64 duration)
{
    qDebug()<<duration;
}


void Widget::displayErrorMessage()
{
    qDebug()<<audioRecorder->errorString();
}

main.cpp

#include "widget.h"
#include <QApplication>
#include <iostream>
#include <QTimer>

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

widget.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Widget</class>
 <widget class="QWidget" name="Widget">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Widget</string>
  </property>
  <widget class="QPushButton" name="pushButton">
   <property name="geometry">
    <rect>
     <x>280</x>
     <y>200</y>
     <width>89</width>
     <height>25</height>
    </rect>
   </property>
   <property name="text">
    <string>stop</string>
   </property>
  </widget>
 </widget>
 <resources/>
 <connections>
  <connection>
   <sender>pushButton</sender>
   <signal>clicked()</signal>
   <receiver>Widget</receiver>
   <slot>stopRecording()</slot>
   <hints>
    <hint type="sourcelabel">
     <x>339</x>
     <y>206</y>
    </hint>
    <hint type="destinationlabel">
     <x>547</x>
     <y>206</y>
    </hint>
   </hints>
  </connection>
 </connections>
 <slots>
  <slot>stopRecording()</slot>
 </slots>
</ui>
xz@xiaqiu:~/study/csdn/ffmpeg/audio_input/build$ ls
main.o    moc_predefs.h   moc_widget.o  test.txt     widget.o
Makefile  moc_widget.cpp  testqt        ui_widget.h
xz@xiaqiu:~/study/csdn/ffmpeg/audio_input/build$ ./testqt 
QMediaRecorder::StoppedState
"内置音频 模拟立体声"
QMediaRecorder::RecordingState
QUrl("file:///home/xz/study/csdn/ffmpeg/audio_input/build/output.aac")
96
196
296
396
496
596
696
796
896
996
1096
1196
xz@xiaqiu:~/study/csdn/ffmpeg/audio_input/build$ ls
main.o    moc_predefs.h   moc_widget.o  testqt    ui_widget.h
Makefile  moc_widget.cpp  output.aac    test.txt  widget.o
xz@xiaqiu:~/study/csdn/ffmpeg/audio_input/build$ 
xz@xiaqiu:~/study/csdn/ffmpeg/audio_input/build$ ffplay output.aac 

在这里插入图片描述
注意:记得调用stop

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值