Skip to content

Tracking issue for audio engine rewrite #901

Description

@yara-blue

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

  • land const source
  • remove experimental from fixed source
  • land try-into adaptors/convertors between sources (others in phase two)
  • note overhaul in Readme
  • land most basic generators

Phase two

Implementation in: #905 and #910

  • channel conversions
  • resampler and integrate with rubato

Phase three:

Implementation in: #911

  • land one effect and pure_effect! macro
  • land all other effect
  • deprecation warning on effects in DynamicSource that are not sound

Phase four

  • add new combinators [a, b, c].mixed() etc.
  • add all generators (noise etc, function gen. etc)

Phase five

  • rename current source to dynamic source
  • add Source = DynamicSource type alias with deprecation warning
  • Remove placeholders

Phase six

  • port all examples
  • re-add controls to automatic gain control
  • rewrite Rodio main docs
  • update porting guide (needs to be really nice this time :3 )
  • prepare and make announcements

Open Questions

  • Do we deprecate Source in favor of DynamicSource?
  • Do cons sources and the ConstSource trait get default generics?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions