pipecrab-audio: the platform-neutral boundary where audio enters and leaves a pipeline.
pipecrab-core owns the frame — [AudioChunk] and
[AudioFormat], re-exported here for convenience. This crate owns how
audio crosses the pipeline edge: the [AudioSource] and [AudioSink] traits
plus hardware-free [mock] implementations for tests. Concrete backends
(e.g. cpal for desktop) live in their own crates behind these same traits.
Audio is a first-party pipeline payload — a typed
DataFrame::Audio, never a Custom
frame — so nothing here downcasts. [Resampler] defines audio-to-audio
conversion, [ResamplerStage] adapts it to the pipeline, and
[RubatoSincResampler] provides the bundled windowed-sinc default.