summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-07-25 21:17:38 +1000
committerjacqueline <me@jacqueline.id.au>2023-07-25 21:17:38 +1000
commitd8194135bbaad97d1f3428a74c7fc54ba3f604ec (patch)
treeeac58bb2229d3883987ef0876710e4edd7b2473b /src
parent80d7df910987db5201402fe987124f29f09344f3 (diff)
downloadtangara-fw-d8194135bbaad97d1f3428a74c7fc54ba3f604ec.tar.gz
Do time tracking without floats
Diffstat (limited to 'src')
-rw-r--r--src/audio/audio_task.cpp27
-rw-r--r--src/audio/include/audio_task.hpp4
-rw-r--r--src/drivers/i2s_dac.cpp4
3 files changed, 21 insertions, 14 deletions
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, AudioState, ui::UiState>(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 {
diff --git a/src/drivers/i2s_dac.cpp b/src/drivers/i2s_dac.cpp
index 74760543..d45173f7 100644
--- a/src/drivers/i2s_dac.cpp
+++ b/src/drivers/i2s_dac.cpp
@@ -119,8 +119,8 @@ I2SDac::I2SDac(IGpios* gpio, i2s_chan_handle_t i2s_handle)
// TODO: testing
// write_register(kDacGainLeft, 0b01, 0x50);
// write_register(kDacGainRight, 0b11, 0x50);
- write_register(kDacGainLeft, 0b01, 0x80);
- write_register(kDacGainRight, 0b11, 0x78);
+ write_register(kDacGainLeft, 0b01, 0x0);
+ write_register(kDacGainRight, 0b11, 0x0);
}
I2SDac::~I2SDac() {