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 16:57:40 +1000
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-06 16:57:40 +1000
commitaf43c1166e8ace50954dd1c6ac86769810104b53 (patch)
treef028c1984d66d0a4ac77d6856e6731fee4152b96 /plugin/src/Caelestia/audioprovider.hpp
parentplugin: abstract service + ref (diff)
downloadcaelestia-shell-af43c1166e8ace50954dd1c6ac86769810104b53.tar.gz
caelestia-shell-af43c1166e8ace50954dd1c6ac86769810104b53.tar.bz2
caelestia-shell-af43c1166e8ace50954dd1c6ac86769810104b53.zip
plugin: abstract audioprovider
Diffstat (limited to 'plugin/src/Caelestia/audioprovider.hpp')
-rw-r--r--plugin/src/Caelestia/audioprovider.hpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/plugin/src/Caelestia/audioprovider.hpp b/plugin/src/Caelestia/audioprovider.hpp
new file mode 100644
index 0000000..5564dc5
--- /dev/null
+++ b/plugin/src/Caelestia/audioprovider.hpp
@@ -0,0 +1,36 @@
+#pragma once
+
+#include "service.hpp"
+#include <QAudioSource>
+#include <QIODevice>
+#include <QObject>
+#include <qqmlintegration.h>
+
+namespace caelestia {
+
+class AudioProvider : public Service {
+ Q_OBJECT
+
+public:
+ explicit AudioProvider(int sampleRate = 44100, int hopSize = 512, QObject* parent = nullptr);
+ ~AudioProvider();
+
+protected:
+ int m_hopSize;
+
+ template <typename T> void process(T* outBuf);
+
+private:
+ QAudioSource* m_source;
+ QIODevice* m_device;
+
+ void start() override;
+ void stop() override;
+
+ void handleStateChanged(QtAudio::State state) const;
+
+ virtual void processData() = 0;
+ virtual void consumeData() = 0;
+};
+
+} // namespace caelestia