From d8194135bbaad97d1f3428a74c7fc54ba3f604ec Mon Sep 17 00:00:00 2001 From: jacqueline Date: Tue, 25 Jul 2023 21:17:38 +1000 Subject: Do time tracking without floats --- src/audio/audio_task.cpp | 27 +++++++++++++++++---------- src/audio/include/audio_task.hpp | 4 ++-- 2 files changed, 19 insertions(+), 12 deletions(-) (limited to 'src/audio') diff --git a/src/audio/audio_task.cpp b/src/audio/audio_task.cpp index dbe5d50e..7d117cb4 100644 --- a/src/audio/audio_task.cpp +++ b/src/audio/audio_task.cpp @@ -53,9 +53,9 @@ static constexpr std::size_t kSampleBufferSize = 16 * 1024; Timer::Timer(StreamInfo::Pcm format) : format_(format), - last_seconds_(0), - total_duration_seconds_(0), - current_seconds_(0) {} + current_seconds_(0), + current_sample_in_second_(0), + total_duration_seconds_(0) {} auto Timer::SetLengthSeconds(uint32_t len) -> void { total_duration_seconds_ = len; @@ -75,15 +75,22 @@ auto Timer::AddBytes(std::size_t bytes) -> void { uint8_t bytes_per_sample = ((format_.bits_per_sample + 16 - 1) / 16) * 2; samples_sunk /= bytes_per_sample; - current_seconds_ += samples_sunk / format_.sample_rate; + current_sample_in_second_ += samples_sunk; + bool incremented = false; + while (current_sample_in_second_ > format_.sample_rate) { + current_seconds_++; + current_sample_in_second_ -= format_.sample_rate; + incremented = true; + } - uint32_t rounded = std::round(current_seconds_); - if (rounded != last_seconds_) { - last_seconds_ = rounded; + if (incremented) { + ESP_LOGI("timer", "new time %lu", current_seconds_); + /* events::Dispatch(PlaybackUpdate{ - .seconds_elapsed = rounded, - .seconds_total = - total_duration_seconds_ == 0 ? rounded : total_duration_seconds_}); + .seconds_elapsed = current_seconds_, + .seconds_total = 0, + }); + */ } } diff --git a/src/audio/include/audio_task.hpp b/src/audio/include/audio_task.hpp index e316f17a..f80c8878 100644 --- a/src/audio/include/audio_task.hpp +++ b/src/audio/include/audio_task.hpp @@ -29,9 +29,9 @@ class Timer { private: StreamInfo::Pcm format_; - uint32_t last_seconds_; + uint32_t current_seconds_; + uint32_t current_sample_in_second_; uint32_t total_duration_seconds_; - float current_seconds_; }; class AudioTask { -- cgit v1.2.3