diff options
Diffstat (limited to 'plugin/src/Caelestia/audioprovider.hpp')
| -rw-r--r-- | plugin/src/Caelestia/audioprovider.hpp | 33 |
1 files changed, 28 insertions, 5 deletions
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 <QAudioSource> #include <QIODevice> #include <QObject> +#include <QThread> #include <qqmlintegration.h> 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 <typename T> 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 |