js8call/JS8_Audio/NotificationAudio.h
rruchte 2d5b23ce84 Addresses issue #182 - Notification sound playback problems
Fix 8bit playback
Enable 24bit playback
Enable 32bit playback
Upmix mono to stereo

Set the sample format appropriately based upon the bits per channel in the format chunk instead of defaulting to 16 bits
2026-02-08 13:39:38 -06:00

42 lines
1 KiB
C++

#ifndef NOTIFICATIONAUDIO_H
#define NOTIFICATIONAUDIO_H
#include <QAudioDevice>
#include <QBuffer>
#include <QByteArray>
#include <QHash>
#include <QPair>
#include <QScopedPointer>
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<QAudioFormat, QByteArray>;
using Cache = QHash<QString, Entry>;
void playEntry(Cache::const_iterator);
static QByteArray pcm24le_to_int32le(const QByteArray &in);
static bool upmixMonoToStereoInPlace(QAudioFormat &fmt, QByteArray &data);
QScopedPointer<SoundOutput> m_stream;
Cache m_cache;
QAudioDevice m_device;
QBuffer m_buffer;
unsigned m_msBuffer;
};
#endif // NOTIFICATIONAUDIO_H