From 81e8d2727b927251aa45a8d2526fd9da08221d59 Mon Sep 17 00:00:00 2001 From: David Madl Date: Sun, 14 Jun 2026 17:46:32 +0200 Subject: [PATCH] feat: TempoController: minimal demo --- app/src/main/cpp/TempoController.cpp | 13 +++++++++++++ app/src/main/cpp/TempoController.h | 4 ++++ 2 files changed, 17 insertions(+) diff --git a/app/src/main/cpp/TempoController.cpp b/app/src/main/cpp/TempoController.cpp index 1559415..7fbc9b2 100644 --- a/app/src/main/cpp/TempoController.cpp +++ b/app/src/main/cpp/TempoController.cpp @@ -37,7 +37,9 @@ void TempoController::seekTo(double oldMarkerPosSec, double newMarkerPosSec) { */ void TempoController::onBeat(double t) { std::lock_guard lock(mMutex); + if(lastBeatT != 0.0) dtBeat = t - lastBeatT; lastBeatT = t; + setStretchFactor(); } /** @@ -46,5 +48,16 @@ void TempoController::onBeat(double t) { */ void TempoController::onStep(double t) { std::lock_guard lock(mMutex); + if(lastStepT != 0.0) dtStep = t - lastStepT; lastStepT = t; + setStretchFactor(); +} + +void TempoController::setStretchFactor() { + if(dtBeat == 0.0 || dtStep == 0.0) return; + double ratio = dtStep / dtBeat; + ratio = std::min(3.3, ratio); + ratio = std::max(0.3, ratio); + this->have_stretch_factor->store(true); + this->stretch_factor->store(ratio); } diff --git a/app/src/main/cpp/TempoController.h b/app/src/main/cpp/TempoController.h index 717563b..7d28bb1 100644 --- a/app/src/main/cpp/TempoController.h +++ b/app/src/main/cpp/TempoController.h @@ -17,6 +17,8 @@ private: std::atomic *stretch_factor; double lastBeatT; double lastStepT; + double dtBeat; + double dtStep; public: TempoController(std::atomic *have_stretch_factor, std::atomic *stretch_factor); void reset(std::vector beatTimesSec); @@ -33,6 +35,8 @@ public: * @param t marker position in sec of original music time */ void onStep(double t); +private: + void setStretchFactor(); }; #endif //LOCKSTEP_TEMPOCONTROLLER_H