From dbf5117dc670f6ca017debc493e35f23ec45f65a Mon Sep 17 00:00:00 2001 From: lisyarus Date: Sat, 18 Jul 2026 19:03:29 +0300 Subject: [PATCH] Fix length computation in truncate filter --- libs/audio/source/effect/truncate.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/libs/audio/source/effect/truncate.cpp b/libs/audio/source/effect/truncate.cpp index d4b55ac4..dac065c9 100644 --- a/libs/audio/source/effect/truncate.cpp +++ b/libs/audio/source/effect/truncate.cpp @@ -13,19 +13,21 @@ namespace psemek::audio { truncate_impl(stream_ptr stream, duration length) : stream_(std::move(stream)) - , length_(length) + , remaining_(length.samples()) + , total_length_(stream_->played() + remaining_) {} std::optional length() const override { - return length_.samples(); + return total_length_; } std::size_t read(util::span samples) override { - auto played = stream_->played(); - auto max_count = std::min(length_.samples() - played, samples.size()); - return stream_->read(samples.prefix(max_count)); + auto const max_count = std::min(remaining_, samples.size()); + auto const count = stream_->read(samples.prefix(max_count)); + remaining_ -= count; + return count; } std::size_t played() const override @@ -35,7 +37,8 @@ namespace psemek::audio private: stream_ptr stream_; - duration length_; + std::size_t remaining_; + std::size_t total_length_; }; }