• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

config/H14-Sep-2005-12,0779,619

doc/H03-May-2022-3,2152,710

m4/H14-Sep-2005-2,0461,935

nid3lib/H14-Sep-2005-5,6474,083

packaging/H14-Sep-2005-228191

po/H03-May-2022-2,0651,746

src/H14-Sep-2005-7,8745,721

test/H14-Sep-2005-703570

xmms-rva/H14-Sep-2005-950752

ABOUT-NLSH A D06-Jul-200567.1 KiB997950

COPYINGH A D09-Sep-200517.6 KiB341281

INSTALLH A D26-Nov-19997.6 KiB183143

Makefile.amH A D14-Sep-20051.4 KiB4215

Makefile.inH A D14-Sep-200520.9 KiB684606

NEWSH A D14-Sep-20055.4 KiB187126

READMEH A D14-Sep-200514.5 KiB311244

THANKSH A D14-Sep-2005897 4330

TODOH A D14-Sep-2005674 2118

acinclude.m4H A D12-Sep-20055 KiB158142

aclocal.m4H A D14-Sep-2005272.9 KiB7,7576,978

config.h.inH A D14-Sep-20055.3 KiB209147

configureH A D14-Sep-2005879.2 KiB28,35723,410

configure.acH A D14-Sep-20059.6 KiB337305

README

1
2Normalize
3
4   This is release 0.7.7 of Normalize, an audio file volume normalizer.
5
6   Copyright (c) 1999--2005, Chris Vaill <chrisvaill at gmail>
7
8   Normalize is a tool for adjusting the volume of audio files to a
9   standard level. This is useful for things like creating mixed CD's and
10   mp3 collections, where different recording levels on different albums
11   can cause the volume to vary greatly from song to song.
12
13   Send bug reports, suggestions, comments to chrisvaill at gmail.
14
15   normalize is free software. See the file COPYING for copying
16   conditions.
17     _________________________________________________________________
18
19Installation synopsis
20
21    1. ./configure options
22    2. make
23    3. make install
24
25   See the file INSTALL for more extensive directions. See the man page,
26   normalize.1, for usage. Run "./configure --help" for configure
27   options.
28     _________________________________________________________________
29
30Dependencies
31
32   These dependencies are optional. Normalize doesn't require any other
33   packages to compile and run.
34
35   MAD library (http://www.underbit.com/products/mad/)
36
37   Normalize will use the MAD MPEG Audio Decoder library if you have it
38   (highly recommended). This gives normalize the ability to read mp3
39   files. MAD support in normalize was developed using MAD version
40   0.14.2b; earlier versions may not work.
41
42   You can run configure with the --without-mad option to turn off mp3
43   read support.
44
45   Audiofile library (http://www.68k.org/~michael/audiofile/)
46
47   Normalize can use the audiofile library if version 0.2.2 or later is
48   available on your system. This gives normalize the ability to read and
49   write AIFF, AIFF-C, WAV, NeXT/Sun .snd/.au, Berkeley/IRCAM/CARL, and
50   whatever else the audiofile library people decide to implement in the
51   future.
52
53   Audiofile support is not turned on by default, because the built-in
54   WAV support is faster (only because it's specifically tailored for PCM
55   WAVs), and because I'm guessing most people only ever need to
56   normalize standard PCM WAV and mp3 files. If you only want to use
57   normalize on standard PCM WAV and mp3 files, you don't need audiofile.
58   If, however, you would like to be able to normalize all the different
59   audio file formats that audiofile handles, run configure with the
60   --with-audiofile option to turn on audiofile support.
61
62   XMMS (http://www.xmms.org/)
63
64   If you have xmms installed, the configure system will build the
65   xmms-rva plugin, which honors the relative volume adjustment frames
66   that normalize adds to ID3 tags. The option --disable-xmms prevents
67   the plugin from being built.
68     _________________________________________________________________
69
70Questions and Answers
71
72   1. What platforms does normalize work on?
73
74   I've tested normalize on GNU/Linux and FreeBSD on x86, Solaris on
75   Sparc, and Irix on MIPS. I've heard that it works on GNU/Linux on
76   Alpha and on BeOS R5. As far as Windows is concerned, you can compile
77   it using the Cygwin toolkit. Question 8, below, contains a brief
78   overview of this process.
79
80   I've tried to make the code as portable as possible, so I'd appreciate
81   hearing whether normalize works on other platforms.
82
83   2. What is normalize useful for?
84
85   Example 1. Let's say you've got a bunch of wav files containing what
86   are, in your estimation, Elvis's greatest hits, collected from various
87   albums. You want to encode them as mp3's and add them to an
88   established collection, but since they're all from different albums,
89   they're all recorded at different volumes from each other and from the
90   rest of your mp3 collection. If you've been using normalize on all
91   your wav files before you encode them, your collection is normalized
92   to the default volume level, and you want these new additions to be at
93   the same level. Just run normalize with no options on the files, and
94   each will be adjusted to the proper volume level:
95
96            normalize "Hound Dog.wav" "Blue Suede Shoes.wav" \
97                      "Here Comes Santa Claus.wav" ...
98
99   Example 2. Suppose now you've just extracted all the wav files from
100   the Gorilla Biscuits album "Start Today," which, you may know, is
101   recorded at a particularly low volume. We want to make the whole album
102   louder, but individual tracks should stay at the same volume relative
103   to each other. For this we use batch mode. Say the files are named
104   01.wav to 14.wav, and are in the current directory. We invoke
105   normalize in batch mode to preserve the relative volumes, but
106   otherwise, everything's the default:
107
108            normalize -b *.wav
109
110   You can then fire up your mp3 encoder, and the whole album will be
111   uniformly louder.
112
113   Example 3. Now suppose we want to encode the Converge album "When
114   Forever Comes Crashing." This album has one song, "Ten Cents," that is
115   really quiet while the rest of the songs have about the same (loud)
116   volume. We'll turn up the verbosity so we can see what's going on:
117
118        > normalize -bv *.wav
119        Computing levels...
120        Level for track01.cdda.wav: -9.3980dBFS (0.0000dBFS peak)
121        Level for track02.cdda.wav: -9.2464dBFS (-0.1538dBFS peak)
122        Level for track03.cdda.wav: -8.6308dBFS (-0.2520dBFS peak)
123        Level for track04.cdda.wav: -8.7390dBFS (0.0000dBFS peak)
124        Level for track05.cdda.wav: -8.1000dBFS (-0.0003dBFS peak)
125        Level for track06.cdda.wav: -8.2215dBFS (-0.1754dBFS peak)
126        Level for track07.cdda.wav: -8.9346dBFS (-0.1765dBFS peak)
127        Level for track08.cdda.wav: -13.6175dBFS (-0.4552dBFS peak)
128        Level for track09.cdda.wav: -9.0107dBFS (-0.1778dBFS peak)
129        Level for track10.cdda.wav: -8.1824dBFS (-0.4519dBFS peak)
130        Level for track11.cdda.wav: -8.5700dBFS (-0.1778dBFS peak)
131        Standard deviation is 1.47 dB
132        Throwing out level of -13.6175dBFS (different by 4.58dB)
133        Average level: -8.6929dBFS
134        Applying adjustment of -3.35dB...
135
136   The volume of "Ten Cents," which is track 8, is 4.58 decibels off the
137   average, which, given a standard deviation of 1.47 decibels, makes it
138   a statistical aberration (which I've defined as anything off by more
139   that twice the standard deviation, but you can set a constant decibel
140   threshold with the -t option). Therefore, it isn't counted in the
141   average, and the adjustment applied to the album isn't thrown off
142   because of one song. Although the aberrant song's volume is not
143   counted in the average, it is adjusted along with the rest of the
144   files.
145
146   Example 4. Finally, say you want to make a mixed CD of 80's songs for
147   your mom or something. You won't allow any 80's songs to taint your
148   hallowed mp3 collection, so the absolute volumes of these tracks don't
149   matter, as long as they're all about the same, so mom doesn't have to
150   keep adjusting the volume. For this, use the mix mode option,
151
152        normalize -m *.wav
153
154   and each track will be adjusted to the average level of all the
155   tracks.
156
157   3. How does normalize work?
158
159   A little background on how normalize computes the volume of a wav
160   file, in case you want to know just how your files are being munged:
161
162   The volumes calculated are RMS amplitudes, which correspond (roughly)
163   to perceived volume. Taking the RMS amplitude of an entire file would
164   not give us quite the measure we want, though, because a quiet song
165   punctuated by short loud parts would average out to a quiet song, and
166   the adjustment we would compute would make the loud parts excessively
167   loud.
168
169   What we want is to consider the maximum volume of the file, and
170   normalize according to that. We break up the signal into 100 chunks
171   per second, and get the signal power of each chunk, in order to get an
172   estimation of "instantaneous power" over time. This "instantaneous
173   power" signal varies too much to get a good measure of the original
174   signal's maximum sustained power, so we run a smoothing algorithm over
175   the power signal (specifically, a mean filter with a window width of
176   100 elements). The maximum point of the smoothed power signal turns
177   out to be a good measure of the maximum sustained power of the file.
178   We can then take the square root of the power to get maximum sustained
179   RMS amplitude.
180
181   As for the default target amplitude of 0.25 (-12dBFS), I've found that
182   it's pretty close to the level of most of my albums already, but not
183   so high as to cause a lot of limiting on quieter albums. You may want
184   to choose a different target amplitude, depending on your music
185   collection (just make sure you normalize everything to the same
186   amplitude if you want it to all be the same volume!).
187
188   Regarding clipping: since version 0.6, a limiter is employed to
189   eliminate clipping. The limiter is on by default; you don't have to do
190   anything to use it. The 0.5 series had a -c option to turn on
191   limiting, but that limiter caused problems with inexact volume
192   adjustment. The new limiter doesn't have this problem, and the -c
193   option is considered deprecated (it will be removed in version 1.0).
194
195   Please note that I'm not a recording engineer or an electrical
196   engineer, so my signal processing theory may be off. I'd be glad to
197   hear from any signal processing wizards if I've made faulty
198   assumptions regarding signal power, perceived volume, or any of that
199   fun signal theory stuff.
200
201   4. Why don't you normalize using peak levels instead of RMS amplitude?
202
203   Well, in early (unreleased) versions, this is how it worked. I found
204   that this just didn't work well. The volume that your ear hears
205   corresponds more closely with average RMS amplitude level than with
206   peak level. Therefore, making the RMS amplitude of two files equal
207   makes their perceived volume equal. (Approximately equal, anyway:
208   certain frequencies sound louder at the same amplitude because the ear
209   is just more sensitive to those frequencies. I may try to take this
210   into account in a future version, but that opens up a whole new can of
211   worms.)
212
213   "Normalizing" by peak level generally makes files with small dynamic
214   range very loud and does nothing to files with large dynamic ranges.
215   There's not really any normalization being done, it's more of a
216   histogram expansion. That said, since version 0.5, you can use the
217   --peak option to do this in normalize if you're sure it's what you
218   really want to do.
219
220   5. Can normalize operate directly on mp3 files?
221
222   Version 0.7 and up can operate directly on MPEG audio files. An mp3
223   file is decoded (using Robert Leslie's MAD library) and analyzed on
224   the fly, without the need for large temporary WAV files. The mp3 file
225   is then "adjusted" by setting its relative volume adjustment
226   information (technically, an "RVA2" frame is set in its ID3v2 tag).
227   The advantage of this method is that the audio data doesn't need to be
228   touched, and you don't incur the cost of re-encoding. The disadvantage
229   is that your mp3 player needs to read and use relative volume
230   adjustment ID3 frames. The normalize distribution now includes a
231   plugin for xmms that honors volume adjustment frames. If you use an
232   mp3 player other than xmms, you'll have to bug the author to support
233   RVA2 frames in ID3 tags.
234
235   If you'd rather change the volume of the mp3 audio data itself, you
236   still have to decode to WAV, normalize the WAV, and re-encode. A
237   script, normalize-mp3, is included in the normalize distribution to do
238   this for you.
239
240   6. Can normalize operate on ogg vorbis files?
241
242   Version 0.8 will at least be able to read vorbis audio files.
243   Adjusting is harder, though: the problem is that, unlike with ID3, as
244   far as I know there's no standardized volume adjustment tag for ogg. I
245   could just use, say, "VOLUME_ADJUST=X.XXdB" as an ogg comment, but
246   there would be no reason for players to support it.
247
248   It may be possible to twiddle the vorbis data itself to alter the
249   volume in a lossless way. I'm looking into this, but it would be a big
250   undertaking, not something that would be finished anytime soon.
251
252   The current situation is that you have to decode to WAV, normalize the
253   WAV, and re-encode. The normalize-ogg script is included in the
254   normalize distribution to do this for you.
255
256   7. How do I normalize a whole tree of files recursively?
257
258   The "unix way" to do this is to use find:
259
260        find . -type d -exec sh -c "normalize -b \"{}\"/*.mp3" \;
261
262   will go directory by directory, running normalize -b on all mp3 files
263   in each. If you don't want batch mode, just:
264
265        find . -name \*.mp3 -exec normalize {} \;
266
267   will run normalize on each mp3 file separately. If you want to run
268   normalize in batch or mix mode on all files in the directory tree,
269   use:
270
271        find . -name \*.mp3 -print0 | xargs -0 normalize -b
272
273   A built-in recurse option has been a very popular request, so I'm
274   adding support for it in version 0.8.
275
276   8. How do I use normalize in Windows?
277
278   "I click on INSTALL but nothing happens. What's wrong?" Okay, here's
279   the deal: normalize is free software, written for free operating
280   systems such as Linux and FreeBSD. These happen to be unix-style
281   operating systems, so normalize generally works on other non-free
282   flavors of unix as well. Unlike Windows software, unix software such
283   as normalize is meant to run on many different operating systems on
284   many different architectures, so usually it comes in source code form
285   and you have to compile it for your particular setup. If you are
286   running some form of unix, normalize should compile right out of the
287   box (let me know if it doesn't!). For other operating systems, such as
288   Amiga, BeOS, OS/2, or Windows, you may have to jump through some hoops
289   to get it to compile.
290
291   A discussion of compiling unix software for Windows is way beyond the
292   scope of this FAQ, but here's a quick rundown:
293
294    1. You first need the Cygwin toolkit. After installing, start up a
295       cygwin bash shell.
296    2. Go to the directory where you unzipped the normalize archive -- it
297       would be named something like normalize-x.y.z.
298    3. Type "./configure", then "make", then "make install"
299    4. If there were no errors, you can run normalize by typing
300       "normalize" at the prompt. Normalize is a command-line utility, so
301       you have to pass it command line options. Run "normalize --help"
302       for a synopsis.
303     _________________________________________________________________
304
305   Copyright (c) 1999--2005, Chris Vaill <chrisvaill at gmail>
306
307   Permission is granted to copy, distribute, and/or modify this document
308   under the terms of the GNU General Public License as published by the
309   Free Software Foundation; either version 2 of the License, or (at your
310   option) any later version.
311