summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-12-17 18:10:12 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-12-20 13:44:09 +0000
commit9b23e0c8fb1fc2ec92478f1aec595313851a40b7 (patch)
treee89e9461b80306d591fc8b1826d25e51d8b58704
parent6144b257499d30248952078654420de6cfc63875 (diff)
Polish the audiosource example
- Use a QWidget instead of a QMainWindow since no QMainWindow functionality is used and the controls are wrongly parented - Change the update signal of AudioInfo to levelChanged(level), removing the need for a lamba - Streamline the code Change-Id: Ic03a5414ee5da4841532ad23db112d0594f458e5 Reviewed-by: Doris Verria <doris.verria@qt.io> (cherry picked from commit a71362d9ef7098c1d7869b3768a0990a61474980) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--examples/multimedia/audiosource/audiosource.cpp61
-rw-r--r--examples/multimedia/audiosource/audiosource.h22
-rw-r--r--examples/multimedia/audiosource/main.cpp10
3 files changed, 42 insertions, 51 deletions
diff --git a/examples/multimedia/audiosource/audiosource.cpp b/examples/multimedia/audiosource/audiosource.cpp
index c2dbb6786..c2b9547b4 100644
--- a/examples/multimedia/audiosource/audiosource.cpp
+++ b/examples/multimedia/audiosource/audiosource.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
@@ -76,11 +76,8 @@ void AudioInfo::stop()
close();
}
-qint64 AudioInfo::readData(char *data, qint64 maxlen)
+qint64 AudioInfo::readData(char * /* data */, qint64 /* maxlen */)
{
- Q_UNUSED(data);
- Q_UNUSED(maxlen);
-
return 0;
}
@@ -91,7 +88,7 @@ qint64 AudioInfo::writeData(const char *data, qint64 len)
const int numSamples = len / sampleBytes;
float maxValue = 0;
- const unsigned char *ptr = reinterpret_cast<const unsigned char *>(data);
+ auto *ptr = reinterpret_cast<const unsigned char *>(data);
for (int i = 0; i < numSamples; ++i) {
for (int j = 0; j < m_format.channelCount(); ++j) {
@@ -104,7 +101,8 @@ qint64 AudioInfo::writeData(const char *data, qint64 len)
m_level = maxValue;
- emit update();
+ emit levelChanged(m_level);
+
return len;
}
@@ -123,19 +121,15 @@ void RenderArea::paintEvent(QPaintEvent * /* event */)
QPainter painter(this);
painter.setPen(Qt::black);
- painter.drawRect(QRect(painter.viewport().left()+10,
- painter.viewport().top()+10,
- painter.viewport().right()-20,
- painter.viewport().bottom()-20));
+
+ const QRect frame = painter.viewport() - QMargins(10, 10, 10, 10);
+ painter.drawRect(frame);
if (m_level == 0.0)
return;
- int pos = ((painter.viewport().right()-20)-(painter.viewport().left()+11))*m_level;
- painter.fillRect(painter.viewport().left()+11,
- painter.viewport().top()+10,
- pos,
- painter.viewport().height()-21,
- Qt::red);
+ const int pos = qRound(qreal(frame.width() - 1) * m_level);
+ painter.fillRect(frame.left() + 1, frame.top() + 1,
+ pos, frame.height() - 1, Qt::red);
}
void RenderArea::setLevel(qreal value)
@@ -149,27 +143,25 @@ InputTest::InputTest()
: m_devices(new QMediaDevices(this))
{
initializeWindow();
- initializeAudio(m_devices->defaultAudioInput());
+ initializeAudio(QMediaDevices::defaultAudioInput());
}
-
void InputTest::initializeWindow()
{
- QWidget *window = new QWidget;
- QVBoxLayout *layout = new QVBoxLayout;
+ QVBoxLayout *layout = new QVBoxLayout(this);
m_canvas = new RenderArea(this);
layout->addWidget(m_canvas);
m_deviceBox = new QComboBox(this);
- const QAudioDevice &defaultDeviceInfo = m_devices->defaultAudioInput();
+ const QAudioDevice &defaultDeviceInfo = QMediaDevices::defaultAudioInput();
m_deviceBox->addItem(defaultDeviceInfo.description(), QVariant::fromValue(defaultDeviceInfo));
for (auto &deviceInfo: m_devices->audioInputs()) {
if (deviceInfo != defaultDeviceInfo)
m_deviceBox->addItem(deviceInfo.description(), QVariant::fromValue(deviceInfo));
}
- connect(m_deviceBox, QOverload<int>::of(&QComboBox::activated), this, &InputTest::deviceChanged);
+ connect(m_deviceBox, &QComboBox::activated, this, &InputTest::deviceChanged);
layout->addWidget(m_deviceBox);
m_volumeSlider = new QSlider(Qt::Horizontal, this);
@@ -185,11 +177,6 @@ void InputTest::initializeWindow()
m_suspendResumeButton = new QPushButton(this);
connect(m_suspendResumeButton, &QPushButton::clicked, this, &InputTest::toggleSuspend);
layout->addWidget(m_suspendResumeButton);
-
- window->setLayout(layout);
-
- setCentralWidget(window);
- window->show();
}
void InputTest::initializeAudio(const QAudioDevice &deviceInfo)
@@ -200,9 +187,8 @@ void InputTest::initializeAudio(const QAudioDevice &deviceInfo)
format.setSampleFormat(QAudioFormat::Int16);
m_audioInfo.reset(new AudioInfo(format));
- connect(m_audioInfo.data(), &AudioInfo::update, [this]() {
- m_canvas->setLevel(m_audioInfo->level());
- });
+ connect(m_audioInfo.data(), &AudioInfo::levelChanged,
+ m_canvas, &RenderArea::setLevel);
m_audioInput.reset(new QAudioSource(deviceInfo, format));
qreal initialVolume = QAudio::convertVolume(m_audioInput->volume(),
@@ -218,7 +204,7 @@ void InputTest::toggleMode()
m_audioInput->stop();
toggleSuspend();
- // Change bewteen pull and push modes
+ // Change between pull and push modes
if (m_pullMode) {
m_modeButton->setText(tr("Enable push mode"));
m_audioInput->start(m_audioInfo.data());
@@ -245,14 +231,19 @@ void InputTest::toggleMode()
void InputTest::toggleSuspend()
{
// toggle suspend/resume
- if (m_audioInput->state() == QAudio::SuspendedState || m_audioInput->state() == QAudio::StoppedState) {
+ switch (m_audioInput->state()) {
+ case QAudio::SuspendedState:
+ case QAudio::StoppedState:
m_audioInput->resume();
m_suspendResumeButton->setText(tr("Suspend recording"));
- } else if (m_audioInput->state() == QAudio::ActiveState) {
+ break;
+ case QAudio::ActiveState:
m_audioInput->suspend();
m_suspendResumeButton->setText(tr("Resume recording"));
- } else if (m_audioInput->state() == QAudio::IdleState) {
+ break;
+ case QAudio::IdleState:
// no-op
+ break;
}
}
diff --git a/examples/multimedia/audiosource/audiosource.h b/examples/multimedia/audiosource/audiosource.h
index c5662a397..7fde1b2cb 100644
--- a/examples/multimedia/audiosource/audiosource.h
+++ b/examples/multimedia/audiosource/audiosource.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
@@ -52,16 +52,17 @@
#define AUDIOINPUT_H
#include <QAudioSource>
-#include <QByteArray>
+#include <QMediaDevices>
+
#include <QComboBox>
-#include <QMainWindow>
-#include <QObject>
-#include <QPixmap>
#include <QPushButton>
#include <QSlider>
#include <QWidget>
+
+#include <QPixmap>
+
+#include <QByteArray>
#include <QScopedPointer>
-#include <QMediaDevices>
class AudioInfo : public QIODevice
{
@@ -78,12 +79,12 @@ public:
qint64 readData(char *data, qint64 maxlen) override;
qint64 writeData(const char *data, qint64 len) override;
+signals:
+ void levelChanged(qreal level);
+
private:
const QAudioFormat m_format;
qreal m_level = 0.0; // 0.0 <= m_level <= 1.0
-
-signals:
- void update();
};
@@ -101,11 +102,10 @@ protected:
private:
qreal m_level = 0;
- QPixmap m_pixmap;
};
-class InputTest : public QMainWindow
+class InputTest : public QWidget
{
Q_OBJECT
diff --git a/examples/multimedia/audiosource/main.cpp b/examples/multimedia/audiosource/main.cpp
index 1f6ae63a6..e45c2bd67 100644
--- a/examples/multimedia/audiosource/main.cpp
+++ b/examples/multimedia/audiosource/main.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
@@ -48,17 +48,17 @@
**
****************************************************************************/
-#include <QtWidgets>
-
#include "audiosource.h"
+#include <QtWidgets/QApplication>
+
int main(int argv, char **args)
{
QApplication app(argv, args);
- app.setApplicationName("Audio Source Test");
+ QCoreApplication::setApplicationName("Audio Source Test");
InputTest input;
input.show();
- return app.exec();
+ return QCoreApplication::exec();
}