Vixen
02b45cc4
csharp
public sealed class LoudnessMeterEffect

How loud the mix actually is, by the standard every platform measures against.

No guide page documents this yet — the page shows what the code says about itself.

Remarks

Loudness is not level. A peak meter says how close the signal is to clipping, which is a question about arithmetic; a loudness meter says how loud it sounds, which is a question about ears. Two mixes that peak at the same place can be six decibels apart to a listener, and it is the second number that Xbox, PlayStation and every streaming platform hold you to. Shipping without one means finding out at certification.

ITU-R BS.1770 / EBU R128, which is one algorithm with two names. K-weight each channel — a high-pass and a high shelf, standing in for the head and torso — take the mean square over a window, weight the surrounds up by 1.5 dB, sum, and put it in decibels with an offset that makes a 1 kHz sine at −23 dBFS read −23 LUFS. Every part of it is in the standard and none of it is a choice.

The gate is the part everybody gets wrong. Integrated loudness is not the mean of the whole programme: blocks below −70 LUFS are dropped outright, and then blocks more than 10 LU below the mean of what is left are dropped too, and the mean is taken again. Without it, a minute of silence at the end of a level halves the reported loudness of the level.

It changes nothing. The signal passes through untouched — this is a meter, and a meter that altered what it measured would be a compressor.

Sample peak, not true peak. A true-peak meter oversamples by four to catch what the reconstruction filter will do between samples, which is another filter bank per channel for a number that is typically a decibel higher. It is owed for certification proper; the sample peak is what says whether the mix is clipping now.

Fields and properties (10)

  • public bool Enabled

    Whether it does anything. A bypassed effect costs one branch a block.

  • public float Momentary

    The last 400 milliseconds, in LUFS. Negative infinity when there is nothing yet.

  • public float ShortTerm

    The last three seconds, in LUFS.

  • public float Integrated

    Everything since the last Reset, gated, in LUFS.

  • public float SamplePeak

    The loudest single sample since the last Reset.

  • public float TruePeak

    The loudest point of the waveform a converter will actually produce, which is not the same thing and is never lower.

  • public float TruePeakDbTp

    The same in dBTP, which is the unit a ceiling is written in.

  • public bool MeasureTruePeak

    Whether to oversample for TruePeak.

  • public float LoudnessRange

    How far the programme moves, in LU: the spread between its quiet passages and its loud ones.

  • public long GatedBlocks

    How many 400 ms blocks have gone into Integrated after gating.

Methods (3)

  • public void Prepare(in AudioFormat format, int maxFrames)

    Sizes and clears every buffer the effect needs.

  • public void Process(Span<float> buffer, int frameCount, int channels)

    Processes a block in place.

  • public void Reset()

Used by (2)

  • LoudnessTestsVixen.Audio.Tests
  • TruePeakTestsVixen.Audio.Tests