From 6ae1a8e811f72bda251f8718fb148fcb6853bcc4 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Tue, 9 Sep 2025 16:31:02 +1000 Subject: plugin/ac: not singleton Also add nodeId prop BeatTracker not singleton Move BeatTracker and Cava to Audio service --- plugin/src/Caelestia/audiocollector.hpp | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'plugin/src/Caelestia/audiocollector.hpp') diff --git a/plugin/src/Caelestia/audiocollector.hpp b/plugin/src/Caelestia/audiocollector.hpp index 283b758..ecfae09 100644 --- a/plugin/src/Caelestia/audiocollector.hpp +++ b/plugin/src/Caelestia/audiocollector.hpp @@ -3,8 +3,9 @@ #include "service.hpp" #include #include -#include #include +#include +#include #include #include #include @@ -41,24 +42,35 @@ private: class AudioCollector : public Service { Q_OBJECT + QML_ELEMENT + + Q_PROPERTY(uint32_t nodeId READ nodeId WRITE setNodeId NOTIFY nodeIdChanged) public: - explicit AudioCollector(uint32_t sampleRate = 44100, uint32_t chunkSize = 512, QObject* parent = nullptr); + explicit AudioCollector(QObject* parent = nullptr); ~AudioCollector(); - static AudioCollector* instance(); - [[nodiscard]] uint32_t sampleRate() const; [[nodiscard]] uint32_t chunkSize() const; + [[nodiscard]] uint32_t nodeId(); + void setNodeId(uint32_t nodeId); + void clearBuffer(); void loadChunk(const int16_t* samples, uint32_t count); uint32_t readChunk(float* out, uint32_t count = 0); uint32_t readChunk(double* out, uint32_t count = 0); +signals: + void sampleRateChanged(); + void chunkSizeChanged(); + void nodeIdChanged(); + private: - inline static AudioCollector* s_instance = nullptr; - inline static std::mutex s_mutex; + const uint32_t m_sampleRate; + const uint32_t m_chunkSize; + uint32_t m_nodeId; + QMutex m_nodeIdMutex; std::jthread m_thread; std::vector m_buffer1; @@ -67,9 +79,7 @@ private: std::atomic*> m_writeBuffer; uint32_t m_sampleCount; - const uint32_t m_sampleRate; - const uint32_t m_chunkSize; - + void reload(); void start() override; void stop() override; }; -- cgit v1.2.3-freya