Loudness metering
LUFS meter
Each file is measured for integrated loudness (LUFS), loudness range (LU), short-term maximum and true peak (dBTP) using the K-weighting and gating defined in ITU-R BS.1770-4. Nothing is modified.
…or drag files and folders here. Add as many as you like — everything is processed on this device.
.3g2 .3gp .aac .aif .aifc .aiff .amr .caf .flac .m4a .m4r .m4v .mkv .mov .mp3 .mp4 .oga .ogg .opus .qt .wav .wave .weba .webm
In one paragraph
Delivery specifications are written in LUFS, and guessing does not work: perceived loudness has almost no relationship to peak level, so a file peaking at 0 dBFS can measure anywhere from −6 to −24 LUFS depending on how dense it is. If you are delivering to a platform, a broadcaster or a podcast network, you need the number.
This meter implements the measurement properly: a K-weighting filter (a high-shelf plus a high-pass, per BS.1770-4), mean-square power over 400 ms blocks with 75% overlap, an absolute gate at −70 LUFS and a relative gate 10 LU below the ungated mean. True peak is measured with 4× oversampling, because inter-sample peaks routinely exceed the highest sample value and that is what causes clipping in lossy decoders and DACs.
Does this change the audio quality?
A measurement tool only. No audio file is written, so your files cannot be altered. The methodology and every intermediate figure are shown with the result so the numbers can be checked against another meter.
- Integrated loudness is an average over the whole file. A quiet intro pulls it down; that is the specification working as designed, not an error.
- Loudness range needs enough material to be meaningful. Files under about 10 seconds report it as not applicable.
- This measures; it does not correct. Use the normaliser to reach a target.
A worked example
Checking an album against a −14 LUFS streaming target
- Drop the finished masters in. Each is measured as it decodes, in parallel on desktop.
- Read the integrated LUFS column: values above −14 will be turned down by the platform.
- Check true peak — anything above −1 dBTP risks clipping once the platform’s lossy encoder gets to it.
- Export the report as CSV to attach to your delivery notes.
What the numbers mean in practice
−14 LUFS is roughly what Spotify, YouTube and Amazon normalise to; delivering louder than that means the platform turns you down, so the extra loudness buys nothing and costs dynamic range. −16 LUFS is the podcast convention, −23 LUFS is EBU R128 broadcast. Keep true peak at or below −1 dBTP for anything that will be encoded to a lossy format downstream. A loudness range under 3 LU on a music track usually means heavy limiting.
Supported formats, limits and browser notes
Sonic Batch decodes with the browser when it can (faster, no engine download) and falls back to the self-hosted WebAssembly engine when it cannot. Every combination below works in every listed browser; the column only tells you which decoder does the work.
| Input | What it is | Chrome | Firefox | Safari | iOS |
|---|---|---|---|---|---|
| MP3 | The universal lossy format. Plays on essentially every device made since 1998. | Native | Native | Native | Native |
| WAV | Raw PCM samples with a small header. Perfect fidelity, roughly 10 MB per stereo minute. | Native | Native | Native | Native |
| M4A | Apple’s default AAC container. Better quality than MP3 at the same bitrate. | Native | Native | Native | Native |
| AAC | Bare AAC frames with no MP4 wrapper — used by broadcast streams and some hardware. | Native | Partial | Native | Native |
| OGG | Royalty-free lossy codec. Standard in game engines, Godot, Unity and Wikimedia. | Native | Native | Engine | Engine |
| Opus | The best-sounding lossy codec below 128 kbps. Used by WhatsApp, Discord and YouTube. | Native | Native | Partial | Partial |
| FLAC | Lossless compression, typically 50–60% of WAV size, bit-identical when decoded. | Native | Native | Native | Native |
| AIFF | Apple’s uncompressed PCM format — the WAV equivalent for Logic and Pro Tools. | Partial | Partial | Native | Native |
| M4R | An M4A file with a .m4r extension. iOS only lists it as a ringtone if it is ≤ 40 seconds. | Partial | Partial | Native | Native |
| AMR | Phone-call speech codec: 8 kHz mono, 4.75–12.2 kbps. Decode only — nothing should be created in it. | Engine | Engine | Engine | Engine |
| CAF | Apple container used by older iOS Voice Memos. Usually holds ALAC, IMA4 or raw PCM. | Engine | Engine | Partial | Partial |
| 3GP | Legacy phone recording container, normally AMR-NB or low-bitrate AAC audio. | Engine | Engine | Partial | Partial |
| MOV | QuickTime video from iPhone and DSLR cameras. Audio is normally AAC or PCM. | Partial | Engine | Native | Native |
| MP4 | The standard video container. Its audio track is almost always AAC. | Native | Partial | Native | Native |
| WebM | Open container used by browser recorders and YouTube downloads. Audio is Opus or Vorbis. | Native | Native | Partial | Partial |
- Max per file
- 400.0 MB
- Max per queue
- 4.00 GB
- Max duration
- 4:00:00
- Max archive
- 1.50 GB
These are enforced ceilings, checked before any decoding starts, not measured maximums — a file over the limit is rejected rather than allowed to exhaust the tab’s memory. Real-world capacity is lower on older phones, which is why the scheduler runs one file at a time on iOS and Safari.
Where your audio goes
Nowhere. Your file is read from disk into this browser tab with the File API, decoded and encoded by code running in that same tab, and handed back to you as a download. It is never transmitted.
That is a structural property of the application, not a policy promise: there are no API routes, no server actions and no third-party processing services in this project, so there is nothing capable of receiving a file. The page’s Content-Security-Policy also restricts connections to this origin, and the automated test suite includes a browser test that fails if any network request during import, preview, conversion or download carries media bytes.
The trade-off, stated plainly:results live in your tab’s memory until you download them. Closing or reloading the page discards them. There is nothing on a server to recover, because nothing was ever put there.
Troubleshooting
My reading differs from another meter by a fraction of a dB.
Small differences come from block alignment and resampling before the K-weighting filter. Anything within about 0.2 LU is agreement. Larger differences usually mean one meter is measuring momentary rather than integrated loudness.
Loudness range shows as not applicable.
The file is too short for the 3-second short-term windows the calculation needs. Around 10 seconds is the practical minimum.
True peak is higher than the sample peak.
That is expected and the reason true peak exists. Reconstructing the waveform between samples produces peaks the sample values never show. 4× oversampling reveals them.
Frequently asked questions
What is LUFS?
Loudness Units relative to Full Scale — a measurement of perceived loudness defined in ITU-R BS.1770. It applies a frequency weighting that approximates hearing and gates out silence, so it correlates with how loud something actually sounds.
What LUFS should my track be?
−14 LUFS for streaming platforms, −16 LUFS for podcasts, −23 LUFS for EBU R128 broadcast delivery. Check the specification you are delivering against; they differ.
What is the difference between LUFS and dB?
dBFS measures sample amplitude with no frequency weighting. LUFS measures perceived loudness with K-weighting and gating. Two files with identical peak dBFS can be many LU apart.
Is the measurement done on a server?
No. Decoding and the full BS.1770-4 calculation run in your browser on a worker thread. Nothing is uploaded.