在Linux下刻录MP3 CD Xiaohua 2001年 47期 很多朋友都在自己的硬盘中保存着通过各种方式收集来的MP3歌曲吧?大家有没有想过把它们刻录成一张音乐CD呢?现在网上已经有很多程序可以把MP3文件刻录成音乐CD,但是不同的音乐来源不同,而且它们的音量差异也很大;另外有些MP3文件是不兼容CD格式(16位,立体声,44.1KHz采样频率)的,必须得转换。下面,我就为大家介绍我在Linux下的音乐CD刻录秘笈。   我假设你想刻录一张集中了从不同地方收集来的MP3歌曲CD,这些歌曲的音质都各有差异,但是你又想得到最佳的音质,怎么办呢?下面介绍解决这一问题的具体步骤:   #1准备WAV素材   注:以下所有命令都运行在bash中。   1.将所有的MP3文件拷贝到一个目录中。   2.如果有文件名中包含空格,先用下面命令把空格转换为下划线:   for i in*.mp3 do mv “$i”`echo $i | tr ' ' '_' `; done   3.使用如下命令将它们转换为WAV格式:   for i in *.mp3; do mpg123 -w `basename $i .mp3`.wav $i; done   Mpg123这个程序一般在任何一个GNU/Linux发行套件中都有,如果没有,可以到http//www.mpg123.de/下载。   4.需要注意的是:Mpg123会输出一些不正常的MP3文件。最开始时我以为是MP3文件原本是坏的,但是我用别的播放器播放时却发现它们是完好的。所以我们还可以用别的可以把MP3文件转换成WAV文件的MP3播放器,如:MAD mp3 解码器(可以在http://www.mars.org/home/rob/proj/mpeg/下载)。使用MADplayer时,命令行是:   for i in *.mp3; do madplay -o`basename $i.mp3`.wav $i; done   注:命令`basename $i .mp3`.wav会用WAV代替MP3扩展名,有很多种方法可以实现这个功能,如:`echo “$i”|sed 's/.mp3/.wav/g'`。   5.执行“file.wav”命令,然后注意查看输出内容不同于16 bit stereo 44100 Hz 16位,立体声44100赫兹的所有文件,记住把它们转换为上述的规格。比如要把文件track01.wav转换为采样率是44.1KHz的,你可以使用如下命令:   sox track01.wav -r 44100 track01-new.wav resample   Sox软件非常流行,很有可能在每个GNU/Linux发行套件中都缺省安装了它,你也可以从http://www.spies.com/Sox/下载得到。但是,命令行参数对于普通的用户来说总还是有一些神秘的,具体情况可参考http://www.spies.com/Sox/sox.tips.html,多了解一些使用技巧吧。   正常化你的WAV文件,以避免过分的音量失真。我使用了一个叫做normalize小软件,它可以从http://www.cs.columbia.edu/cvaill/normalize/下载得到。我使用如下的命令格式-m是指定mix模式,可以使得音量达到尽可能的大:   normalize -m*.wav   #1刻录CD   现在已经有很多程序可以从WAV文件中生成CD。我使用的cdrecord是命令行方式的,XCDROAST是图形模式的。对于cdrecord,你得知道你的刻录机的SCSI设备,如果你用的是ATAPI刻录机,请使用SCSI仿真器(内核模块ide-scsi)。假设你的ATAPI刻录机是以主设备连接在第二条IDE总线,那么它的设备文件应该是/dev/hdc,要使内核将其视为一个SCSI设备,请添加如下语句到/etc/lilo.conf文件中:   append=“ hdc=ide-scsi”   如果你的内核不能自动加载ide-scsi模块,请添加模块安装命令行“insmod ide-scsi”到你的rc.local(或类似)文件中。一旦你的刻录机被当成SCSI设备时,请执行“cdrecord -scanbus”来查询应该给cdrecord传递什么样的“dev”参数。在我的系统上,屏幕输出以下信息:   scsibus1   1,0,0 100) 'IOMEGA ' 'ZIP 250 ' '51.G' Removable Disk   1,1,0 101) 'HP ' 'CD-Writer+ 7100 ' '3.01' Removable CD-ROM   因此,命令cdrecord的命令行应该包含“dev=1,1,0”来指定设备。下面是在我系统上可用的完整命令行:   cdrecord dev=1,1,0 -eject speed=2 -pad -audio *.wav   注:参数-pad是有必要的,因为CD上所有的音轨必须根据数据长度进行调整,而这通常跟MP3文件是不同的。