Implementation of the EBU R128 loudness standard

Implementation of the EBU - TECH 3341)

ebur128

Implementation of the EBU R128 loudness standard.

The European Broadcasting Union Loudness Recommendation (EBU R128) informs broadcasters how they can analyze and normalize audio so that each piece of audio sounds roughly the same volume to the human ear.

This crate provides an API which analyzes audio and outputs perceived loudness. The results can then be used to normalize volume during playback.

Features:

  • Implements M, S and I modes (EBU - TECH 3341)
  • Implements loudness range measurement (EBU - TECH 3342)
  • True peak scanning
  • Supports all samplerates by recalculation of the filter coefficients

This crate is a Rust port of the libebur128 C library, produces the same results as the C library and has comparable performance.

EBU TECH 3341/3342 Compliance

Currently, the implementation passes all tests defined in EBU - TECH 3341 and EBU - TECH 3342.

C API

ebur128 optionally provides a C API that is API/ABI-compatible with libebur128. It can be built and installed via cargo-c:

This installs a shared library, static library, C header and pkg-config file that is compatible with libebur128.

LICENSE

ebur128 is licensed under the MIT license (LICENSE or #404).

Contribution

Any kinds of contributions are welcome as a pull request.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in ebur128 by you shall be licensed under the MIT license as above, without any additional terms or conditions.

Issues

Collection of the latest Issues

overdrivenpotato

overdrivenpotato

help wanted
4

Hello, thanks for making this library :-)

There seems to be a bug when calling loudness_range that occasionally triggers a panic. I've attached a stack trace with the relevant calls below. I've tried unsuccessfully to build a repro case but in my application the error is somewhat rare. Even with the same input data every time, it will fail spuriously about 1% of the time. For some context, I'm testing with a ~40 second 96kHz stereo clip buffered in as f32 samples.

Information - Updated Apr 04, 2022

Stars: 58
Forks: 9
Issues: 7

Repositories & Extras

Mini Audio Rust Bindings

For more examples, check out the examples directory

Mini Audio Rust Bindings
IDE

792

GLICOL (an acronym for "graph-oriented live coding language") is a computer music language written in...

Also, the Rust code of Glicol can be used as a standalone Rust audio library

GLICOL (an acronym for "graph-oriented live coding language") is a computer music language written in...

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

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

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

A crossplatform Rust bindings for the soloud audio engine library

Supported formats: wav, mp3, ogg, flac

A crossplatform Rust bindings for the soloud audio engine library

Audioserve is an audio and audio book server with a simple setup

Simple and easy to use audio and audiobook Rust web platform written in Rust

Audioserve is an audio and audio book server with a simple setup

A crate for working with audio in Rust

This is made up of several parts, each can be used independently of each other:

A crate for working with audio in Rust

A collection of filters for real-time audio processing

Bell, Low Pass, Bode Plot real time audio codec processing with Rust!

A collection of filters for real-time audio processing

Rusty Visualizer

An audio visualizer made in rust!

Rusty Visualizer

An audio sample rate conversion library for Rust

This library provides resamplers to process audio in chunks

An audio sample rate conversion library for Rust

Rust bindings for JACK Audio Connection Kit

Rust bindings for :heart: Sponsor

Rust bindings for JACK Audio Connection Kit
Facebook Instagram Twitter GitHub Dribbble
Privacy