diff --git a/libs/audio/source/effect/pitch.cpp b/libs/audio/source/effect/pitch.cpp index a1ccbfb8..6aa1b168 100644 --- a/libs/audio/source/effect/pitch.cpp +++ b/libs/audio/source/effect/pitch.cpp @@ -62,8 +62,6 @@ namespace psemek::audio } else { - resampler_pos_ = 0; - std::size_t request_size = std::max(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}); } } diff --git a/libs/audio/source/track_mp3.cpp b/libs/audio/source/track_mp3.cpp index 8da616df..f6ddc3c0 100644 --- a/libs/audio/source/track_mp3.cpp +++ b/libs/audio/source/track_mp3.cpp @@ -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;)