From 2c5801237cfb4eb5686da43dcf6a5fff9baa1f62 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Sun, 7 Sep 2025 15:15:10 +1000 Subject: plugin/ap: properly buffer data Run at a stable fps instead of in large chunks Use one thread for collecting and another for processing --- plugin/src/Caelestia/beattracker.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'plugin/src/Caelestia/beattracker.cpp') diff --git a/plugin/src/Caelestia/beattracker.cpp b/plugin/src/Caelestia/beattracker.cpp index b59abd7..11938d0 100644 --- a/plugin/src/Caelestia/beattracker.cpp +++ b/plugin/src/Caelestia/beattracker.cpp @@ -6,36 +6,36 @@ namespace caelestia { -BeatWorker::BeatWorker(uint_t sampleRate, uint_t hopSize, QObject* parent) - : AudioWorker(static_cast(sampleRate), static_cast(hopSize), parent) - , m_tempo(new_aubio_tempo("default", 1024, hopSize, sampleRate)) - , m_in(new_fvec(hopSize)) +BeatProcessor::BeatProcessor(AudioProvider* provider, QObject* parent) + : AudioProcessor(provider, parent) + , m_tempo(new_aubio_tempo("default", 1024, static_cast(m_chunkSize), static_cast(m_sampleRate))) + , m_in(new_fvec(static_cast(m_chunkSize))) , m_out(new_fvec(2)) {}; -BeatWorker::~BeatWorker() { +BeatProcessor::~BeatProcessor() { del_aubio_tempo(m_tempo); del_fvec(m_in); del_fvec(m_out); } -void BeatWorker::processData() { - process(m_in->data); -} +void BeatProcessor::processChunk(const QVector& chunk) { + std::transform(chunk.constBegin(), chunk.constEnd(), m_in->data, [](double d) { + return static_cast(d); + }); -void BeatWorker::consumeData() { aubio_tempo_do(m_tempo, m_in, m_out); if (m_out->data[0] != 0.0f) { emit beat(aubio_tempo_get_bpm(m_tempo)); } } -BeatTracker::BeatTracker(uint_t sampleRate, uint_t hopSize, QObject* parent) - : AudioProvider(parent) +BeatTracker::BeatTracker(int sampleRate, int chunkSize, QObject* parent) + : AudioProvider(sampleRate, chunkSize, parent) , m_bpm(120) { - m_worker = new BeatWorker(sampleRate, hopSize, this); + m_processor = new BeatProcessor(this); init(); - connect(static_cast(m_worker), &BeatWorker::beat, this, &BeatTracker::updateBpm); + connect(static_cast(m_processor), &BeatProcessor::beat, this, &BeatTracker::updateBpm); } smpl_t BeatTracker::bpm() const { -- cgit v1.2.3-freya