Oscillody
Oscillody is a free, real-time, oscilloscope-based audio visualizer. You can import up to 4 stems, customize the visual…
Pure Rust multimedia format demuxing, tag reading, and audio decoding library
git clone https://github.com/pdeljanov/Symphonia.gitpdeljanov/SymphoniaSymphonia 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.
Additionally, planned features include:
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.
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.
| 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.
| 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.
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.
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 |
In addition to the safety guarantees afforded by Rust, Symphonia aims to:
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.
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.
Basic usage examples may be found here.
For a more complete application, see symphonia-play, a simple music player.
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.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.
The primary author is Philip Deljanov.
symphonia-codec-aac)Symphonia is provided under the MPL v2.0 license. Please refer to the LICENSE file for more details.
Symphonia is a free and open-source project that welcomes contributions! To get started, please read our Contribution Guidelines.
more like this
Oscillody is a free, real-time, oscilloscope-based audio visualizer. You can import up to 4 stems, customize the visual…
A low-level audio recorder plugin which uses miniaudio as backend and supporting all the platforms. It can detect silen…
search projects, people, and tags