From bfcbd91c8548953434073b509a9053d88ec7ec54 Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk <valentyn.doroshchuk@qt.io> Date: Mon, 18 Sep 2017 12:26:40 +0200 Subject: [PATCH] Modernize the Audio Recorder example Foreach to for. Changed initialization style. Renamed QAudioLevel -> AudiLevel. Changed connection signal/slot style. Task-number: QTBUG-60627 Change-Id: I3538433680086a2c4ee52ee22a5180c6d824b897 Reviewed-by: Christian Stromme <christian.stromme@qt.io> --- .../{qaudiolevel.cpp => audiolevel.cpp} | 9 +- .../{qaudiolevel.h => audiolevel.h} | 10 +- .../audiorecorder/audiorecorder.cpp | 99 +++++++++---------- .../multimedia/audiorecorder/audiorecorder.h | 15 ++- .../audiorecorder/audiorecorder.pro | 4 +- 5 files changed, 62 insertions(+), 75 deletions(-) rename examples/multimedia/audiorecorder/{qaudiolevel.cpp => audiolevel.cpp} (93%) rename examples/multimedia/audiorecorder/{qaudiolevel.h => audiolevel.h} (93%) diff --git a/examples/multimedia/audiorecorder/qaudiolevel.cpp b/examples/multimedia/audiorecorder/audiolevel.cpp similarity index 93% rename from examples/multimedia/audiorecorder/qaudiolevel.cpp rename to examples/multimedia/audiorecorder/audiolevel.cpp index 8dd172f30..5df137dd8 100644 --- a/examples/multimedia/audiorecorder/qaudiolevel.cpp +++ b/examples/multimedia/audiorecorder/audiolevel.cpp @@ -38,18 +38,17 @@ ** ****************************************************************************/ -#include "qaudiolevel.h" +#include "audiolevel.h" #include <QPainter> -QAudioLevel::QAudioLevel(QWidget *parent) +AudioLevel::AudioLevel(QWidget *parent) : QWidget(parent) - , m_level(0.0) { setMinimumHeight(15); setMaximumHeight(50); } -void QAudioLevel::setLevel(qreal level) +void AudioLevel::setLevel(qreal level) { if (m_level != level) { m_level = level; @@ -57,7 +56,7 @@ void QAudioLevel::setLevel(qreal level) } } -void QAudioLevel::paintEvent(QPaintEvent *event) +void AudioLevel::paintEvent(QPaintEvent *event) { Q_UNUSED(event); diff --git a/examples/multimedia/audiorecorder/qaudiolevel.h b/examples/multimedia/audiorecorder/audiolevel.h similarity index 93% rename from examples/multimedia/audiorecorder/qaudiolevel.h rename to examples/multimedia/audiorecorder/audiolevel.h index f8e563adc..ba6a76d90 100644 --- a/examples/multimedia/audiorecorder/qaudiolevel.h +++ b/examples/multimedia/audiorecorder/audiolevel.h @@ -38,16 +38,16 @@ ** ****************************************************************************/ -#ifndef QAUDIOLEVEL_H -#define QAUDIOLEVEL_H +#ifndef AUDIOLEVEL_H +#define AUDIOLEVEL_H #include <QWidget> -class QAudioLevel : public QWidget +class AudioLevel : public QWidget { Q_OBJECT public: - explicit QAudioLevel(QWidget *parent = 0); + explicit AudioLevel(QWidget *parent = 0); // Using [0; 1.0] range void setLevel(qreal level); @@ -56,7 +56,7 @@ protected: void paintEvent(QPaintEvent *event) override; private: - qreal m_level; + qreal m_level = 0.0; }; #endif // QAUDIOLEVEL_H diff --git a/examples/multimedia/audiorecorder/audiorecorder.cpp b/examples/multimedia/audiorecorder/audiorecorder.cpp index 2fb41584e..9495085c8 100644 --- a/examples/multimedia/audiorecorder/audiorecorder.cpp +++ b/examples/multimedia/audiorecorder/audiorecorder.cpp @@ -38,57 +38,55 @@ ** ****************************************************************************/ +#include "audiorecorder.h" +#include "audiolevel.h" + +#include "ui_audiorecorder.h" + #include <QAudioProbe> #include <QAudioRecorder> #include <QDir> #include <QFileDialog> #include <QMediaRecorder> -#include "audiorecorder.h" -#include "qaudiolevel.h" - -#include "ui_audiorecorder.h" - static qreal getPeakValue(const QAudioFormat &format); static QVector<qreal> getBufferLevels(const QAudioBuffer &buffer); template <class T> static QVector<qreal> getBufferLevels(const T *buffer, int frames, int channels); -AudioRecorder::AudioRecorder(QWidget *parent) : - QMainWindow(parent), - ui(new Ui::AudioRecorder), - outputLocationSet(false) +AudioRecorder::AudioRecorder() + : ui(new Ui::AudioRecorder) { ui->setupUi(this); - audioRecorder = new QAudioRecorder(this); - probe = new QAudioProbe; - connect(probe, SIGNAL(audioBufferProbed(QAudioBuffer)), - this, SLOT(processBuffer(QAudioBuffer))); - probe->setSource(audioRecorder); + m_audioRecorder = new QAudioRecorder(this); + m_probe = new QAudioProbe(this); + connect(m_probe, &QAudioProbe::audioBufferProbed, + this, &AudioRecorder::processBuffer); + m_probe->setSource(m_audioRecorder); //audio devices ui->audioDeviceBox->addItem(tr("Default"), QVariant(QString())); - foreach (const QString &device, audioRecorder->audioInputs()) { + for (auto &device: m_audioRecorder->audioInputs()) { ui->audioDeviceBox->addItem(device, QVariant(device)); } //audio codecs ui->audioCodecBox->addItem(tr("Default"), QVariant(QString())); - foreach (const QString &codecName, audioRecorder->supportedAudioCodecs()) { + for (auto &codecName: m_audioRecorder->supportedAudioCodecs()) { ui->audioCodecBox->addItem(codecName, QVariant(codecName)); } //containers ui->containerBox->addItem(tr("Default"), QVariant(QString())); - foreach (const QString &containerName, audioRecorder->supportedContainers()) { + for (auto &containerName: m_audioRecorder->supportedContainers()) { ui->containerBox->addItem(containerName, QVariant(containerName)); } //sample rate ui->sampleRateBox->addItem(tr("Default"), QVariant(0)); - foreach (int sampleRate, audioRecorder->supportedAudioSampleRates()) { + for (int sampleRate: m_audioRecorder->supportedAudioSampleRates()) { ui->sampleRateBox->addItem(QString::number(sampleRate), QVariant( sampleRate)); } @@ -110,25 +108,16 @@ AudioRecorder::AudioRecorder(QWidget *parent) : ui->bitrateBox->addItem(QStringLiteral("96000"), QVariant(96000)); ui->bitrateBox->addItem(QStringLiteral("128000"), QVariant(128000)); - connect(audioRecorder, SIGNAL(durationChanged(qint64)), this, - SLOT(updateProgress(qint64))); - connect(audioRecorder, SIGNAL(statusChanged(QMediaRecorder::Status)), this, - SLOT(updateStatus(QMediaRecorder::Status))); - connect(audioRecorder, SIGNAL(stateChanged(QMediaRecorder::State)), - this, SLOT(onStateChanged(QMediaRecorder::State))); - connect(audioRecorder, SIGNAL(error(QMediaRecorder::Error)), this, - SLOT(displayErrorMessage())); -} - -AudioRecorder::~AudioRecorder() -{ - delete audioRecorder; - delete probe; + connect(m_audioRecorder, &QAudioRecorder::durationChanged, this, &AudioRecorder::updateProgress); + connect(m_audioRecorder, &QAudioRecorder::statusChanged, this, &AudioRecorder::updateStatus); + connect(m_audioRecorder, &QAudioRecorder::stateChanged, this, &AudioRecorder::onStateChanged); + connect(m_audioRecorder, QOverload<QMediaRecorder::Error>::of(&QAudioRecorder::error), this, + &AudioRecorder::displayErrorMessage); } void AudioRecorder::updateProgress(qint64 duration) { - if (audioRecorder->error() != QMediaRecorder::NoError || duration < 2000) + if (m_audioRecorder->error() != QMediaRecorder::NoError || duration < 2000) return; ui->statusbar->showMessage(tr("Recorded %1 sec").arg(duration / 1000)); @@ -140,7 +129,7 @@ void AudioRecorder::updateStatus(QMediaRecorder::Status status) switch (status) { case QMediaRecorder::RecordingStatus: - statusMessage = tr("Recording to %1").arg(audioRecorder->actualLocation().toString()); + statusMessage = tr("Recording to %1").arg(m_audioRecorder->actualLocation().toString()); break; case QMediaRecorder::PausedStatus: clearAudioLevels(); @@ -154,7 +143,7 @@ void AudioRecorder::updateStatus(QMediaRecorder::Status status) break; } - if (audioRecorder->error() == QMediaRecorder::NoError) + if (m_audioRecorder->error() == QMediaRecorder::NoError) ui->statusbar->showMessage(statusMessage); } @@ -175,7 +164,7 @@ void AudioRecorder::onStateChanged(QMediaRecorder::State state) break; } - ui->pauseButton->setEnabled(audioRecorder->state() != QMediaRecorder::StoppedState); + ui->pauseButton->setEnabled(m_audioRecorder->state() != QMediaRecorder::StoppedState); } static QVariant boxValue(const QComboBox *box) @@ -189,8 +178,8 @@ static QVariant boxValue(const QComboBox *box) void AudioRecorder::toggleRecord() { - if (audioRecorder->state() == QMediaRecorder::StoppedState) { - audioRecorder->setAudioInput(boxValue(ui->audioDeviceBox).toString()); + if (m_audioRecorder->state() == QMediaRecorder::StoppedState) { + m_audioRecorder->setAudioInput(boxValue(ui->audioDeviceBox).toString()); QAudioEncoderSettings settings; settings.setCodec(boxValue(ui->audioCodecBox).toString()); @@ -204,38 +193,38 @@ void AudioRecorder::toggleRecord() QString container = boxValue(ui->containerBox).toString(); - audioRecorder->setEncodingSettings(settings, QVideoEncoderSettings(), container); - audioRecorder->record(); + m_audioRecorder->setEncodingSettings(settings, QVideoEncoderSettings(), container); + m_audioRecorder->record(); } else { - audioRecorder->stop(); + m_audioRecorder->stop(); } } void AudioRecorder::togglePause() { - if (audioRecorder->state() != QMediaRecorder::PausedState) - audioRecorder->pause(); + if (m_audioRecorder->state() != QMediaRecorder::PausedState) + m_audioRecorder->pause(); else - audioRecorder->record(); + m_audioRecorder->record(); } void AudioRecorder::setOutputLocation() { QString fileName = QFileDialog::getSaveFileName(); - audioRecorder->setOutputLocation(QUrl::fromLocalFile(fileName)); - outputLocationSet = true; + m_audioRecorder->setOutputLocation(QUrl::fromLocalFile(fileName)); + m_outputLocationSet = true; } void AudioRecorder::displayErrorMessage() { - ui->statusbar->showMessage(audioRecorder->errorString()); + ui->statusbar->showMessage(m_audioRecorder->errorString()); } void AudioRecorder::clearAudioLevels() { - for (int i = 0; i < audioLevels.size(); ++i) - audioLevels.at(i)->setLevel(0); + for (int i = 0; i < m_audioLevels.size(); ++i) + m_audioLevels.at(i)->setLevel(0); } // This function returns the maximum possible sample value for a given audio format @@ -346,17 +335,17 @@ QVector<qreal> getBufferLevels(const T *buffer, int frames, int channels) void AudioRecorder::processBuffer(const QAudioBuffer& buffer) { - if (audioLevels.count() != buffer.format().channelCount()) { - qDeleteAll(audioLevels); - audioLevels.clear(); + if (m_audioLevels.count() != buffer.format().channelCount()) { + qDeleteAll(m_audioLevels); + m_audioLevels.clear(); for (int i = 0; i < buffer.format().channelCount(); ++i) { - QAudioLevel *level = new QAudioLevel(ui->centralwidget); - audioLevels.append(level); + AudioLevel *level = new AudioLevel(ui->centralwidget); + m_audioLevels.append(level); ui->levelsLayout->addWidget(level); } } QVector<qreal> levels = getBufferLevels(buffer); for (int i = 0; i < levels.count(); ++i) - audioLevels.at(i)->setLevel(levels.at(i)); + m_audioLevels.at(i)->setLevel(levels.at(i)); } diff --git a/examples/multimedia/audiorecorder/audiorecorder.h b/examples/multimedia/audiorecorder/audiorecorder.h index 7c8040299..9df86cac4 100644 --- a/examples/multimedia/audiorecorder/audiorecorder.h +++ b/examples/multimedia/audiorecorder/audiorecorder.h @@ -52,15 +52,14 @@ class QAudioProbe; class QAudioBuffer; QT_END_NAMESPACE -class QAudioLevel; +class AudioLevel; class AudioRecorder : public QMainWindow { Q_OBJECT public: - AudioRecorder(QWidget *parent = 0); - ~AudioRecorder(); + AudioRecorder(); public slots: void processBuffer(const QAudioBuffer&); @@ -78,12 +77,12 @@ private slots: private: void clearAudioLevels(); - Ui::AudioRecorder *ui; + Ui::AudioRecorder *ui = nullptr; - QAudioRecorder *audioRecorder; - QAudioProbe *probe; - QList<QAudioLevel*> audioLevels; - bool outputLocationSet; + QAudioRecorder *m_audioRecorder = nullptr; + QAudioProbe *m_probe = nullptr; + QList<AudioLevel*> m_audioLevels; + bool m_outputLocationSet = false; }; diff --git a/examples/multimedia/audiorecorder/audiorecorder.pro b/examples/multimedia/audiorecorder/audiorecorder.pro index 593c30096..65eecc7b4 100644 --- a/examples/multimedia/audiorecorder/audiorecorder.pro +++ b/examples/multimedia/audiorecorder/audiorecorder.pro @@ -7,12 +7,12 @@ win32:INCLUDEPATH += $$PWD HEADERS = \ audiorecorder.h \ - qaudiolevel.h + audiolevel.h SOURCES = \ main.cpp \ audiorecorder.cpp \ - qaudiolevel.cpp + audiolevel.cpp FORMS += audiorecorder.ui -- GitLab