[−][src]Crate bs1770
Loudness analysis conforming to ITU-R BS.1770-4.
This library offers the building blocks to perform BS.1770 loudness measurements, but you need to put the pieces together yourself.
Stereo integrated loudness example
let sample_rate_hz = 44_100; let bits_per_sample = 16; let channel_samples: [Vec<i16>; 2] = load_stereo_audio(); // When converting integer samples to float, note that the maximum amplitude // is `1 << (bits_per_sample - 1)`, one bit is the sign bit. let normalizer = 1.0 / (1_u64 << (bits_per_sample - 1)) as f32; let channel_power: Vec<_> = channel_samples.iter().map(|samples| { let mut meter = bs1770::ChannelLoudnessMeter::new(sample_rate_hz); meter.push(samples.iter().map(|&s| s as f32 * normalizer)); meter.into_100ms_windows() }).collect(); let stereo_power = bs1770::reduce_stereo( channel_power[0].as_ref(), channel_power[1].as_ref(), ); let gated_power = bs1770::gated_mean(stereo_power.as_ref()); println!("Integrated loudness: {:.1} LUFS", gated_power.loudness_lkfs());
Structs
ChannelLoudnessMeter | Measures K-weighted power of non-overlapping 100ms windows of a single channel of audio. |
Power | The mean of the squares of the K-weighted samples in a window of time. |
Windows100ms | A |
Functions
gated_mean | Perform gating and averaging for a BS.1770-4 integrated loudness measurement. |
reduce_stereo | Combine power for multiple channels by taking a weighted sum. |
reduce_stereo_in_place | In-place version of |