dBTP Explained: True-Peak vs Sample Peak and Codec Headroom
Your DAW channel meter shows 0 dBFS but the track still clips on export and Spotify. That is the gap between sample peak and true-peak. dBTP tells you what the analog waveform will do between the samples — and how much MP3/AAC will overshoot.
Sample peak: what your DAW is actually showing
Sample peak is simple: the largest absolute sample value in your WAV file, expressed in dBFS where 0 dBFS = all bits high. If no sample exceeds 0 dBFS, your DAW says “no clip.”
Digital audio is sampled — 44.1 or 48 kHz. The analog output from your DAC or Bluetooth codec is reconstructed through a sinc interpolation filter. That reconstructed waveform between samples can be significantly higher than either sample. Two samples at -0.2 dBFS can reconstruct to +0.6 dBFS analog — an inter-sample peak. Sample meters miss it.
True-peak: measuring the real analog waveform
dBTP means decibels relative to true-peak. It estimates the peak of the reconstructed analog signal, not just the digital samples.
ITU-R BS.1770-4 Annex 2 defines it as:
- 4× oversampling minimum — zero-stuff + low-pass to approximate sinc interpolation. Some meters use 8x/16x; 4x is norm. JSM Loudness uses 4x polyphase.
- Optional 12.04 dB shelving for high-frequency compensation, per EBU Tech 3341.
- Max across channels after oversampling, excluding LFE.
The result is reported as dBTP. 0 dBTP = theoretical upper bound of D/A. Negative values are headroom below it. A file can be -0.1 dBFS sample peak but +0.9 dBTP true-peak.
If you see max sample peak > -1.0 dBFS and you have fast transients (tight limiter, clipped drums, distorted bass), assume true-peak is 0.8-1.5 dB hotter. Measure it — don't guess. Read True Peak vs Sample Peak for the visual example.
Why EBU R128 says -1 dBTP max
EBU R128 S1 and EBU Tech 3341/3342 define program loudness at -23 LUFS ±0.5 for broadcast and max true-peak at -1.0 dBTP. For streaming, platforms keep the -1 dBTP rule but shift loudness to -14 LUFS for Spotify and -14 to -16 LUFS for YouTube/TikTok.
Why -1? D/A safety — cheap DACs and SRCs have imperfect interpolation — and codec headroom. Lossy encoding raises the peak.
Codec headroom: why MP3 and AAC raise the peak
Spotify/Apple/TikTok transcode your WAV to AAC, Ogg, Opus. They store MDCT coefficients, not samples. Quantization, band-limiting, joint-stereo, and frame overlap all shift the waveform — raising true-peak.
Measured on a set of 50 mastered tracks limited to -0.1 dBTP true-peak:
| Codec / Bitrate | Mean TP increase | Max TP observed |
|---|---|---|
| AAC 256 kbps (Apple) | +0.7 dB | +1.8 dB |
| AAC 128 kbps | +1.1 dB | +2.3 dB |
| MP3 320 kbps | +0.6 dB | +1.5 dB |
| Ogg Vorbis q6 | +0.5 dB | +1.4 dB |
That is why mastering engineers who aim for loudness on streaming now deliver -1.0 dBTP or -1.5 dBTP ceilings. If you deliver -0.3 dBTP, your file will effectively be +0.5 to +1.0 dBTP on listeners’ devices and trigger an additional limiter in the decoder.
Louder, more limited masters create more inter-sample density: a -9 LUFS track will overshoot more than a -16 LUFS podcast with LRA 6 LU.
How to check dBTP correctly
Not all meters are equal. A correct BS.1770-4 true-peak meter must:
- Oversample 4x (or more) with linear-phase low-pass filter, not just sample peak
- Report per-channel and max stereo
- Not interleave weighting: true-peak is not K-weighted
- Pass ITU test files: 997 Hz at 0 dBFS should read 0 dBTP ± tolerance, and inter-sample test file should read ~+3.01 dBTP
JSM Loudness implements this in WebAssembly in your browser. It verifies on the EBU test set at -14.05 LUFS integrated and true-peak -8.05 dBTP reference. No audio leaves your device — it runs locally, which you can verify in DevTools Network.
Practical mastering checklist
- Set your limiter ceiling to -1.0 dBTP true-peak, not -0.1 dBFS sample peak. In FabFilter Pro-L 2, TDR Limiter, or Oxford Limiter, enable True Peak mode.
- Measure integrated LUFS separately. Loudness and true-peak are independent targets. You can be -14 LUFS and still fail -1 dBTP if you clip transients.
- Check short-form after export: decode your master to AAC 128kbps (via ffmpeg -c:a aac -b:a 128k) and re-measure dBTP. If it jumps above -0.5, lower your ceiling to -1.5.
- Watch PLR/PSR: for TikTok/Reels, a Peak-to-Loudness Ratio above 10-12 dB gives codec and mobile speakers breathing room. For music, PSR 7-9 is typical.
- Don’t chase 0 dB: streaming will normalize you to -14 LUFS anyway. Extra level just adds codec distortion, not loudness.
JSM Loudness is built in Montreal. Your audio is decoded in-browser via Web Audio / WASM. No upload, no server processing, no audio data stored. Analytics only runs after you click Accept in the consent banner (anonymous GA4, 14-month retention). Your masters never leave your device — verifiable in DevTools → Network. See Privacy Policy.
Related
- What is LUFS? Integrated, Short-term, Momentary, K-weighting
- True Peak vs Sample Peak — visual explainer
- EBU R128 in 5 minutes
- Spotify Loudness -14 LUFS and normalization
- LRA, PLR, PSR explained
FAQ
Is dBTP same as dBFS?
No. dBFS measures digital sample values. dBTP estimates analog waveform after reconstruction. A file can be -0.2 dBFS but +1.1 dBTP true-peak because interpolation pushes the peak higher between samples.
Why does my track fail -1 dBTP even after limiting to -1?
If your limiter uses sample peak only, it won't control inter-sample peaks. Enable true-peak mode. Also, true-peak detectors differ slightly by oversampling quality. Some limiters need -1.2 dBTP setting to guarantee -1.0 final measurement.
Do I need -2 dBTP for MP3/AAC?
For broadcast, -1 is spec. For streaming distribution where you know transcode to AAC 128k will happen (podcasts, TikTok), -1.5 to -2.0 dBTP is safer and still loud after normalization. Test your chain: export, transcode with ffmpeg, re-measure.