Audio normalisation: LUFS, true peak and the target you can reach
Choose a listening level without confusing the loudest sample with the whole recording.
Free toolAudio Loudness NormaliserMeasure LUFS and true peak, match recordings to a target, then save a batch with a before-and-after report.Open the loudness normaliserWhat does normalising audio mean?
Normalising audio changes its level to meet a reference. Loudness normalisation uses the programme’s measured LUFS, while peak normalisation uses its highest peak.
Two recordings can share the same peak and sound very different in volume. LUFS considers filtered audio energy over time, with gates that exclude sufficiently quiet blocks.
| Measurement | What it tells you | What it cannot tell you |
|---|---|---|
| Integrated LUFS | The gated listening level across the programme. | Whether every speaker or section is balanced. |
| Sample peak, dBFS | The largest decoded sample value. | How high the reconstructed waveform goes between samples. |
| True peak, dBTP | An estimate of that reconstructed maximum. | The whole programme’s loudness or whether the original was already distorted. |
Choose the target for the destination
A delivery specification is a better starting point than a generic “make it louder” preset. Platforms and playback settings differ.
- Podcasts: Apple recommends around -16 LKFS, within 1 dB, with true peak no higher than -1 dBFS. LKFS and LUFS use the same scale here. See Apple’s audio requirements.
- Music comparison: Spotify describes -14 LUFS for Normal playback. Its app offers other levels, and its web player does not use normalisation. See Spotify’s playback guidance.
- Broadcast: EBU R128 uses -23 LUFS as its programme reference. You still need the broadcaster’s complete specification. See EBU loudness guidance.
Do not make a more dynamic mix flatter just to chase a number. First decide whether peak limiting is an acceptable change to the sound.
Mono and stereo can measure differently
Duplicating one mono channel into left and right adds about 3.01 LU to an uncompensated measurement. It doubles the counted energy.
We checked that relationship with a synthetic 1 kHz tone. Floi measures the actual channel layout and does not apply dual-mono compensation. Audacity offers a separate dual-mono option, so matching settings matters. See Audacity’s mono explanation.
Why a LUFS target can be unreachable
Your peak ceiling can prevent the gain needed for the target. That is a useful result to report.
Suppose a recording measures -24 LUFS with a true peak of -3 dBTP. A -16 LUFS target needs 8 dB of gain. A -1 dBTP ceiling allows only 2 dB. Preserving its dynamics leaves it at about -22 LUFS.
Limiting can make more gain possible by reducing peaks. It also changes transients. Listen to both versions before deciding, and measure the finished output.
Tested examples: the same target, different outcomes
In September 2026, we ran nine fixtures through both floi modes at -16 LUFS and -1 dBTP. The table shows representative outcomes, including missed targets.
| Recording | Mode | Before, LUFS | Result, LUFS | Result, dBTP | FFmpeg ebur128, LUFS |
|---|---|---|---|---|---|
| Quiet synthetic stereo clip | Preserve dynamics | -37.986 | -16.000 | -13.021 | -16.0 |
| Same clip, 20 dB louder | Preserve dynamics | -17.986 | -16.000 | -13.021 | -16.0 |
| Quiet clip with one sharp peak | Preserve dynamics | -37.795 | -36.877 | -1.020 | -36.9 |
| Quiet clip with one sharp peak | Limit peaks | -37.795 | -16.001 | -1.020 | -16.0 |
| Speech with room tone | Preserve dynamics | -23.778 | -18.323 | -1.020 | -18.3 |
| Speech with room tone | Limit peaks | -23.778 | -16.338 | -1.020 | -16.3 |
| Speech with noise | Limit peaks | -18.138 | -16.063 | -1.020 | -16.1 |
Method: Apple M1 Max, Node 24.18.0 and FFmpeg 9.0.2, 30 September 2026. Floi’s processing module exported PCM24 WAVs. We decoded those WAVs and compared their measurements with FFmpeg’s dedicated ebur128=peak=true analyser.
The synthetic clips are eight-second 48 kHz signals with 220, 440 and 880 Hz harmonics. The peak fixture adds one 0.8-amplitude sample. Speech fixtures are the public examples used by floi’s silence and noise removers. Additional fixtures cover silence gating, seeded noise and 44.1 and 96 kHz tones.
These are local module checks, not a browser speed benchmark or meter certification. They show why preserving dynamics and limiting peaks can produce different outcomes. The source and full results are in the project repository when these changes are published.
Use the same analyser when comparing readings
Different measurement paths can report different values. For the room-tone output above, FFmpeg’s loudnorm filter reported -19.45 LUFS, while ebur128 reported -18.3.
That observation is for this short fixture, not an accuracy claim about either filter. Keep the same file, channel treatment and analyser when comparing versions. The processing filter’s input report is recorded separately in our test results.
Three ways to normalise audio
Use the method that fits the length of your recording and the delivery format you need.
Browser batch workbench
Use floi for a queue of short recordings, WAV output and a measurement report. Its memory limits make long episodes a better fit for a desktop editor.
Audacity
Use a desktop editor when you need to balance speakers, edit long episodes or export compressed audio. Its stereo and dual-mono settings affect the result.
FFmpeg
Use command-line processing for repeatable jobs and long files. Its loudnorm filter offers linear and dynamic normalisation with custom targets.
Normalise in Audacity
Select the finished track, then open Effect → Volume and Compression → Loudness Normalization. Choose perceived loudness and enter your LUFS target.
Keep stereo channels paired if their balance is already correct. Set dual-mono treatment to match your intended meter. Check peaks after the effect, then listen and export. The Audacity manual explains these options.
Measure and normalise with FFmpeg
Use a dedicated measurement command to inspect the original or final file:
ffmpeg -i input.wav -af ebur128=peak=true -f null -For a simple processing pass, choose a loudness target and peak ceiling explicitly:
ffmpeg -i input.wav -af loudnorm=I=-16:TP=-1:LRA=11 -ar 48000 output.wavThis can apply dynamic processing. For a measured two-pass workflow, collect print_format=json output first, then supply the measured input values on the second pass. Read the official loudnorm documentation before treating linear mode as guaranteed.
Check the file you actually deliver
Measure after the final encoding step. A compressed delivery file can have different peaks from its WAV source.
- Finish editing and balancing the recording.
- Choose a target and ceiling from the destination’s specification.
- Normalise, then listen for unwanted changes to peaks or background noise.
- Encode the delivery format, measure it again and keep the report.
Frequently asked questions
Does normalising audio reduce its quality?
A fixed gain change preserves the relative level of every sample until quantisation. Limiting changes peaks and can change the sound. Exporting to a lossy format introduces another encoding step. Keep a lossless working file, listen after limiting, and recheck the final compressed delivery file.
Should I normalise before or after editing?
Normalise the finished mix. Noise reduction, equalisation, compression and removing pauses can change its measured loudness. Set the delivery level after those changes, then check the exported file.
Will loudness normalisation make two speakers equally loud?
Not within one mixed recording. Whole-file normalisation changes the programme’s overall level. Balance each speaker before the final mix, or use a dialogue leveller. A peak limiter controls transients; it does not identify who is speaking.