All Projects → pdeljanov → Symphonia

pdeljanov / Symphonia

Licence: mpl-2.0
Pure Rust multimedia format demuxing, tag reading, and audio decoding library

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to Symphonia

Av Converter
[av-converter.com] Audio and Video Converter, and YouTube downloader. Convert to MP3, MP4, AAC, FLAC, AC3, WAV, etc.
Stars: ✭ 97 (-49.21%)
Mutual labels:  wav, audio, mp3, mp4, aac, flac
Mediafile
A unified reader of metadata from audio & video files.
Stars: ✭ 138 (-27.75%)
Mutual labels:  wav, audio, mp3, mp4, aac, flac
Atldotnet
Fully managed, portable and easy-to-use C# library to read and edit audio data and metadata (tags) from various audio formats, playlists and CUE sheets
Stars: ✭ 180 (-5.76%)
Mutual labels:  wav, audio, mp3, mp4, aac, flac
loudgain
ReplayGain 2.0 loudness normalizer based on the EBU R128/ITU BS.1770 standard (-18 LUFS, FLAC, Ogg, MP2, MP3, MP4, M4A, AAC, ALAC, Opus, ASF, WMA, WAV, AIFF, WavPack, APE)
Stars: ✭ 127 (-33.51%)
Mutual labels:  mp4, mp3, aac, wav, flac
Audio Steganography Algorithms
A Library of Audio Steganography & Watermarking Algorithms
Stars: ✭ 146 (-23.56%)
Mutual labels:  wav, audio, mp3, aac, flac
Ni Media
NI Media is a C++ library for reading and writing audio streams.
Stars: ✭ 158 (-17.28%)
Mutual labels:  wav, audio, mp3, mp4, flac
Flacon
Audio File Encoder. Extracts audio tracks from an audio CD image to separate tracks.
Stars: ✭ 252 (+31.94%)
Mutual labels:  wav, audio, mp3, aac, flac
Music Metadata
Stream and file based music metadata parser for node. Supporting a wide range of audio and tag formats.
Stars: ✭ 455 (+138.22%)
Mutual labels:  wav, audio, mp3, mp4, flac
Audioplayer
Audio Player for Nextcloud and ownCloud
Stars: ✭ 179 (-6.28%)
Mutual labels:  wav, audio, mp3, mp4, flac
slibs
Single file libraries for C/C++
Stars: ✭ 80 (-58.12%)
Mutual labels:  mp4, mp3, aac, flac
Libnyquist
🎤 Cross platform C++11 library for decoding audio (mp3, wav, ogg, opus, flac, etc)
Stars: ✭ 311 (+62.83%)
Mutual labels:  wav, audio, mp3, flac
Sjmediacacheserver
A HTTP Media Caching Framework. It can cache FILE or HLS media. 音视频边播边缓存框架, 支持 HLS(m3u8) 和 FILE(mp4, mp3等).
Stars: ✭ 87 (-54.45%)
Mutual labels:  audio, mp3, media, mp4
audio-metadata
A library for reading and, in the future, writing audio metadata. https://audio-metadata.readthedocs.io/
Stars: ✭ 41 (-78.53%)
Mutual labels:  mp4, mp3, wav, flac
aplay-
a simple BitPerfect player
Stars: ✭ 23 (-87.96%)
Mutual labels:  mp4, mp3, aac, flac
Freac
The fre:ac audio converter project
Stars: ✭ 518 (+171.2%)
Mutual labels:  audio, mp3, aac, flac
Axiom
An FFmpeg GUI for Windows
Stars: ✭ 560 (+193.19%)
Mutual labels:  audio, mp3, mp4, flac
Music Metadata Browser
Browser version of music-metadata parser Supporting a wide range of audio and tag formats.
Stars: ✭ 105 (-45.03%)
Mutual labels:  wav, audio, mp3, flac
Youtube-DL-GUI
Graphical User Interace built around youtube-dl CLI
Stars: ✭ 38 (-80.1%)
Mutual labels:  mp3, aac, wav, flac
Esp8266audio
Arduino library to play MOD, WAV, FLAC, MIDI, RTTTL, MP3, and AAC files on I2S DACs or with a software emulated delta-sigma DAC on the ESP8266 and ESP32
Stars: ✭ 972 (+408.9%)
Mutual labels:  wav, mp3, aac, flac
Gogglesmm
Goggles Music Manager
Stars: ✭ 41 (-78.53%)
Mutual labels:  mp3, mp4, aac, flac

Symphonia

Symphonia is a pure Rust audio decoding and media demuxing library supporting AAC, OGG, FLAC, MP3, and WAV.

Features

Symphonia's planned features are:

  • Decode support for the most popular audio codecs
  • Reading the most common media container formats
  • Probing and guessing the correct format and decoder combination(s) for playback or inspection
  • Reading metadata
  • Providing a set of audio primitives for manipulating audio data efficiently
  • Providing a C API for integration into other languages
  • Providing a WASM API for web usage

Format and Codec Support Roadmap

Support for individual audio codecs and media formats is provided by separate crates. By default, Symphonia selects support for FOSS codecs and formats, but others may be included via the features option.

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

Status Meaning
- No work started or planned yet.
Next Is the next major work item.
Viable Many media streams play. Some streams may panic, error, or produce audible glitches. Some features may not be supported.
Usable Most media streams play. Inaudible glitches may be present. Most common features are supported.
Compliant All media streams play. No audible or inaudible glitches. All required features are supported.

A classification of usable indicates the end of major development. Though bugs and smaller issues can occur, it would generally be safe to use in an application. Compliance testing according to standards will be delayed until most codecs and demuxers are implemented so it's expected that many will stay in the category for a while.

Formats (Demux)

Format Status Feature Flag Default Crate
ISO/MP4 Usable isomp4 No symphonia-format-isomp4
MKV/WebM - mkv Yes symphonia-format-mkv
OGG Usable ogg Yes symphonia-format-ogg
Wave Compliant wav Yes symphonia-format-wav

Codecs (Decode)

Codec Status Feature Flag Default Crate
AAC-LC Usable aac No symphonia-codec-aac
HE-AAC (AAC+, aacPlus) - aac No symphonia-codec-aac
HE-AACv2 (eAAC+, aacPlus v2) - aac No symphonia-codec-aac
FLAC Compliant flac Yes symphonia-bundle-flac
MP1 - mp3 No symphonia-bundle-mp3
MP2 - mp3 No symphonia-bundle-mp3
MP3 Usable mp3 No symphonia-bundle-mp3
Opus - opus Yes symphonia-codec-opus
PCM Compliant pcm Yes symphonia-codec-pcm
Vorbis Next vorbis Yes symphonia-codec-vorbis
WavPack - wavpack Yes symphonia-codec-wavpack

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

Tags (Read)

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

Format Status
APEv1 -
APEv2 -
ID3v1 Usable
ID3v2 Usable
ISO/MP4 Usable
RIFF Usable
Vorbis comment (FLAC) Compliant
Vorbis comment (OGG) Compliant

Quality

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

  • Decode files as well as the leading free-and-open-source software decoders
  • Provide a powerful, consistent, and easy to use API
  • Have absolutely no unsafe blocks outside of symphonia-core
  • Have very minimal dependencies
  • Prevent denial-of-service attacks
  • Be fuzz-tested

Performance

Symphonia aims to be equivalent in speed to popular open-source C-based implementations.

Symphonia does not include explicit SIMD optimizations, however the auto-vectorizer is leveraged as much as possible and the results have been excellent. As Rust support for packed SIMD grows, Symphonia will include explicit SIMD optimizations where necessary.

Benchmarks (as of September 2019)

These benchmarks compare the single-threaded decoding performance of both Symphonia and FFmpeg with various audio files.

The benchmarks were executed on an Arch Linux system with a Core i7 4790k and 32GB of RAM, for a minimum of 20 runs each. Hyperfine was used to execute the test. The full benchmark script is as follows:

#!/bin/bash
IN="${1@Q}"
hyperfine -m 20 "ffmpeg -threads 1 -benchmark -v 0 -i ${IN} -f null -" "symphonia-play --decode-only ${IN}"

MP3, 192kbps @ 44.1kHz

Command Mean [ms] Min [ms] Max [ms] Relative
Symphonia 306.2 ± 3.0 301.8 312.5 1.1
FFmpeg 272.7 ± 4.3 267.6 285.3 1.0

MP3, 320kbps @ 44.1kHz

Command Mean [ms] Min [ms] Max [ms] Relative
Symphonia 355.1 ± 8.4 348.2 376.2 1.1
FFmpeg 316.0 ± 3.5 308.8 322.8 1.0

FLAC, 24-bit @ 96kHz

Decoder Mean [ms] Min [ms] Max [ms] Relative
Symphonia 453.6 ± 2.9 449.3 462.4 1.0
FFmpeg 501.9 ± 4.3 496.4 512.7 1.1

FLAC, 24-bit @ 48kHz

Command Mean [ms] Min [ms] Max [ms] Relative
Symphonia 324.0 ± 8.9 315.4 346.3 1.0
FFmpeg 331.0 ± 7.4 323.6 354.5 1.0

WAVE, S32LE @ 44.1kHz

Command Mean [ms] Min [ms] Max [ms] Relative
Symphonia 84.5 ± 1.8 81.8 89.1 1.0
FFmpeg 129.8 ± 3.4 123.4 136.1 1.5

Example Usage

Please see symphonia-play for a simple music player example.

Tools

Symphonia provides the following tools for debugging purposes:

  • symphonia-play for probing files and playing back audio, as well as serving as a demo application

Authors

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 an open-source project and contributions are very welcome! If you would like to make a large contribution, please raise an issue ahead of time to make sure your efforts fit into the project goals, and that there's no duplication of effort. Please be aware that all contributions must also be licensed under the MPL v2.0 license to be accepted.

When submitting a pull request, be sure you have included yourself in the CONTRIBUTORS file!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].