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:
parent
e31132face
commit
8d120dd407
2 changed files with 5 additions and 4 deletions
|
|
@ -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});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue