How to normalize audio volume — free, browser-based, no upload
- Step 1Open the Peak Volume Normalizer — Go to the volume-normalizer tool. It loads the FFmpeg WASM engine in the page — there is no install and no sign-in.
- Step 2Drop one audio file — Drag in a single MP3, WAV, FLAC, M4A, OGG, Opus, or even a video file. This tool is single-file (no batch); the file is read straight into the tab, never uploaded.
- Step 3Set the target peak — Use the Target peak (dBFS) field. The range is −12 to 0 in 0.5 dB steps; −1 dBFS is the default and a safe, conventional ceiling.
- Step 4Pick the output format — Leave it as your source format or choose MP3, WAV, FLAC, or M4A (AAC) from the Output format selector.
- Step 5Run the normalize — Click run. Pass one detects the existing peak; pass two applies the calculated gain. A 4-minute song typically finishes in a few seconds.
- Step 6Download the result — Save the
-peaknormfile. Re-running on the output is a no-op shift (it is already at target), so it is safe to re-process.
What the tool actually does, control by control
Verified against the volume-normalizer case in the browser audio processor and its client UI. Defaults shown are what loads when you open the tool.
| Control | Range / options | Default | What it does |
|---|---|---|---|
| Target peak (dBFS) | −12 to 0, step 0.5 | −1 dBFS | The ceiling the loudest sample is shifted to. Gain applied = target − measured max_volume. |
| Output format | MP3, WAV, FLAC, M4A (AAC) | Source format (or MP3) | Container/codec for the result. MP3→libmp3lame, WAV→pcm_s16le, FLAC→flac, M4A→aac. |
| Detection | Automatic | — | FFmpeg volumedetect reads max_volume in pass one — you do not enter the source peak yourself. |
| Batch | Single file only | — | acceptsMultiple is false: one file per run. Process additional files one at a time. |
Peak normalisation vs the other leveling tools
Peak normalisation only moves overall gain. If you need perceived-loudness matching or dynamics control, use the linked sibling instead.
| Goal | Right tool | Why |
|---|---|---|
| Set the loudest sample to a fixed ceiling | This tool (peak normalize) | One constant gain shift; fastest, fully predictable level. |
| Make files sound equally loud (perception) | loudness-normalizer | EBU R128 / LUFS measures perceived loudness, not just peaks. |
| Guarantee no inter-sample / true-peak overs | true-peak-limiter | Oversampled true-peak limiting catches reconstruction overshoot a sample peak misses. |
| Even out loud and quiet sections of speech | speech-leveler | Compression reduces dynamic range; gain alone cannot do that. |
Cookbook
Real two-pass runs. The first number in each example is the file's measured peak (max_volume from pass one); the gain is simply target minus that. dBFS values are negative because digital full scale is 0.
A file peaking at −6.3 dBFS, normalised to −1
The common case: a track that already has decent level but a little spare headroom. Pass one measures the peak; pass two adds the exact difference.
Pass 1 (volumedetect): max_volume: -6.3 dB Target peak: -1 dBFS Gain applied = -1 - (-6.3) = +5.30 dB Pass 2: -af volume=5.30dB Result: loudest sample now at -1.0 dBFS, nothing clipped.
An already-hot file gets pulled DOWN
Peak normalising is not only a boost. A file that already peaks above your target is attenuated so the ceiling is respected.
Pass 1 (volumedetect): max_volume: -0.2 dB Target peak: -1 dBFS Gain applied = -1 - (-0.2) = -0.80 dB Pass 2: -af volume=-0.80dB Result: peak lowered to -1.0 dBFS (negative gain = quieter).
Keep WAV in, get WAV out
Set output format to WAV to stay lossless. The encoder is pcm_s16le, so there is no generation loss from the format step.
Input: interview.wav (max_volume: -9.1 dB) Target: -1 dBFS -> gain +8.10 dB Output format: WAV -> -c:a pcm_s16le Output: interview-peaknorm.wav
Pick a conservative −3 dBFS ceiling for further processing
If the file is going into a mix or another encode, leave more headroom. The slider goes to −12; −3 is a sensible pre-mix ceiling.
Source peak: -11.4 dB Target peak: -3 dBFS Gain applied = -3 - (-11.4) = +8.40 dB Result: peak at -3.0 dBFS, 3 dB of headroom left for the mix bus.
When peak normalising will NOT equalise loudness
Two files normalised to the same peak can still sound very different. Here a sparse and a dense file both hit −1 dBFS but differ ~7 LU in perceived loudness — that is a LUFS job.
fileA (sparse vocal): peak -1.0 dBFS, ~ -23 LUFS fileB (dense music): peak -1.0 dBFS, ~ -16 LUFS Same peak, ~7 LU apart in perceived loudness. For equal-loudness output use /audio-tools/loudness-normalizer.
Edge cases and what actually happens
File is pure silence
ExpectedIf the file contains no signal, volumedetect reports a max_volume of 0 or no usable peak (measuredPeak falls back to 0), so the gain is target − 0. Silence stays silence — there is nothing to boost into existence. Record or import real signal first.
Source already peaks above your target
By designIf max_volume is louder than your chosen ceiling, the computed gain is negative and the file is turned DOWN to meet the target. Peak normalisation is bidirectional, not a one-way boost.
Asking for 0 dBFS exactly
Supported0 is the top of the slider and is allowed. It is not recommended for delivery: reconstruction can produce inter-sample peaks above 0 dBTP on playback. Prefer −1, or run true-peak-limiter for an oversampled guarantee.
Two files, same peak, different loudness
By designPeak normalising matches the loudest sample, not perceived loudness. Files with different density will still sound unequal. Use loudness-normalizer for perceptual matching.
Expecting batch processing
Single file onlyThis tool's acceptsMultiple is false, so the dropzone takes one file per run. There is no in-session batch queue for peak normalise; process files individually.
Re-running on an already-normalised file
PreservedRunning the tool again with the same target re-measures the (now at-target) peak and applies a ~0 dB shift. It is idempotent — no compounding boost, no damage.
File exceeds 50 MB / 30 min on Free
413 too largeFree audio limits are 50 MB and 30 minutes per file. Larger or longer files need Pro (200 MB / 120 min) or Pro-media / Developer (100 GB / unlimited duration). The duration cap is separate from the size cap.
Lossy in, lossy out
Re-encodedIf you keep an MP3/M4A/OGG/Opus output, applying gain means a re-encode, which is one extra lossy generation. For zero generation loss choose WAV or FLAC output.
Source already clipped
PreservedNormalising cannot undo clipping that was baked into the recording — the flattened peaks are already in the samples. It only re-scales level. Re-record with more headroom if the source is clipped.
Very quiet source with a noise floor
ExpectedBoosting a quiet file raises its noise floor by the same gain. If hiss becomes audible after the boost, run ai-noise-reducer before or after normalising.
Frequently asked questions
What exactly does this tool do?
It peak-normalizes one audio file. Pass one measures the file's loudest sample (max_volume) with FFmpeg volumedetect; pass two applies a single volume=<gain>dB shift so that peak lands on your chosen ceiling (default −1 dBFS). It changes level only.
What is the default target and the allowed range?
The default is −1 dBFS. The Target peak field accepts −12 to 0 dBFS in 0.5 dB steps.
Is this peak normalisation or loudness (LUFS) normalisation?
Peak. It sets the loudest sample to a target dBFS. For perceived-loudness matching to a streaming target, use the loudness-normalizer instead.
Can it make several files the same loudness?
No. Same peak does not mean same perceived loudness — density differs between files. For equal-loudness output use loudness-normalizer.
Does it process multiple files at once?
No. The tool is single-file (acceptsMultiple is false). Process additional files one at a time.
Will normalising clip my audio?
Not at or below your target. The gain is computed so the existing peak lands exactly on the ceiling. A target below 0 (the default −1) leaves headroom and prevents the peak reaching full scale.
Can it turn a file down, not just up?
Yes. If the file already peaks above your target, the computed gain is negative and the file is attenuated to meet the ceiling.
What input formats are accepted?
MP3, WAV, FLAC, M4A, OGG, Opus, and video files — the audio track is read straight into the browser tab.
What output formats can I get?
MP3 (libmp3lame), WAV (pcm_s16le), FLAC (flac), or M4A/AAC (aac). Keep the source format for no container change, or transcode on the way out.
Is anything uploaded to a server?
No. All processing runs locally via FFmpeg 8.1 compiled to WebAssembly. Your file never leaves your device.
What are the size and length limits?
Free: 50 MB and 30 minutes per file, one file. Pro: 200 MB / 120 min / 10 files. Pro-media and Developer: 100 GB and unlimited duration. The duration cap is independent of the size cap.
How do I guarantee no true-peak overshoot for delivery?
Peak normalising looks at sample peaks, not reconstructed inter-sample peaks. For a true-peak guarantee (e.g. −1 dBTP), run true-peak-limiter after normalising.
Privacy first
Every JAD Audio tool runs entirely in your browser via FFmpeg (WebAssembly) and RNNoise. Your audio files never leave your device — verified by zero outbound network requests during processing.