summaryrefslogtreecommitdiff
path: root/plugin/src/Caelestia/audioprovider.hpp
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-06 20:43:17 +1000
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-06 20:43:17 +1000
commit929d8fa40e371a2adbe1fe0f93f0ebf11bcb0981 (patch)
tree965f95279a862cf5853eb6af8ac60938a784a685 /plugin/src/Caelestia/audioprovider.hpp
parentplugin: fix cmake version (diff)
downloadcaelestia-shell-929d8fa40e371a2adbe1fe0f93f0ebf11bcb0981.tar.gz
caelestia-shell-929d8fa40e371a2adbe1fe0f93f0ebf11bcb0981.tar.bz2
caelestia-shell-929d8fa40e371a2adbe1fe0f93f0ebf11bcb0981.zip
plugin: async audio processing
Diffstat (limited to 'plugin/src/Caelestia/audioprovider.hpp')
-rw-r--r--plugin/src/Caelestia/audioprovider.hpp33
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