Qt文档阅读笔记-Qt5录音功能的实现

Posted IT1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt文档阅读笔记-Qt5录音功能的实现相关的知识,希望对你有一定的参考价值。

目录

 

基本概念

代码与实例


 

基本概念

首先是Qt5中的新特性:

Qt5中关于多媒体的新特性:
          1. QML API接口;
          2. 能同时使用MediaPlayer和VideoOutput;
          3. QML Torch类;
          4. 增加了QAudioRecorder这一新类;
          5. 更加强大的QAudioOutput和QAudioInput;
          6. 更多的实例和文档;
          7. 把QSound类从Qt CUI模块移到了Qt Multimedia模块;
          8. QSoundEffect不仅支持C++,还支持QML;
          9. QRadioData和RadioData也能使用;
          10. 优化了各种API以及修补了BUG。

这里还得记录2个类!

QAudioRecorder提供了录音功能,这个是高级多媒体录制类,他是QmediaRecorderder的子类,用法和他差不多

下面是官方的实例:

  audioRecorder = new QAudioRecorder;

  QAudioEncoderSettings audiosettings;
  audioSettings.setCodec("audio/amr");
  audioSettings.setQuality(QMultimedia::HighQuality);

  audioRecorder->setEncodingSettings(audioSettings);

  audioRecorder->setOutputLocation(QUrl::fromLocalFile("test.amr"));
  audioRecorder->record();

此外QAudioRecorder还提供了选择audioinput的功能

  QStringList inputs = audioRecorder->audioInputs();
  QString selectedInput = audioRecorder->defaultAudioInput();

  foreach (QString input, inputs) 
      QString description = audioRecorder->audioInputDescription(input);
      // show descriptions to user and allow selection
      selectedInput = input;
  

  audioRecorder->setAudioInput(selectedInput);

Audio Recorder Example提供了这个类的详细用法,这个其实本人的例子,就是Audio Recorder Example的关键提提取出来的!!!!

 

下面来看另外一个类:QAudioEncoderSettings

这个类提供了编码方面的设置。

用这个类去指定QMediaRecorder中相关的设置(因为QAudioRecorder为QMediaRecorder的子类,所有他也可以设置),通过调用setAudioSettings这个函数进行设置!

官方给出的相关代码!

  QAudioEncoderSettings audioSettings;
  audioSettings.setCodec("audio/mpeg");
  audioSettings.setChannelCount(2);

  recorder->setAudioSettings(audioSettings);

 

代码与实例

程序运行截图如下:

录了4-5s的时间(程序里面是5s)

源码如下:

#include <QCoreApplication>
#include <QAudioEncoderSettings>
#include <QUrl>
#include <QAudioRecorder>
#include <QTimer>
#include <QEventLoop>
#include <QDebug>

int main(int argc, char *argv[])

    QCoreApplication a(argc, argv);

    QAudioRecorder *audioRecorder = new QAudioRecorder;
    if(!audioRecorder->setOutputLocation(QUrl::fromLocalFile("E:\\\\Qt2019\\\\multimediaTest\\\\1.wav")))

        qDebug() << "文件保存有毒!退出!";
        return 0;
    

    QStringList audioInputList = audioRecorder->audioInputs(); //audioInputList[0]为麦克风
    QStringList audioCodecsList = audioRecorder->supportedAudioCodecs();      //audioCodecsList[0]为 audio/pcm

    audioRecorder->setAudioInput(audioInputList[0]);
    QAudioEncoderSettings settings;
    settings.setCodec(audioCodecsList[0]);
    settings.setSampleRate(16000);  //采样率   XXXXXXX
    settings.setBitRate(128000);
    settings.setQuality(QMultimedia::EncodingQuality(10));
    settings.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
    audioRecorder->setEncodingSettings(settings, QVideoEncoderSettings());
    audioRecorder->record();

    qDebug() << "start!";
    QEventLoop loop;
    QTimer::singleShot(5 * 1000, &loop, SLOT(quit()));
    loop.exec();

    audioRecorder->stop();

    delete audioRecorder;

    qDebug() << "over";
    return a.exec();

 

以上是关于Qt文档阅读笔记-Qt5录音功能的实现的主要内容,如果未能解决你的问题,请参考以下文章

使用 gstreamer 在 android 上录制音频(使用 Qt5)

智能语音计算器

Qt文档阅读笔记-Ping Pong States Example解析

银河麒麟-长城笔记本电脑编译Qt5.14.2

qt5集成libcurl实现tftp和ftp的方法一:搭建环境

Qt文档阅读笔记-QAudioInput&QAudioFormat解析与实例