// Copyright (C) 2021 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #ifndef AUDIOINPUT_H #define AUDIOINPUT_H #include #include #include #include #include #include #include #include #include class AudioInfo : public QIODevice { Q_OBJECT public: AudioInfo(const QAudioFormat &format); void start(); void stop(); qreal level() const { return m_level; } qint64 readData(char *data, qint64 maxlen) override; qint64 writeData(const char *data, qint64 len) override; qreal calculateLevel(const char *data, qint64 len) const; signals: void levelChanged(qreal level); private: const QAudioFormat m_format; qreal m_level = 0.0; // 0.0 <= m_level <= 1.0 }; class RenderArea : public QWidget { Q_OBJECT public: explicit RenderArea(QWidget *parent = nullptr); void setLevel(qreal value); protected: void paintEvent(QPaintEvent *event) override; private: qreal m_level = 0; }; class InputTest : public QWidget { Q_OBJECT public: InputTest(); private: void initializeWindow(); void initializeAudio(const QAudioDevice &deviceInfo); private slots: void toggleMode(); void toggleSuspend(); void deviceChanged(int index); void sliderChanged(int value); private: // Owned by layout RenderArea *m_canvas = nullptr; QPushButton *m_modeButton = nullptr; QPushButton *m_suspendResumeButton = nullptr; QComboBox *m_deviceBox = nullptr; QSlider *m_volumeSlider = nullptr; QMediaDevices *m_devices = nullptr; QScopedPointer m_audioInfo; QScopedPointer m_audioInput; bool m_pullMode = true; }; #endif // AUDIOINPUT_H