diff options
Diffstat (limited to 'plugin/src/Caelestia/audiocollector.hpp')
| -rw-r--r-- | plugin/src/Caelestia/audiocollector.hpp | 28 |
1 files changed, 19 insertions, 9 deletions
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 <atomic> #include <cstdint> -#include <mutex> #include <pipewire/pipewire.h> +#include <qmutex.h> +#include <qqmlintegration.h> #include <spa/param/audio/format-utils.h> #include <stop_token> #include <thread> @@ -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<float> m_buffer1; @@ -67,9 +79,7 @@ private: std::atomic<std::vector<float>*> m_writeBuffer; uint32_t m_sampleCount; - const uint32_t m_sampleRate; - const uint32_t m_chunkSize; - + void reload(); void start() override; void stop() override; }; |