#ifndef NOTIFICATIONAUDIO_H #define NOTIFICATIONAUDIO_H #include "NotificationSoundOutput.h" #include #include #include #include #include #include class SoundOutput; class NotificationAudio : public QObject { Q_OBJECT public: explicit NotificationAudio(QObject *parent = nullptr); ~NotificationAudio(); public slots: void status(QString message); void error(QString message); void setDevice(const QAudioDevice &device, unsigned msBuffer = 0); void play(const QString &filePath); void stop(); private: using Entry = QPair; using Cache = QHash; void playEntry(Cache::const_iterator); static QByteArray pcm24le_to_int32le(const QByteArray &in); static bool upmixMonoToStereoInPlace(QAudioFormat &fmt, QByteArray &data); QScopedPointer m_stream; Cache m_cache; QAudioDevice m_device; QBuffer m_buffer; unsigned m_msBuffer; }; #endif // NOTIFICATIONAUDIO_H