Skip to content

True Peak ​

True Peak estimates the highest level a signal will actually reach when it is played back. Digital audio is stored as a series of separate sample points; on playback those points are smoothed back into a continuous waveform. That reconstructed waveform can rise higher between two samples than either sample itself, and True Peak estimates that in-between maximum.

A file can have sample peaks below 0 dBFS and still clip after conversion or playback reconstruction. This is the inter-sample peak (ISP) problem. The visible sample points can look safe while the reconstructed analog-like waveform rises above the limit between those points.

LOUDNESS · TRUE PEAKIDLE
Inter-sample peaks — why a master clips on playback

The dots are samples of a sine wave; the curve shows its analytic waveform. A crest can fall between samples, above every stored value. The gap depends on frequency and phase, so it does not increase smoothly toward Nyquist. Compare the analytic peak with the oversampled meter reading. Raising the sample peak toward 0 dBFS can leave an inter-sample over that clips a converter or processor without sufficient headroom.

Sample peak
-0.3 dBFS
Frequency (×Nyquist)
0.4

Practical Starting Point ​

A common release ceiling is around -1 dBTP — decibels true peak, the same dB scale as sample peak but measured on the reconstructed waveform. The libsonare demo uses a true-peak limiter stage and exposes ceiling and lookahead controls in Studio mode.

For the delivery-safety side of this topic, see True Peak Safety.

-1 dBTP is not a universal law, but it is a practical starting point because it leaves room for platform encoding and playback reconstruction. If raising the ceiling adds harshness or distortion after export, prioritize safety over a small loudness increase.

ControlMeaningDefault
CeilingThe maximum allowed reconstructed peak level.-1 dBTP
LookaheadHow early the limiter can react before a peak arrives.1 ms
ReleaseHow quickly the limiter recovers after reducing peaks.50 ms

Measure it in libsonare ​

The true-peak meter oversamples 4x by default and accepts 1, 2, 4, 8 or 16. The limiter that enforces a ceiling is the chain stage maximizer.truePeakLimiter; True Peak Safety shows it in use.

typescript
import { init, meteringPeakDb, meteringTruePeakDb } from '@libraz/libsonare';

await init();

const samplePeak = meteringPeakDb(samples, sampleRate);        // dBFS
const truePeak = meteringTruePeakDb(samples, sampleRate);      // dBTP, 4x oversampling
python
import libsonare as sonare

audio = sonare.Audio.from_file("song.wav")
sample_peak = audio.peak_db()
true_peak = audio.true_peak_db()
bash
sonare meter song.wav   # native CLI only: includes sample peak and true peak (--oversample sets the factor)

What to Check by Ear ​

True peak problems often appear where kick and bass hit together, where cymbals are loud in a chorus, or after saturation creates sharp peaks. Listen for small bursts of grit, splashy cymbals, or low-end clicks that were not present before limiting.

If lowering the ceiling barely changes the sound, choose the safer setting. If lowering it removes punch immediately, do not solve the whole problem at the limiter; revisit dynamics, saturation, or input level earlier in the chain.

Even when the sample-peak meter looks safe, codec conversion and device-side reconstruction can lift peaks.

Typical material may rise by roughly +0.5 to +1 dB. In harder cases, especially when low and high energy hit together, peaks can rise by around +2 dB.

Right before release, check both the exported WAV and a quick render through the expected delivery codec, such as MP3, AAC, or Opus.

Relationship to LUFS ​

The true-peak ceiling is a separate constraint from the loudness target. Raising the ceiling because you want more LUFS is a risky trade: it buys a little level now and pays for it with clipping after codec conversion or device-side reconstruction.

If the loudness target is out of reach, look first at how much gain reduction the limiter is doing. When it is working deep the whole time, the natural fix is earlier in the chain — input gain, compression, low-end balance — not the ceiling. How the loudness stage drives the limiter, and how far it is allowed to, is on Stereo, Limiter, and Loudness Controls.

Sample-Accurate Limiting ​

The libsonare true-peak limiter enforces its ceiling per sample at the oversampled rate, and every stage inside it — lookahead, gain smoothing, the guard after decimation — is sample-serial and carries its state across calls. Nothing in the output is derived from a whole-block statistic. That is what sample-accurate means here, and it has one consequence a bounce depends on: the output does not depend on how the host chunks the audio. The same material limited in 256-sample callbacks, in 16384-sample blocks, in one offline pass, or in ragged splits that land mid-transient comes out identical, sample for sample.

Why this is the property that matters: a render is reproducible only if the host's buffer size is not an input to the sound. The streaming chain and the offline chain drive the same limiter, so at this stage a streaming preview at 512-sample blocks and an offline render of the same file agree, and a WAV exported again under a different buffer setting is the same WAV. A limiter that rescaled each block by that block's own maximum would drag every sample in the block down for one ringing one, and its level would become a function of the block size — which is what a block-independent design rules out.

An independent true-peak meter can read above the configured ceiling because the reconstruction filter and oversampling factor affect the estimate. One 4x-limiter / 8x-meter fixture measured about +0.02 dB; that is a fixture result, not a universal bound or a guarantee that increasing drive cannot change the overage. The chain reports outputTruePeakDbtp at the limiter’s factor. Record both the factor and the interpolation method when comparing meters, and validate the exported signal with the delivery meter and sufficient headroom.

Implementation notes

True peak detection is different from sample peak detection: it oversamples the signal and takes the maximum of the reconstructed waveform rather than of the stored sample points. libsonare performs that oversampling with a polyphase interpolation filter, evaluating the reconstruction at each intermediate phase — the polyphase filter is how the oversampling is done, not an alternative to it. The meter supports 1x, 2x, 4x, 8x, and 16x, and the demo defaults to 4x.

The demo limiter has lookahead, so it can prepare gain reduction before a peak arrives rather than reacting after the peak has already clipped. Longer lookahead can be safer, but excessive values may soften transient feel.

The ceiling guarantee belongs to the default polyphase path, which limits the oversampled signal and decimates the result. The applyGainAtInputRate option computes the gain envelope at the oversampled rate but applies it to the base-rate signal; it is best-effort and does not guarantee the inter-sample ceiling, because the limited signal is never re-synthesized at the oversampled rate. Leave it off; the default path is the one that guarantees the ceiling.

Related: True Peak Safety, The Mastering Chain, LUFS