fix: audio distortion at queue source boundaries #817
+84
−37
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes incorrect
sample_rate()andchannels()metadata returned bySourcesQueueOutputwhen transitioning between sources with different formats or from an empty queue. This caused audio distortion at boundaries where metadata changes occurred.Changes:
Source::current_span_len()contract: returns total span size,Some(0)when exhaustedSamplesBufferto returnSome(total_size)orSome(0)when exhausted (wasNone)SamplesBuffer::size_hint()to return remaining samplesSourcesQueueOutputto peek next source metadata when current is exhaustedSource::is_exhausted()helper method for cleaner exhaustion checks throughout codebaseExactSizeIteratorforSamplesBufferSkipDurationprecision to avoid rounding errorsThis supersedes PR #812 with a cleaner implementation following the proper
current_span_len()contract. Enabled previously ignoredqueue::tests::basictest to prevent regressions.Fixes #811