Fix audio::recorder::request

This commit is contained in:
Nikita Lisitsa 2026-07-19 19:39:45 +03:00
parent ae2efc94fb
commit 99b103b267

View file

@ -23,25 +23,26 @@ namespace psemek::audio
std::size_t request(std::size_t sample_count) override std::size_t request(std::size_t sample_count) override
{ {
std::size_t count = 0;
if (storage_.size() < samples_.size() + sample_count) if (storage_.size() < samples_.size() + sample_count)
{ {
storage_.resize(std::max<std::size_t>(samples_.size() + sample_count, storage_.size() * 2)); storage_.resize(std::max<std::size_t>(samples_.size() + sample_count, storage_.size() * 2));
samples_ = {storage_.data(), storage_.data() + samples_.size()}; samples_ = {storage_.data(), storage_.data() + samples_.size()};
} }
std::size_t count = 0;
if (auto stream = channel_->stream()) if (auto stream = channel_->stream())
{ {
count = stream->read({storage_.data() + samples_.size(), sample_count}); count = stream->read({storage_.data() + samples_.size(), sample_count});
if (count < sample_count) if (count < sample_count)
{
channel_->stop(); channel_->stop();
}
} }
std::fill(storage_.data() + samples_.size() + count, storage_.data() + samples_.size() + sample_count, 0.f); std::fill(storage_.data() + samples_.size() + count, storage_.data() + samples_.size() + count, 0.f);
samples_ = {storage_.data(), storage_.data() + samples_.size() + sample_count}; samples_ = {storage_.data(), storage_.data() + samples_.size() + count};
return sample_count; return count;
} }
util::span<float const> buffer() const override util::span<float const> buffer() const override