fixed number of remaining samples calculation
Some checks failed
Build and Release / reuse (push) Has been cancelled
Build and Release / clang-format (push) Has been cancelled
Build and Release / get-info (push) Has been cancelled
Build and Release / windows-sdl (push) Has been cancelled
Build and Release / windows-qt (push) Has been cancelled
Build and Release / macos-sdl (push) Has been cancelled
Build and Release / macos-qt (push) Has been cancelled
Build and Release / linux-sdl (push) Has been cancelled
Build and Release / linux-qt (push) Has been cancelled
Build and Release / pre-release (push) Has been cancelled

should fix the small crackling sounds that play every now and again
This commit is contained in:
Vladislav Mikhalin 2024-11-02 18:31:41 +03:00
parent 18a4bd2014
commit f818f3e69f
2 changed files with 7 additions and 5 deletions

View file

@ -107,16 +107,17 @@ void AjmAt9Decoder::Decode(const AjmJobInput* input, AjmJobOutput* output) {
ASSERT_MSG(ret == At9Status::ERR_SUCCESS, "Atrac9Decode failed ret = {:#x}", ret);
in_buf = in_buf.subspan(bytes_used);
superframe_bytes_remain -= bytes_used;
const size_t samples_remain = gapless.total_samples != 0
? gapless.total_samples - gapless_decoded_samples
: std::numeric_limits<size_t>::max();
const size_t samples_remain =
gapless.total_samples != 0
? (gapless.total_samples - gapless_decoded_samples) * codec_info.channels
: std::numeric_limits<size_t>::max();
bool written = false;
if (gapless.skipped_samples < gapless.skip_samples) {
gapless.skipped_samples += codec_info.frameSamples;
if (gapless.skipped_samples > gapless.skip_samples) {
const u32 nsamples = gapless.skipped_samples - gapless.skip_samples;
const auto start = codec_info.frameSamples - nsamples;
written = write_output({pcm_buffer.data() + start, nsamples});
written = write_output({pcm_buffer.data() + start, nsamples * codec_info.channels});
gapless.skipped_samples = gapless.skip_samples;
total_decoded_samples += nsamples;
if (gapless.total_samples != 0) {

View file

@ -145,7 +145,8 @@ void AjmMp3Decoder::Decode(const AjmJobInput* input, AjmJobOutput* output) {
if (gapless.skipped_samples > gapless.skip_samples) {
const u32 nsamples = gapless.skipped_samples - gapless.skip_samples;
const auto start = frame->nb_samples - nsamples;
write_output({reinterpret_cast<s16*>(frame->data[0]), nsamples});
write_output({reinterpret_cast<s16*>(frame->data[0]),
nsamples * frame->ch_layout.nb_channels});
gapless.skipped_samples = gapless.skip_samples;
total_decoded_samples += nsamples;
if (gapless.total_samples != 0) {