mirror of
https://github.com/JS8Call-improved/JS8Call-improved
synced 2026-08-13 17:47:36 -04:00
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
42 lines
1 KiB
C++
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
|