This tracks landing the changes from https://github.com/RustAudio/rodio-experiments into Rodio. This involves integrating the new rubato resampler and specializing it where possible.
Background:
For a long time we've had mysterious bugs round spans. Spans allow a source to change parameters (sample-rate and channel count) during playback. We've concluded that spans where a mistake as correctly handling audio that at any point is:
- really hard to do correctly.
- impossible to optimize well leading to bad performance.
Most audio should be converted to the playback parameters at the very start of the audio pipeline. To make this easier we are adding two new source types. Both do not allow parameters to change, one fixes this at runtime the other needs the parameters known at compile time.
Approach
This is a large overhaul at around 7700 lines of code (ignoring docs & comments). To keep things reviewable we'll do this in reasonably sized PRs of around 500 lines. Help is greatly appreciated!
Phase one
Implementation in: #903 and #904
Phase two
Implementation in: #905 and #910
Phase three:
Implementation in: #911
Phase four
Phase five
Phase six
Open Questions
- Do we deprecate Source in favor of DynamicSource?
- Do cons sources and the ConstSource trait get default generics?
This tracks landing the changes from https://github.com/RustAudio/rodio-experiments into Rodio. This involves integrating the new rubato resampler and specializing it where possible.
Background:
For a long time we've had mysterious bugs round spans. Spans allow a source to change parameters (sample-rate and channel count) during playback. We've concluded that spans where a mistake as correctly handling audio that at any point is:
Most audio should be converted to the playback parameters at the very start of the audio pipeline. To make this easier we are adding two new source types. Both do not allow parameters to change, one fixes this at runtime the other needs the parameters known at compile time.
Approach
This is a large overhaul at around 7700 lines of code (ignoring docs & comments). To keep things reviewable we'll do this in reasonably sized PRs of around 500 lines. Help is greatly appreciated!
Phase one
Implementation in: #903 and #904
Phase two
Implementation in: #905 and #910
Phase three:
Implementation in: #911
Phase four
Phase five
Phase six
Open Questions