Fix audio resampling in mp3 loading & in pitch effect: make the stream stop instead of infinitely looping the last resampled patch

This commit is contained in:
Nikita Lisitsa 2023-11-03 12:58:02 +03:00
parent e31132face
commit 8d120dd407
2 changed files with 5 additions and 4 deletions

View file

@ -62,8 +62,6 @@ namespace psemek::audio
}
else
{
resampler_pos_ = 0;
std::size_t request_size = std::max<std::size_t>(samples.size(), std::ceil(resampler_.ratio() * samples.size() / 2.f) * 2);
source_buffer_.resize(request_size);
auto source_count = stream_->read({source_buffer_.data(), request_size});
@ -71,6 +69,8 @@ namespace psemek::audio
if (source_count == 0)
break;
resampler_pos_ = 0;
resampler_.feed({source_buffer_.data(), source_buffer_.data() + source_count});
}
}

View file

@ -67,12 +67,13 @@ namespace psemek::audio
{
mp3dec_frame_info_t frame_info;
auto source_buffer_size = mp3dec_decode_frame(&decoder_, input + read_bytes_, data_->data.size() - read_bytes_, source_buffer_.data(), &frame_info);
resampler_pos_ = 0;
read_bytes_ += frame_info.frame_bytes;
if (frame_info.frame_bytes == 0)
break;
resampler_pos_ = 0;
read_bytes_ += frame_info.frame_bytes;
if (frame_info.channels == 1)
{
for (std::size_t i = source_buffer_size * 2; i > 0;)