summaryrefslogtreecommitdiff
path: root/plugin/src/Caelestia/cavaprovider.hpp
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-07 15:18:23 +1000
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-07 15:18:23 +1000
commit07bee231269399546e81539bb58149dd11ac4aa9 (patch)
tree1d6c9ad880a9299d0f3f275c353ebb8257ef9ae2 /plugin/src/Caelestia/cavaprovider.hpp
parentplugin/ap: properly buffer data (diff)
downloadcaelestia-shell-07bee231269399546e81539bb58149dd11ac4aa9.tar.gz
caelestia-shell-07bee231269399546e81539bb58149dd11ac4aa9.tar.bz2
caelestia-shell-07bee231269399546e81539bb58149dd11ac4aa9.zip
plugin: add cava provider
Diffstat (limited to 'plugin/src/Caelestia/cavaprovider.hpp')
-rw-r--r--plugin/src/Caelestia/cavaprovider.hpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/plugin/src/Caelestia/cavaprovider.hpp b/plugin/src/Caelestia/cavaprovider.hpp
new file mode 100644
index 0000000..d819f54
--- /dev/null
+++ b/plugin/src/Caelestia/cavaprovider.hpp
@@ -0,0 +1,64 @@
+#pragma once
+
+#include "audioprovider.hpp"
+#include <QObject>
+#include <cava/cavacore.h>
+#include <qqmlintegration.h>
+
+namespace caelestia {
+
+class CavaProcessor : public AudioProcessor {
+ Q_OBJECT
+
+public:
+ explicit CavaProcessor(AudioProvider* provider, QObject* parent = nullptr);
+ ~CavaProcessor();
+
+signals:
+ void valuesChanged(QVector<double> values);
+
+private:
+ struct cava_plan* m_plan;
+ double* m_in;
+ double* m_out;
+
+ int m_bars;
+ QVector<double> m_values;
+
+ Q_INVOKABLE void setBars(int bars);
+
+ void reload();
+ void initCava();
+ void cleanup();
+
+ void processChunk(const QVector<double>& chunk) override;
+};
+
+class CavaProvider : public AudioProvider {
+ Q_OBJECT
+ QML_ELEMENT
+
+ Q_PROPERTY(int bars READ bars WRITE setBars NOTIFY barsChanged)
+
+ Q_PROPERTY(QVector<double> values READ values NOTIFY valuesChanged)
+
+public:
+ explicit CavaProvider(int sampleRate = 48000, int chunkSize = 512, QObject* parent = nullptr);
+
+ [[nodiscard]] int bars() const;
+ void setBars(int bars);
+
+ [[nodiscard]] QVector<double> values() const;
+
+signals:
+ void barsChanged();
+ void valuesChanged();
+
+private:
+ int m_bars;
+ QVector<double> m_values;
+
+ void updateValues(QVector<double> values);
+};
+
+} // namespace caelestia