All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning, specifically the variant used by Rust.
Unreleased - TBD
0.1.10 - 2024-10-26
- Make
energy_to_loudness()
andEbuR128::gating_block_count_and_energy()
public. - Add example that shows basic usage for loudness normalization and another example that calculates ReplayGain 2.0 track and album again.
0.1.9 - 2024-06-26
- Avoid panic and non-sensical results if invalid (NaN or infinity) samples are provided and also enfore this behaviour with tests.
- Document Rust 1.60 as MSRV and check for this on the CI.
0.1.8 - 2023-04-27
- Revert usage of
slice::copy_within()
as this causes a 20-35% slowdown due to the compiler not being able to optimize the code as much as before. - Use correct pkg-config filename.
- Sync C header version with the C implementation.
- Fix various new clippy warnings.
- Use const generics to clean up some code.
0.1.7 - 2022-10-28
- Various internal refactors / cleanups.
- Updated dependencies.
0.1.6 - 2021-07-13
- Flush-to-zero implementation was refactored to prevent the possibility to
pass it to
mem::forget()
and thus leading to UB. This was not a problem in this codebase.
- Specialized, optimized implementation for common interpolations. This speeds up the resampling/interpolation used by the true peak detection for mono, stereo and four channels by a factor of 2-5x.
- Buffer-less true peak scanning instead of the previous implementation that goes via a temporary buffer. This speeds up true peak detection even more.
- Add seeding API for supporting chunked analysis, i.e. analyzing a bigger input split into separate chunks in parallel.
- Various refactoring.
unsafe
code was removed from the histogram handling without a measurable impact on the performance.- Use the
dasp
crates instead of the homegrown sample/frame abstraction.
0.1.5 - 2020-09-07
- Allow only a single channel when setting
DualMono
also inEbuR128::set_channel_map()
. The same constraint was already checked inset_channel()
. - Chunk size in some of the reference tests was changed as it was too big. This fixed the remaining two reference tests that were failing before.
EbuR128::reset()
to reset all state without reallocation.- Support for planar/non-interleaved inputs.
- Sample peak measurement was changed slightly and is now faster than the C implementation while still giving the same results.
- Use
SmallVec
for temporary vecs inEbuR128::loudness_global_multiple()
andloudness_range_multiple()
to prevent heap allocations, and also use it in the filter of the interpolator, which slightly speeds it up. - CI was switched from Travis to GitHub actions and greatly improved.
0.1.4 - 2020-08-31
- Fix compiler warning about unused use statement in benchmarks
- Fix various spelling errors in code comments
- Protect various calculations from overflows when creating a new instance or changing settings so that instead of panicking we return a proper error
- Use
std::f64::INFINITY
and similar instead off64::INFINITY
to fix compilation with older Rust versions. Version up to Rust 1.32.0 are supported now.
- Replaced various
Vec<T>
withBox<[T]>
to make it clearer that these are never changing their size after the initial allocation, and to also get rid of the additional unused storage of the capacity.
- More documentation for internal types
0.1.3 - 2020-08-28
- Return
-f64::INFINITY
instead off64::MIN
for values below the thresholds from various functions. This matches the behaviour of the C library and generally makes more sense.
0.1.2 - 2020-08-28
- Port libebur128 C code to Rust. This is a pure Rust implementation of it now and the only remaining C code is in the tests for comparing the two implementations.
0.1.1 - 2020-04-14
- Fix build with the MSVC toolchain.
- Initial release of ebur128.