rodio

Cross-platform audio playback and recording library for Rust

Library
Cargo
v0.22.2
2,442stars
Apache License 2.0

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
79/100Good
Development Activity96
Maintenance52
Community68
Maturity60
Momentum40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
79/100Good
Architecture86
Code Quality85
Innovation80
Learning Curve65

Rodio is a Rust library for audio playback and recording. It plays sounds and music from files or in-memory buffers, decodes common formats like MP3, FLAC, WAV, Vorbis, and MP4, and lets you build audio graphs by composing sources with effects such as amplification, filtering, mixing, and spatialization.

Playback is handled by cpal for cross-platform device access, with format decoding provided by Symphonia by default or optional format-specific decoders. Rodio is widely used in Rust game development and multimedia applications for its ergonomic Source trait and sink-based playback model.

What You Get

  • Audio playback from files and in-memory buffers via Sink and OutputStream
  • Decoding for MP3, FLAC, WAV, Vorbis, and MP4 formats
  • A composable Source trait with effects like amplify, filter, delay, and crossfade
  • Mixing and spatial/channel-volume audio processing
  • Audio recording support and WAV file output

Common Use Cases

  • Playing sound effects and background music in Rust games
  • Building multimedia and audio-processing desktop applications
  • Streaming and decoding audio from files or network buffers
  • Applying real-time effects and mixing multiple audio sources

Under The Hood

Architecture - Rodio centers on the Source trait (src/source), which represents an iterator of audio samples that can be wrapped by composable effect adapters such as amplify.rs, blt.rs (filters), crossfade.rs, and delay.rs. Playback flows through a Sink and OutputStream (stream.rs, player.rs) that pull samples and forward them to the host audio device via cpal, while a mixer (mixer.rs) and queue (queue.rs) combine and schedule multiple sources.

Tech Stack - Written in Rust (2021 edition, rust-version 1.89) with cpal for cross-platform device I/O, Symphonia as the default decoder, and optional format-specific decoders (claxon, minimp3, lewton, hound). A rich feature-flag matrix gates formats, recording, SIMD, real-time scheduling, and dithering/noise generation.

Code Quality - The repo has an integration test suite under tests/ covering decoders (flac_test.rs, mp4a_test.rs, wav_test.rs), seeking, and channel volume, plus benches/ for performance and CI via GitHub Actions. Source effects are each isolated in their own module, keeping the sample-processing pipeline readable, and an UPGRADE.md documents breaking changes across releases.

API Design - The Sink-and-Source model is highly ergonomic: you decode a file into a Source, chain effect adapters with iterator-style method calls, and append it to a Sink to play. Documentation on docs.rs and numerous examples ease onboarding, though the large feature-flag surface and frequent breaking changes between versions add some friction.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers

Search