Normalize 2.53 Download Link

A fast PCM WAV normalizer

For many tasks involving audio (e.g. compressing WAV files to MP3), it's nice to have a utility which can normalize audio files. The purpose of this is to make all audio files sound equally loud. I used to use CoolEdit (from Syntrillium) to do this task, but since this audio editor is capable of doing much more than just normalizing waves, it's a bit slow for this task. Besides, it cannot be easily called from a batch file.

So I looked for a better alternative, but found none. That was when I decided to write my own normalizer. It's a small Win32 console mode application called normalize. It can handle 8-bit and 16-bit PCM WAV files of up to 4 GBs (larger WAV files are not possible anyway), and it is fast. Hell, faster than your disk I/O anyway.

How it works It works like this: if you do not specify an amplification factor (either just as a factor or in decibels), it will first search the whole file for the negative and positive peaks. Then it will divide either 32767 or 127 (depending on whether the file is 16-bit or 8-bit) by the highest amplitude found (negative or positive, whichever is greater), and the result is the amplification factor. A substitution table is built in memory that contains the new (amplified) sample value for each possible input value. Thus the time-consuming task of doing floating-point multiplication has to be done only once (and at most 65536 multiplications). When these steps have been completed, normalize will pass over the file again, reading blocks of 64 KB to memory, amplifying them (by substituting sample values from the table), and writing them back to the file (of course overwriting the original data).

Fighting spurious peaks Sometimes WAV files have peak samples that occur so rarely or in non-critical passages that it can be afforded to clip them without introducing audible artifacts. If these are not clipped, they prevent normalizing the whole file to "normal" levels (as by default normalize does not clip any sample at all). To help combat this problem, Lapo Luchini contributed some code which internally produces a full statistic of the sample values and only considers peak values that have a given percentile in the statistic. It's called "smartpeak" (-s option); start with a percentile of 99.99% and decrease if necessary.

Speed On an AMD Athlon 1.1 GHz with an IBM 30 GB/7200 RPM/UDMA100 hard disk, a 1.3 GB WAV file can be normalized in about 3 minutes.

Improving Speed About the biggest speed gain can be achieved when using two hard disks instead of one. On one disk you put the source file, and let normalize write the output to a file on the other disk. Thus both disks can be working at the same time (one reading, the other writing), and the effective speed you get will be about the physical write speed of your disk. If you use only one disk, it will have to seek every now and then to read new data, and then again to write the normalized data back.

Download If you're looking for normalize-0.3x-beta: forget it, it's gone. I've figured out that the world doesn't need MMX/SSE/SIMD support for peak sample searching because everybody has got fast processors but very few people have got high-speed SCSI/RAID systems. So... since I don't have time to merge these two, I decided to get rid of the beta since it doesn't really make sense. Believe me.

Usage normalize v0.253 (c) 2000-2004 Manuel Kasper. All rights reserved. smartpeak code by Lapo Luchini. Visi
for updates.

Usage: normalize [flags] input-file

-ldon't find peaks but multiply each sample by
-adon't find peaks; amplify by(given in dB)
-mnormalize to(default 100)
-ssmartpeak: count as a peak only a signal that has the
given percentile (50%-100%)
-xabort if gain increase is smaller than(in dB)
-p prompt before starting normalization
-bspecify I/O buffer size (in KB; 16..16384; default 64)
-owrite output to(instead of overwriting original)
-q quiet (no screen output)
-d don't abort batch if user skips normalization of one file
-h display this help

error levels:
0 = no error,
1 = I/O error,
2 = parameter error,
3 = no amplification required,
4 = out of memory,
5 = user abort

- wildcards are allowed in 'input-file' (e.g. normalize *.wav) - 'input-file' needs to be a PCM WAV file.

License This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. normalize is 2000-2004 Manuel Kasper. All rights reserved.

Go Back