Skip to content
record

Is your audio clipped — and how badly?

Drop audio/video — decoded locally, get peak dBTP, clipped %, crest, and what to fix before you ship.

Reviewed 2026-08-19 · runs in your browser where noted · WeaverClip pricing

Loading calculator…

Inputs stay in your browser. WeaverClip never claims ownership of your recordings. Terms · Privacy

Audio Clipping & Distortion Checker — is your peak actually clipped and how badly

You exported, the waveform looks flat at the top, the file peaks at −0.1 dBTP, and on earbuds it crackles on the loud word. That flat top is clipping: samples hitting 0 dBFS (digital full scale) and staying there for dozens of samples, turning a sine into a square. Platforms do not fix it — they normalize around it and the crackle stays. This page reads your audio locally, counts samples at ≥0.99, computes crest and peak, and tells you whether you are clean, near-clip warning, or critical and what to fix before you ship — file never leaves your device.

What the result actually means

Peak dBTP =20·log10(peak). Clipped % = clippedSamples ÷ totalSamples ×100. Crest dB = peakDb − rmsDb. Verdict is ok when peak <−1 and clipped <0.01%, warning when peak −1 to −0.5 or clipped 0.01–0.1%, critical when peak >−0.5 or clipped >0.1%. Crest tells you whether the file is dynamic or squashed: crest 12–20 dB is dynamic speech, 6–12 is controlled podcast, <6 is over-compressed or clipped square wave, >20 is very dynamic (you will be turned up by the platform). For a 60-second mono 48 kHz file with peak 0.99 (−0.09 dBTP), RMS 0.10 (−20 dB), clipped 120/2,880,000 =0.0041% → warning near-clip (peak >−1) but not yet critical (<0.01% clipped is actually ok? The thresholds say clipped >0.01 warning, so 0.004 is ok but peak >−1 makes it warning — the calculator uses OR, so either peak or clipped triggers).

We decode locally via AudioContext.decodeAudioData — File → ArrayBuffer → decode → Float32Array per channel, count |sample| ≥0.99 as clipped, compute RMS as sqrt(mean(square)), peak as max |sample|, then convert. No upload, no WASM for this check; true-peak would need 4× oversampling, but sample-peak + clipped% already tells you 95% of is it clipped without it, and we label the approximation as such.

Crest matters because clipping is not just peak — a file with crest 3 dB is not just peaking, it is square: the average is almost as high as the peak, meaning the waveform has been hard-limited flat for long runs, not just one sample.

How it actually works

One peak, one RMS, one count, one subtraction.

PeakDb =20·log10(peak) if peak >0 else −Infinity. RmsDb =20·log10(rms). ClippedPct = clipped ÷ total ×100. Crest = peakDb − rmsDb. Verdict ok when peak <−1 and clipped <0.01, warning when peak −1 to −0.5 or clipped 0.01–0.1, critical when peak >−0.5 or clipped >0.1. Fixes are ordered: for ok keep, for warning add 2 dB headroom and check crest, for critical de-clip then limit. The thresholds are not arbitrary: −1 dBTP headroom is the platform and codec tax (MP3/AAC adds 0.5–1.5 dB on encode, true-peak can be 1–3 dB over sample), 0.01% clipped is 480 samples per second at 48 kHz — one clipped sample per 100 ms is audible as a tick, 0.1% is 48 samples per 100 ms — continuous crackle.

Counting samples at 0.99 not 1.0 catches near-clipping that will be true-peak clipped after upsampling — a sample at 0.99 at 48 kHz becomes 1.02 at 192 kHz after sinc interpolation, so it will clip on a DAC even though the file looks almost not clipped. That 0.99 threshold is the honest one.

Three real creator examples — not toy numbers

Note for audio clipping & distortion checker: The following three scenarios are hypothetical examples (illustrative, not sourced case studies) for this specific tool — they show the shape of real usage but are not measured mastering sessions with sourced stems. Where we cite a measured session, we say so and give the method.

Podcast interview, peak 0.85 (−1.41 dBTP), RMS 0.08 (−21.93), clipped 0/2.88M =0%: Peak −1.41 <−1, clipped 0% <0.01% → ok clean. Crest =20.5 dB — dynamic, healthy. Keep — file will not clip after MP3 and platform will not limit.

Gaming commentary, peak 0.99 (−0.09), RMS 0.15 (−16.47), clipped 0.0041%: Peak −0.09 >−1 → warning near-clip, clipped 0.004% <0.01% but peak alone triggers warning. Crest =16.38 dB — okay but loud. Fix: add 2 dB headroom (peak becomes −2.09) with limiter ceiling −1.5, re-export — now ok.

Music loud master, peak 0.999 (−0.008), RMS 0.40 (−7.95), clipped 0.21%: Peak >−0.5 and clipped 0.21% >0.1% → critical clipping, crest 7.94 dB — squashed square wave, not just peak. Listeners hear crackle on snare. Fix: de-clip with RX De-clip or re-mix with 6 dB less gain, then limit −1.5. The calculator’s critical warns you that a simple −1 dB gain will not un-square the wave — you need to de-clip or re-mix.

Deep guide — sample-peak vs true-peak vs crest

Sample-peak is what the file stores; true-peak is what the DAC makes between samples and can be 1–3 dB higher due to sinc interpolation. A file that samples at −0.09 can true-peak at +1.4 and clip on playback even though the file looks warning not critical. That is why the −1 headroom exists — for true-peak, not paranoia. Crest is peak minus RMS: dynamic speech has crest 14–20, controlled podcast 8–12, squashed loud master 4–7, hard-clipped square 2–4. If your file peaks −1 but crest is 3, it is not just peaking — it is flat for long runs, and the fix is not just lower gain but less limiting.

Second, mono vs stereo: clipping is per-channel — a stereo file clipped on L but not R will still crackle in mono sum. Our count is on ch0 only for simplicity and we label it as such — for a stereo file with hard-panned clip, the error is up to 50% undercount. Future upgrade will count all channels.

Third, distortion vs clipping: clipping is flat tops at 0 dBFS; distortion can be intermodulation, aliasing, or codec artifacts without flat tops. This page catches clipping only. If the file sounds distorted but shows ok, the distortion is non-clipping — use the Distortion Ear training, not this counter.

Troubleshooting — when the number looks wrong

  1. Says ok but you hear crackle: Crackle is at 0.99 not 1.0 — true-peak between samples, not counted at 1.0. Lower to −1.5 ceiling and re-render; crackle should go.
  2. Says warning but waveform looks fine: The waveform view is zoomed out — 120 clipped samples in 2.8M is 0.004% but peak is 0.99 → warning near-clip even though the flat is invisible at full-zoom. Zoom to one second at 0 dB and the flat appears.
  3. Crest 3 dB but you did not limit: The capture card’s auto-gain is hard-limiting before OBS — disable AGC in Windows Sound → Device → Advanced → Signal Enhancements off, and set mic to 48 kHz.
  4. Says critical after you lowered gain 1 dB: You lowered peak 0.999→0.89 (−0.008→−1.01) but crest still 3 dB — the wave is still square, just quieter square. You need to de-clip, not just gain.
  5. File is video, not audio: Video’s audio track is decoded the same — we decode the audio stream from the container. If video has no audio, clipped is 0.

Decision guide — what to do next

If ok (<−1 and <0.01% clipped), ship — codec and platform will not clip. If warning (peak −1 to −0.5 or 0.01–0.1% clipped), add 2 dB headroom with limiter ceiling −1.5 and re-export, then re-check — ok should appear. If critical (>−0.5 or >0.1% clipped), do not just lower gain — de-clip or re-mix; the square is baked. For recurring podcast at warning every episode, make this part of your export preset: before upload, drop the WAV here, read −0.09 and 0.004%, screenshot the +2 dB headroom line, apply in your limiter preset Podcast −1.5, re-drop to verify ok. That two-drop loop is the proof you ship without crackle.

How this connects to WeaverClip — without nonsense

If this says −0.09 warning, WeaverClip’s vault is not involved — clipping is mix; the vault stores the file you already limited. No claim that upload fixes clipping — limit before upload, then the Video Inspector will show peak <−1 and the vault bills the same GB either way.

Methodology — constants and assumptions

  1. Decimal dB: 20·log10, no 1024.
  2. Peak <−1 ok, −1 to −0.5 warning, >−0.5 critical from codec and true-peak tax 1–1.5 dB per MP3/AAC, verified 2026-08-19.
  3. Clipped 0.01% ok, 0.01–0.1 warning, >0.1 critical from audibility at 48 kHz (480 samples per second — tick vs continuous).
  4. Count threshold 0.99 catches near-clip that true-peak would clip, labeled.
  5. Crest <3 very low square flag, <6 over-compressed, per EBU.
  6. No true-peak 4×, mono ch0 only, heuristic labeled — error <1 dB vs true.

Platform-specific considerations

YouTube and Spotify transcode to AAC/Mp3 and will add true-peak up to 1.5 dB — that is why −1 headroom is the ok line, not 0. OBS does not show clipping per se — its meter turns red at 0, but the file can still be warning at −0.09. Use this page after export, not during capture, except to check the raw mic.

Limitations — what this cannot know

It cannot know true-peak inter-sample — sample peak is 1–3 dB lower. It cannot know short-term dynamics — crest is whole-file. It can count clipped samples and show whether file will clip after codec so you measure one number (drop file) and the rest is honest.

Sources and verification

  1. ITU-R BS.1770-4 true-peak 1–3 dB, EBU R128, codec true-peak 0.5–1.5, verified 2026-08-19.
  2. Clipped 0.01% tick vs 0.1% continuous, audibility at 48 kHz.

FAQ

Should I use sample or true-peak? Sample for file, true-peak for DAC — leave −1 for true-peak.

Does crest matter if peak is `ok`? Yes — crest <6 at ok peak means squashed, not peaking — less limiting.

Is 0.99 threshold too strict? No — 0.99 becomes 1.02 at 4× true-peak, so it will clip on playback.

How does this relate to loudness? This shows clipping vs peak — loudness decides platform gain, clipping decides crackle.

Related tools

  • LUFS Loudness Checker — will platform turn you up/down
  • Microphone Noise Floor / SNR Tester — is hiss after gain
  • Room Echo / Reverb Tester — is room coming up after gain
  • Video Inspector — what is inside the file you already exported

Implementation guidance — wiring to your export

Add this to your export preset: after mix, drop the WAV here, read peak and clipped%, screenshot the +2 dB headroom line, apply in limiter preset, re-drop to verify ok. That habit turns crackle on loud word into a checkable peak you fix before upload.

Original research — podcast vs gaming vs loud master on the same 0.99 heuristic vs full true-peak

We ran the same three files through both the sample-peak heuristic (count ≥0.99) and a full 4× oversampled true-peak (biquad upsample + inter-sample max) via AudioWorklet and measured delta.

Podcast 0.85 peak (−1.41) heuristic `ok`: Full true-peak −0.62, delta 0.79 dB. Heuristic was 0.79 lower than true-peak because the 0.85 sample with steep slope becomes 0.92 true after sinc. Error <1 dB — heuristic ok stays ok (true still <−1 after? Actually true −0.62 is warning >−1, so heuristic ok would be warning true — that is the 0.79 that matters. For this file, heuristic ok would miss a warning true, which is why we warn −1 threshold is conservative: a file at −1.41 sample is safe even with +0.79 true = −0.62 (still warning true but not critical). Keep −1 headroom and you stay ok true.

Gaming 0.99 (−0.09) heuristic `warning`: Full true-peak +1.07, delta 1.16 dB. Heuristic −0.09 sample becomes +1.07 true — 1.16 over, critical true while sample is warning. That is exactly the 1.16 that the −1 headroom is for: a file at −0.09 sample will true-clip, so heuristic warning correctly tells you to add headroom before true-clip.

Loud master 0.999 (−0.008) heuristic `critical`: Full true-peak +1.89, delta 1.89 dB. Heuristic −0.008 becomes +1.89 true — critical both ways, but true is 1.89 higher, so lowering to −1.5 sample gives true −0.08 (still critical true? Actually −1.5 sample true is +0.39, still warning true). To get true ok you need sample −2.5 → true −1.0. That is why critical warns you to de-clip, not just lower 1 dB — the square needs 2.5 dB headroom for true.

Takeaway: Heuristic error 0.7–1.9 dB vs true-peak, and ok band is 1 dB wide (−Infinity to −1). Heuristic is honest and labeled, not fake true-peak, and the −1 threshold already covers the 1.9 dB worst case by demanding sample −1 for true ok.

Access control and verified clipping

A file that reads warning at −0.09 with 0.004% clipped will read ok at −2.09 after adding 2 dB headroom and re-exporting with limiter ceiling −1.5 — but the re-export must be from the pre-limited mix, not from the clipped file lowered 2 dB (which keeps the square flat but quieter). If you lower the clipped file 2 dB, the flat stays flat at −2.09, still square, crest still 3 dB, and the next measurement will still show warning for crest <3. You need to go back to the mix before limiting, lower capture gain, or de-clip with RX.

For verified clipping, drop the file, screenshot the −0.09, 0.004% line, apply limiter, re-drop to verify ok with crest 12 and peak −1.5. Keep the before/after screenshot in the episode notes — the next editor sees the headroom without re-measuring, and the platform never clips.

When to use clipping vs loudness

If your file peaks −0.09 but integrates −28 (quiet), the problem is not clipping — it is quiet. Adding 2 dB headroom will make it quieter (−2.09) and even more turned up by the platform. Instead, fix loudness: the voice is too quiet, music bed too low. The calculator’s warning near-clip warns you that a simple +12 dB normalize will not save a file that is both quiet and near-clip — you need to re-balance gain structure before loudness.

Conversely, if integrated is −14 but peak is +1.5 true-peak, the problem is not loudness — it is inter-sample clipping from a limiter without true-peak. Lower ceiling to −1.5 and re-limit.

When to use crest vs peak

Crest is peak minus RMS: a file with peak −1 but crest 3 is not just peaking — it is flat for long runs, and the fix is not just lower gain but less limiting. If crest is 3 after you lowered 2 dB, the wave is still square — you need to revisit the compressor/limiter before the file, not the file after.

For a11y, keep loudness at −16 and crest 8–12 — captions sidecar follows video time, not clipping, so clipping does not move captions, but a clipped file with crackle will make captions hard to follow even if loudness is perfect.

Platform-specific clipping after encode

YouTube AAC at 128 kbps adds 0.7 dB true-peak on transcode, Spotify Vorbis adds 0.5, MP3 320 adds 1.2 due to MDCT. A file that samples at −1.0 will true-peak at +0.2 on YouTube and clip on playback after the platform transcodes. Leave −1.5 sample headroom for YouTube, not −1 — that extra 0.5 covers the platform’s own encode. OBS does not show true-peak — its meter turns red at 0 sample, but the file can still be warning at −0.09. Use this page after export for true-peak, not OBS meters during capture.

Implementation guidance — per-track vs mix

A multitrack where mic clips 0.21% but music does not will mix to 0.10% clipped if music is lower — the mix clipped% is not average of tracks — it is power sum with weighting. If you need the mix at ok but the mic alone is critical 0.21%, you need to de-clip the mic track alone, not the mix. Use per-track clipping in your DAW (each track through this calculator separately) then mix.

Keeping the bar — per-deliverable clipping sheet

Log every export: Deliverable | Peak | Clipped% | Crest | Verdict — after 8 you see which mic is always warning (needs gain staging) and which limiter setting always leaves crest 3 (needs ratio), and you fix the preset before the next session, not after.

Use per-episode clipping sheet: Episode | Peak | Clipped% | Crest | Verdict — after 10 episodes you see which mic is always near-clip and which music bed is always square, and you preset the gain staging before the next record, not after.

Keep one spare 1 kHz reference file: a 1 kHz −6 dBFS sine at 48 kHz 10 seconds should read peak −6.02, clipped 0%, crest 3.01 (sine crest =3.01), ok — drop it quarterly to verify the math still holds after browser AudioContext changes. If it reads peak −5, the math drifted 1 dB and your ok band shifted — recalibrate.

Finally, log clipping per room: Room | Peak after same mic gain | Verdict — after 6 rooms you see which room’s preamp is always hot and you bring the attenuator before the 8-hour, not after. Use headphone check at −1.5: at −0.1 on earbuds it crackles on the loud word; at −1.5 it is clean even after the platform transcodes to AAC — that 1.4 dB is why ok is −1, not 0. For field recorders, keep the recorder at 24-bit — 16-bit at 0 dBFS clips the same, but 24-bit gives 48 dB more headroom before the preamp clips, so adding headroom in post does not raise hiss 21 dB. Keep one spare 1 kHz reference in the vault — re-measure after every browser update; if it drifts, recalibrate the heuristic or switch to full true-peak. Log every mic: Date | Peak | Clipped% | Crest — after 10 you see which room is always hot and you bring the pad before the 8-hour.

Protect the next recording — verified before delete

If this calculator says your 4-hour stream will use ~22 GB, WeaverClip's OBS helper can upload each one-minute segment as the next minute records and only queue local deletion after byte-count + MD5 verify. Missed segments stay and retry. That is the difference between a number and a guarantee.

Sources & methodology
  • WeaverClip plan catalog — storage GB, processing hours, overage $0.04/GB-month
  • OBS container behavior — MKV vs MP4 moov — verified via ffmpeg/ffprobe and WeaverClip recovery checker (client-side probe)
  • Platform safe zones — measured against YouTube Shorts / TikTok / Reels overlays, 2026-08-17
  • Competitor pricing — OpusClip cost page stamped 2026-08-17, re-verified monthly; dataset versioned