From 9311470b1c5cc7eaf1afb89525c25b7a5ed3091d Mon Sep 17 00:00:00 2001 From: Geens Date: Tue, 10 Jun 2025 19:36:02 +0200 Subject: [PATCH] Fix bug in AudioData --- src/audio_data.rs | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/audio_data.rs b/src/audio_data.rs index 12cff54..92bae26 100644 --- a/src/audio_data.rs +++ b/src/audio_data.rs @@ -153,13 +153,15 @@ impl AudioData { let samples_needed = output_slice.len(); while samples_written < samples_needed { - let samples_remaining = samples_needed - samples_written; - let samples_until_loop = length - logical_position; - let samples_to_copy = samples_remaining.min(samples_until_loop); - // Map logical position to buffer position using sync offset let buffer_position = (logical_position + sync_offset) % length; + let samples_remaining_in_output = samples_needed - samples_written; + // This is the crucial change: determine how many contiguous samples can be read from the current buffer_position + let readable_samples_from_here = length - buffer_position; + + let samples_to_copy = samples_remaining_in_output.min(readable_samples_from_here); + // Copy from chunks to output slice chunks.copy_samples( &mut output_slice[samples_written..samples_written + samples_to_copy], @@ -172,12 +174,7 @@ impl AudioData { } samples_written += samples_to_copy; - logical_position += samples_to_copy; - - // Handle looping - if logical_position >= length { - logical_position = 0; - } + logical_position = (logical_position + samples_to_copy) % length; } Ok(())