2. 音频 CD

2.1. 准备音轨

Note注意
 

所有命令都假定使用 bash shell

2.1.1. 文件名清理

  1. 将所有 MP3 文件收集到一个目录中。

  2. 如果任何文件名包含空格,请首先将其转换为下划线

         for i in *.mp3; do mv "$i" `echo $i | tr ' ' '_'`; done 

    第一步很重要,因为即使 unix 本身允许文件名中包含空格,大多数程序也会对此感到困惑。

  3. 如果您的 MP3 文件来自 DOS/Windows,它们可能具有大写扩展名。您可以将整个名称转换为小写或仅转换扩展名。要全部转换为小写,请执行

    	for i in *.[Mm][Pp]3; do mv "$i" `echo $i | tr '[A-Z]' '[a-z]'`; done 

    要仅转换扩展名

         for i in *.MP3; do mv "$i" "`basename "$i" .MP3`.mp3"; done
         

2.1.2. 转换

CD 音频规范要求 16 位、立体声、44.1 kHz 的 wave 文件。MP3 文件通常具有不同的参数,但无论如何我们都需要先将它们转换为 WAV。

对于转换过程,我们有几种选择。

2.1.2.1. mpg123 和 mpg321

最初,只有 mpg123。但是,它使用专有许可,现在有一个开源替代品 - mpg321。两个命令使用相同的语法

     for i in *.mp3; do mpg321 -w `basename $i .mp3`.wav $i; done 

当解码 22khz MP3 文件时,mpg123 的输出可能会失真。我不知道 mpg321 在处理这个问题上表现如何。如果您使用 mpg123 进行转换,请使用

     for i in *.mp3; do mpg123 --rate 44100 --stereo --buffer 3072 --resync -w `basename $i .mp3`.wav $i; done
     

Mpg123 可以从 http://www.mpg123.de/ 获取。

Mpg321 可从 http://mpg321.sourceforge.net/ 获取。

注意 我注意到对于某些 MP3 文件,mpg123 的输出失真了。起初我以为是 MP3 文件坏了,但是后来我用另一个播放器检查,它们听起来没问题。所以 mpg123 不是我的首选转换器。

2.1.2.2. MAD

另一个 MP3 播放器/解码器,也是我更喜欢的一个,是 madplay。它可从 http://www.mars.org/home/rob/proj/mpeg/ 获取。使用 madplayer,命令行是

     for i in *.mp3; do madplay -o `basename $i .mp3`.wav $i; done 

不幸的是,madplay 在处理我的一些 MP3 文件时也遇到了问题。我不认为解码器有问题,而是它在处理损坏的 MP3 文件时有问题。

2.1.2.3. Lame

具有解码模式的 lame 编码器似乎可以很好地处理困难的情况(lame 可以在 http://www.mp3dev.org/mp3/ 找到)

     for i in *.mp3; do lame --decode $i `basename $i .mp3`.wav; done
     

2.1.2.4. OGG 文件

好吧,本 HOWTO 是关于 MP3 文件的,但是 OGG 标准是一种替代方案,由于许可原因,许多人比 MP3 更喜欢它。要处理 OGG 文件,您需要使用

	for i in *.ogg ; do ogg123 -d wav -f `basename $i .ogg`.wav $i; done
     

2.1.2.5. 转换其他格式

Nico Genimakis 发送给我一封关于使用以下内容的电子邮件mplayer将多种不同格式的音频转换为 WAV,并自动重采样到 44100Hz。Mplayer 以能够读取几乎任何内容而闻名,它可以转换您的 .ogg、.mp3、.flac、.wma 等。

用法(在本示例中转换 WMA 文件)

	for i in *.wma ; do mplayer -vo null -vc dummy -af resample=44100 -ao pcm -waveheader $i; done
     

2.1.3. 转换注意事项

注意: `basename $i .mp3`.wav 命令将 MP3 扩展名替换为 WAV。有很多种方法可以做到这一点,这是另一种方法:`echo "$1" | sed 's/\.mp3$/.wav/'`

转换后,运行“file *.wav”,并检查输出中是否有任何文件与 16 位、立体声 44100 Hz 不同。

如果存在具有不同特性的文件,请将它们转换为上述规格。例如,要转换文件 track01.wav 以获得 44.1 kHz 的采样率,您可以使用

     sox track01.wav -r 44100 track01-new.wav resample
     

或者,如果上述方法在转换单声道文件时引入静音

     sox track01.wav -r 44100 -c 2 track01-new.wav
     

Sox 非常流行,它可能已默认安装在任何 Linux 发行版中,并且可以从 http://www.spies.com/Sox/ 获取。但是,对于普通用户(我)来说,命令行选项有些晦涩难懂。请查看 http://www.spies.com/Sox/sox.tips.html 以获取一些使用技巧。

2.2. 归一化

归一化是一个过程,在此过程中,所有声音文件都被调整到相同的相对响度级别。我使用 Chris Vaill 的一个程序(),名为 normalize - 它可从 http://www.cs.columbia.edu/~cvaill/normalize/ 获取

我使用以下语法(-m 用于混合模式,其中所有文件应尽可能响亮)

     normalize -m *.wav