Voltar ao ranking

pdeljanov/Symphonia

Rust

Pure Rust multimedia format demuxing, tag reading, and audio decoding library

rustflacwavpcmmp3id3v2id3v1mediaaudiooggaacmp4
Crescimento de estrelas
Estrelas
3.3k
Forks
222
Crescimento semanal
Issues
39
1k2k3k
jan. de 2023mar. de 2024mai. de 2025jul. de 2026
Artefatoscrates.iocargo add symphonia
README

Symphonia

Crates.io Docs.rs GitHub Actions Status Deps.rs Crates.io MSRV MPL License

Symphonia is a pure Rust audio decoding and media demuxing library supporting AAC, ADPCM, AIFF, ALAC, CAF, FLAC, MKV, MP1, MP2, MP3, MP4, OGG, Vorbis, WAV, and WebM.

Getting Started · Documentation · Examples · Benchmarks


Features

  • Decode support for the most popular audio codecs with support for gapless playback
  • Demux the most common media container formats
  • Read most metadata and tagging formats
  • Automatic format and decoder detection
  • Basic audio primitives for manipulating audio data efficiently
  • 100% safe Rust
  • Minimal dependencies
  • Fast with no compromises in performance!

Additionally, planned features include:

  • Providing a C API for integration into other languages
  • Providing a WASM API for web usage

Roadmap

Support for individual audio codecs and media formats are provided by separate crates. By default, Symphonia only enables support royalty-free open standard codecs and formats, but others may be enabled using feature flags.

[!TIP] All formats and codecs can be enabled with the all feature flag.

Status

The following status classifications are used to determine the state of development for each format or codec.

Status Meaning
- In work or not started yet.
Good Many media streams play. Some streams may panic, error, or produce audible glitches. Some features may not be supported.
Great Most media streams play. Inaudible glitches may be present. Most common features are supported.
Excellent All media streams play. No audible or inaudible glitches. All required features are supported.

A status of Great indicates that major development is complete and that the feature is in a state that would be acceptable for most applications to use.

A status of Excellent is only assigned after the feature passes all compliance tests. If no compliance tests are readily available, then a status of Excellent will be assigned if Symphonia's output matches that of a reference implementation, or ffmpeg, over a large test corpus.

Formats (Demuxers)

Format Status Gapless* Feature Flag Default Crate
AIFF Great Yes aiff No symphonia-format-riff
CAF Good No caf No symphonia-format-caf
ISO/MP4 Great No isomp4 No symphonia-format-isomp4
MKV/WebM Good No mkv Yes symphonia-format-mkv
OGG Great Yes ogg Yes symphonia-format-ogg
Wave Excellent Yes wav Yes symphonia-format-riff

* Gapless playback requires support from both the demuxer and decoder.

[!TIP] All formats can be enabled with the all-formats feature flag.

Codecs (Decoders)

Codec Status Gapless Feature Flag Default Crate
AAC-LC Great No aac No symphonia-codec-aac
ADPCM Good Yes adpcm Yes symphonia-codec-adpcm
ALAC Great Yes alac No symphonia-codec-alac
HE-AAC (AAC+, aacPlus) - - he-aac No symphonia-codec-aac
HE-AACv2 (eAAC+, aacPlus v2) - - he-aac-v2 No symphonia-codec-aac
FLAC Excellent Yes flac Yes symphonia-bundle-flac
MP1 Great No mp1, mpa No symphonia-bundle-mp3
MP2 Great No mp2, mpa No symphonia-bundle-mp3
MP3 Excellent Yes mp3, mpa No symphonia-bundle-mp3
Opus - - opus Yes symphonia-codec-opus
PCM Excellent Yes pcm Yes symphonia-codec-pcm
Vorbis Excellent Yes vorbis Yes symphonia-codec-vorbis
WavPack - - wavpack Yes symphonia-codec-wavpack

A symphonia-bundle-* package is a combination of a decoder and a native demuxer.

[!TIP] All codecs can be enabled with the all-codecs feature flag. Similarly, all MPEG audio codecs can be enabled with the mpa feature flag.

Tags (Readers)

All metadata readers are provided by the symphonia-metadata crate.

For metadata formats that are standalone and not part of the media container, a feature flag may be used to toggle support.

Format Status Feature Flag Default
APEv1 Great ape Yes
APEv2 Great ape Yes
ID3v1 Great id3v1 Yes
ID3v2 Great id3v2 Yes
ISO/MP4 Great N/A N/A
RIFF Great N/A N/A
Vorbis comment (FLAC) Perfect N/A N/A
Vorbis comment (OGG) Perfect N/A N/A

[!TIP] All metadata formats can be enabled with the all-meta feature flag.

Third-party Demuxers and Decoders

Symphonia is a designed around a modular framework that allows the registration of third-party demuxers and decoders. This table provides a list of crates that implement such components.

[!IMPORTANT] This is not an endorsement of the quality, safety, or performance of these implementations. Please exercise your own judgement.

Crate Provides
symphonia-adapter-fdk-aac AAC-LC, HE-AAC, & HE-AACv2 via. libfdk-aac
symphonia-adapter-libopus Opus via. libopus

Quality

In addition to the safety guarantees afforded by Rust, Symphonia aims to:

  • Decode media as correctly as the leading free-and-open-source software decoders
  • Prevent denial-of-service attacks
  • Be fuzz-tested
  • Provide a powerful, consistent, and easy to use API

Performance

Symphonia aims to be comparable to, or faster than, popular open-source C-based implementations. Currently, Symphonia's decoders are generally +/-15% the performance of FFMpeg. However, the exact range will depend strongly on the codec, which features of the codec are being leveraged in the encoding, the Rust compiler version, and the CPU architecture being compiled for.

See the benchmarks for more information.

Optimizations

All SIMD optimizations are enabled by default. SIMD support will pull in the rustfft dependency.

Instruction Set Feature Flag Default
SSE opt-simd-sse Yes
AVX opt-simd-avx Yes
Neon opt-simd-neon Yes

[!TIP] All SIMD optimizations can be enabled with the opt-simd feature flag.

Examples

Basic usage examples may be found here.

For a more complete application, see symphonia-play, a simple music player.

Tools

Symphonia provides the following tools for debugging purposes:

  • symphonia-play for probing, decoding, validating, and playing back media streams.
  • symphonia-check for validating Symphonia's decoded output against various decoders.

Minimum Supported Rust Version

The minimum supported Rust version (MSRV) for Symphonia 0.6.x releases is 1.85.

This project considers incrementing the MSRV to be a SemVer breaking change.

Author

The primary author is Philip Deljanov.

Special Thanks

  • Kostya Shishkov (AAC-LC decoder contribution, see symphonia-codec-aac)

License

Symphonia is provided under the MPL v2.0 license. Please refer to the LICENSE file for more details.

Contributing

Symphonia is a free and open-source project that welcomes contributions! To get started, please read our Contribution Guidelines.

Repositórios relacionados
farion1231/cc-switch

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

Rustcrates.ioMIT Licenseai-toolsclaude-code
ccswitch.io
119.8k8k
rustdesk/rustdesk

An open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.

Rustcrates.ioGNU Affero General Public License v3.0remote-controlremote-desktop
rustdesk.com
118.6k18.1k
rust-lang/rust

Empowering everyone to build reliable and efficient software.

Rustcrates.ioApache License 2.0rustcompiler
rust-lang.org
114.8k15.4k
tauri-apps/tauri

Build smaller, faster, and more secure desktop and mobile applications with a web frontend.

Rustcrates.ioApache License 2.0rustwebview
tauri.app
109.3k3.8k
denoland/deno

A modern runtime for JavaScript and TypeScript.

Rustcrates.ioMIT Licensedenotypescript
deno.com
107.8k6.2k
oven-sh/bun

Incredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one

Rustcrates.ioOtherbunbundler
bun.com
95k4.9k
unionlabs/union

The trust-minimized, zero-knowledge bridging protocol, designed for censorship resistance, extremely high security, and usage in decentralized finance.

Rustcrates.ioApache License 2.0blockchaincosmos
union.build
73.9k3.9k
rtk-ai/rtk

CLI proxy that reduces LLM token consumption by 60-90% on common dev commands. Single Rust binary, zero dependencies

Rustcrates.ioApache License 2.0agentic-codingai-coding
rtk-ai.app
72.4k4.5k
toeverything/AFFiNE

There can be more than Notion and Miro. AFFiNE(pronounced [ə‘fain]) is a next-gen knowledge base that brings planning, sorting and creating all together. Privacy first, open-source, customizable and ready to use.

TypeScriptnpmOthereditorcrdt
affine.pro
70.7k5.1k
openinterpreter/openinterpreter

A coding agent for open models like Kimi K3

Rustcrates.ioApache License 2.0coding-agentdeepseek
openinterpreter.com
67.1k5.8k
BurntSushi/ripgrep

ripgrep recursively searches directories for a regex pattern while respecting your gitignore

Rustcrates.ioThe Unlicenseripgreprecursively-search
66.4k2.7k
alacritty/alacritty

A cross-platform, OpenGL terminal emulator.

Rustcrates.ioApache License 2.0terminal-emulatorsopengl
alacritty.org
65k3.5k