From 929d8fa40e371a2adbe1fe0f93f0ebf11bcb0981 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Sat, 6 Sep 2025 20:43:17 +1000 Subject: plugin: async audio processing --- plugin/src/Caelestia/audioprovider.hpp | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) (limited to 'plugin/src/Caelestia/audioprovider.hpp') diff --git a/plugin/src/Caelestia/audioprovider.hpp b/plugin/src/Caelestia/audioprovider.hpp index 5564dc5..205be2c 100644 --- a/plugin/src/Caelestia/audioprovider.hpp +++ b/plugin/src/Caelestia/audioprovider.hpp @@ -4,18 +4,22 @@ #include #include #include +#include #include namespace caelestia { -class AudioProvider : public Service { +class AudioWorker : public QObject { Q_OBJECT public: - explicit AudioProvider(int sampleRate = 44100, int hopSize = 512, QObject* parent = nullptr); - ~AudioProvider(); + explicit AudioWorker(int sampleRate = 44100, int hopSize = 512, QObject* parent = nullptr); + ~AudioWorker(); + + void init(); protected: + int m_sampleRate; int m_hopSize; template void process(T* outBuf); @@ -24,8 +28,8 @@ private: QAudioSource* m_source; QIODevice* m_device; - void start() override; - void stop() override; + Q_INVOKABLE void start(); + Q_INVOKABLE void stop(); void handleStateChanged(QtAudio::State state) const; @@ -33,4 +37,23 @@ private: virtual void consumeData() = 0; }; +class AudioProvider : public Service { + Q_OBJECT + +public: + explicit AudioProvider(QObject* parent = nullptr); + ~AudioProvider(); + +protected: + AudioWorker* m_worker; + + void init(); + +private: + QThread* m_thread; + + void start() override; + void stop() override; +}; + } // namespace caelestia -- cgit v1.2.3-freya