从黑胶唱片到数字音乐
Dory Previn 启发了我进行这个项目。她在 1970 年代录制了一系列充满智慧和文学气息的专辑,但到 1990 年代初期,这些专辑仍然没有 CD 版本。经过一番搜索,我找到了 Anne Bezemer 和 Ton Le 开发的一个名为 gramofile 的软件包,旨在捕捉黑胶唱片的声音,并为刻录到 CD 做准备。之后,C. R. Johnson 又推出了 xmcd2make,扩展了 gramofile 的功能。看看这些可能性:
将音乐保存在廉价、耐用的介质上。
使每首曲目都可单独访问,并带有时间细节。
编码为 Ogg 或 MP3。
对所有或选定的曲目应用咔嗒声降噪滤波器。
去除不需要的歌曲并重新排列顺序。
将两张专辑放入一张光盘。
声音质量取决于许多因素,正如“Linux 音频质量 HOWTO”中所解释的那样,但使用高质量的声卡和良好支持的驱动程序。尽量使声卡远离其他卡,以最大限度地减少感应噪声。因为我使用一台备用 PC 专门用于此项目,所以我只安装了两张卡:第一条 PCI 插槽中的视频卡和最后一条 PCI 插槽中的 SoundBlaster Live! 5.1 声卡。如果您计划在将 LP 捕获到磁盘时将 PC 用于其他任务,请使用 2.4 系列的内核,应用 preempt-kernel 和 lock-break 补丁(请参阅资源),选择“处理器类型”下的新选项,然后构建并安装它。第一张我处理的 LP 刻录成 CD 后,其音质令我惊喜。
如果您只想刻录 CD,gramofile 就可以完成这项工作。从 RPM 或 deb 文件安装它。图 1 显示了主菜单。我将在本文后面进一步讨论每个步骤。gramofile 需要一个名为 xmixer 的混音器,我在一个名为 mctools-lite 的 Debian 软件包中找到了它,但在 RPM 世界中,它位于一个名为 multimedia 的软件包中。但是,使用您在另一个窗口或控制台中拥有的任何混音器都没有问题。

图 1. gramofile 的主菜单
为了以 Ogg 或 MP3 格式编码歌曲,请考虑采取额外的步骤来安装 xmcd2make 及其依赖项。预先进行一些繁琐的操作将简化每张专辑的处理。xmcd2make 脚本只是 Perl 脚本,其安装过程相当于make install。但是,在安装 swig、oggenc(用于 Ogg 编码)或 lame(用于 MP3)、mpgtx 和 Perl 模块 Getopt::Long 之前,它们无法工作。此外,xmcd2make 需要特殊版本的 gramofile,该版本具有 perl-swig 扩展,版本名称中带有 P。所以让我们开始工作吧。由于这台机器专用于一项任务,我将以 root 身份进行所有安装,并从 /usr/local 解压每个软件包。
swig 已经发展,但 gramofile 还没有。使用最新版本 1.3.17,gramofilemake perl-swig失败了。使用 Debian 的旧版本 1.1.p883-4 (apt-get install swig),make 完成了。这是手动等效操作
tar xvzf swig1.1-883.tar.gz cd SWIG1.1-883 ./configure make make install
oggenc 应该可以作为 RPM 或 deb 软件包使用,尽管名称可能难以捉摸。对于 Debian,我使用了apt-get install vorbis-tools libvorbis0。由于专利问题,Lame 可能更难找到,而 Ogg 是政治上正确的选择。
mpgtx,一个命令行 MPEG 工具箱,在 Debian 中很简单apt-get install mpgtx,但我从源代码安装了 1.3 版本,使用了经典的tar, configure, make, make install,就像上面的 swig 一样。尽管滚动显示了多页警告,但它还是顺利安装了。
Perl 模块 Getopt::Long 是 Debian 的 5.6.1 软件包的一部分,我希望您的软件包中也有它。在我的系统中,它安装在 /usr/share/perl/5.6.1/Getopt/Long.pm 中。
手动安装带有 perl-swig 扩展的 gramofile 并不适合胆小的人。它需要 ncurses5-dev 并且不会自行安装。您需要知道您的 Perl CORE 位于何处,因此请尝试
cd /usr/lib find -name CORE ./perl/5.6.1/CORE
这表明我的 Perl CORE 位于 /usr/lib/perl/5.6.1/CORE。解压 gramofile 后,编辑 perl-swig 子目录中的 Makefile,更改行PERLCORE = -I/usr/...以匹配您的安装
tar xvzf gramofile-1.6P cd gramofile-1.6P cd perl-swig
(在此处编辑 Makefile)
cd .. make make perl-swig
现在,让我们将可执行文件复制到您的 $PATH 中的目录中
cp gramofile bplay_gramo brec_gramo /usr/bin
最后,cd进入 perl-swig 子目录,并将那里的两个文件复制到 Perl 路径中的目录中。但首先,检查您的 Perl 路径中是否有合适的目录
perl -e 'print join("\n",@INC), "\n"'
因此,在我的 Debian 设置中
cd perl-swig mkdir /usr/local/lib/site_perl cp Gramofile.pm Gramofile.so /usr/local/lib/site_perl
最后,我们准备好使用 xmcd2make 了
tar xvzf xmcd2make-0.4.tar.gz cd xmcd2make-0.4 make install
xmcd2make 安装时默认比特率为 128,但我更喜欢更高的比特率(以更大的文件和更长的编码时间为代价),所以我编辑了文件 /usr/local/bin/xmcd2make,并将比特率更改为 224
# $bitrate = 128; $bitrate = 224;
如果您可以再忍受一个项目,我推荐一个名为 umix 的混音器,因为它有一个控制台版本,提供数字级别以准确且可重复地设置级别,并且能够通过一个按键保存或恢复所有设置。这意味着整个 LP 到 CD 的过程都可以在低端 PC 上完成,甚至无需安装 X。默认混音器路径是 /dev/sound/mixer,您可能需要按如下方式进行调整./configure --with-mixer-dev=/dev/mixer。要以普通用户身份加载和保存级别,请使用配置文件名启动 umix,例如umix -f $HOME/umixrc。按 S 保存当前设置,按 L 重新加载上次保存的设置。
以下是将 Dory 的 On My Way To Where 专辑捕获到硬盘驱动器,然后对其进行处理以获得一组适用于刻录音频 CD 的 wav 文件,以及一组供计算机和便携式播放器使用的 Ogg 文件的步骤。最终,我们将告诉 xmcd2make 基本名称是“where”,因此我们相应地命名文件。
将计算机放在靠近立体声设备的位置,并使用高质量的屏蔽电缆将立体声线路输出连接到声卡线路输入。您可能需要双 RCA 转立体声迷你插孔电缆才能进行此连接。
在一个控制台或 xterm 中加载您的混音器。在另一个控制台中加载 gramofile,之前先切换到一个空目录,该目录位于具有大量可用空间的分区上。
使用混音器将“线路输入”设置为录制模式,并使所有其他通道静音。您可能还需要调高输入增益 (igain)。这可以减少背景噪音。
使用 gramofile 的“录制音频到声音文件”捕获一个样本,并使用混音器调整电平,使 gramofile 电平表上的峰值接近顶部。
停止采样,并验证合理百分比的样本高于最大音量的 50%,少量高于 90%,但极少或没有高于 99%(图 2)。
将 gramofile 设置为捕获 LP 的第一面,方法是给它一个描述性名称,在我们的示例中为 where1.wav;开始播放 LP,然后开始捕获。
当第一面完成后,停止 gramofile 并验证样本电平是否合理。如果不是,请使用您的混音器调整电平。一些音量尖峰是由咔嗒声引起的,因此可以接受少量削波样本。
将第二面捕获到一个名为 where2.wav 的文件中。

图 2. gramofile 的录制信息
现在我们有了两个大约 200MB 大小的 wav 文件,它们是黑胶唱片沟槽中声音的数字表示。现在是决定这张 LP 是否有明显的表面噪声(黑胶唱片闻名的那些咔嗒声)的好时机。如果整张专辑都很嘈杂,请通过 gramofile 提供的滤波器运行两面。如果只有选定的歌曲嘈杂,通常是每面的第一首曲目,请等到曲目被分割。
gramofile 文档包括对每个滤波器及其背后的理论的精彩讨论 (Signproc.txt)。您会注意到,当选择“处理音频信号”时,“条件中值滤波器 II”已预先选中。它是最复杂的,我用它获得了良好的效果。咔嗒声不会被消除,但会大大减少。可以使用多个滤波器,或者您可以两次使用同一个滤波器。我坚持使用一次通过,因为当我两次使用“条件中值滤波器 II”时,音乐的质量有明显的下降。但是,该过程仅需几分钟,因此请随意尝试。原始文件将被保留,您有机会为过滤后的文件指定一个有意义的名称。收听这个新的 wav 文件。如果您喜欢结果,请删除原始文件并将过滤后的文件重命名为与原始文件相同。
在编码任何曲目之前,您需要艺术家姓名、专辑名称和每首曲目标题的列表。您可以通过搜索 freedb.org 来节省一些打字时间。如果找到了您的专辑,请单击第一首曲目标题上方的“IDs”链接,然后将出现的页面另存为文本文件。如果您愿意,只需从这个 xmcd 页面复制列表并粘贴到文本编辑器中,忽略任何以 # 开头的行。务必将文件另存为纯文本到您的 wav 文件所在的目录中,并将其命名为匹配的名称。对于我们的示例,那将是 where.xmcd。无论哪种情况,我们都将仅使用 DTITLE 和 TTITLE 行。对于晦涩的 LP,我在我的主目录中保留一个 xmcd 文件的副本,其中只有 DTITLE= 和 TTITLE0= 到 TTITLE10=。只需一分钟即可复制它,并使用与当前 LP 匹配的名称,然后从专辑封套中键入标题。请注意,曲目列表从零开始。这是一个部分示例
DTITLE=Dory Previn / On My Way To Where TTITLE0=Scared To Be Alone TTITLE1=I Ain't His Child
我们现在的任务是将每一面分割成单独的歌曲。直接使用 gramofile 的用户可以从菜单中选择“定位曲目”,然后选择第一面 (where1.wav),单击“下一步”,单击“开始计算”并等待歌曲计数出现。如果计数不正确,请重试,但在“开始计算”之前调整一个或多个选项。尝试将曲目间静音时间减少到 12 或更少。对第二面重复此操作。当您对曲目计数感到满意时,选择“处理音频信号”;再次选择第一面 wav 文件;单击“下一步”;然后,如果您想使用默认的咔嗒声滤波器,请按 Tab 键切换到“下一步”屏幕。要不使用滤波器,请在“可用滤波器”框中停止,突出显示“仅复制”并按 Enter 键。现在按 Tab 键切换到“选定滤波器”框,突出显示“条件中值滤波器 II”并按 R 键将其删除。使用相同的步骤选择不同的(或额外的)滤波器,但您必须选择滤波器或“仅复制”才能处理文件。顺便说一句,当滤波器在“选定滤波器”框中突出显示时,按 Enter 键允许您更改特定的滤波器设置。最后,按 Tab 键切换到“开始”并按 Enter 键。完成后,您应该为每首曲目都有一个 wav 文件,准备好进行试听,然后进行刻录。
xmcd2make 用户应退出 gramofile,因为 xmcd2make 的 findtracks 脚本是 gramofile 的 findtracks 函数的包装器。运行findtracks where1.wav从提示符扫描专辑的第一面,然后将其输出与官方曲目列表进行比较。输入less *.tracks,您将看到一个纯文本文件,其中包含每首曲目的开始和停止时间。如果您看到两首曲目被合并在一起,请返回提示符并再次尝试,调整一个或多个参数,例如
findtracks where1.wav --min-silence-blocks 12
手动分割歌曲是可能的,尽管很乏味。一种粗略的替代方法是将整个面刻录为单首曲目。在这种情况下,请使用 gramofile 的滤波器,但选择“仅复制”(如上所述,但不取消选中“分割曲目”选项),这将不进行任何过滤,但会向 wav 文件添加时间信息,以便 CD 刻录机知道真实的运行时间。如果您发现一首歌曲被分割成两部分,则可以轻松编辑曲目文件以合并这两部分,然后重新编号该面上的其余曲目并编辑Number_of_tracks=行以匹配。最后,对第二面重复整个过程。
现在,我们准备创建一个 Makefile,它可以自动化其余过程
xmcd2make --basename where --counts 5,5 > Makefile
这将创建一个 Makefile,其中包含用于分割曲目的时间和专辑、艺术家和曲目名称信息,以用于 Ogg 或 MP3 创建。计数必须与曲目文件中的计数匹配。要调整比特率,请添加--rate 192,例如。现在只需输入makemake ogg
Makefile 9.5k where1.wav 196M where1.wav.tracks 1.2k where2.wav 191M where2.wav.tracks 1.2k where_processed_101.wav 52M 101_Scared_To_Be_Alone.ogg 8.2M
即可将每首曲目的内容复制到单独的 wav 文件中,并使用描述性名称将其编码为 Ogg 文件。这是我们示例的缩写目录列表使用make mp3来分割曲目并创建 MP3 文件,而不是 Ogg 文件。输入make procmake只是简单地分割曲目,允许您将滤波器应用于选定的曲目。通过删除原始的未过滤文件并将过滤后的文件重命名为原始名称,从过滤后的 wav 文件创建 Ogg 文件。有关更多选项,请尝试.
xmcd2make --help
就这样,您有了可以刻录到音频 CD-R 的 wav 文件和可以在任何支持设备上播放或刻录到数据 CD-R 的 Ogg 文件。如果您是 CD 刻录新手,有很多优秀的 HOWTO 可用。一旦您设置好系统,就可以为成堆的专辑重复它并享受结果。顺便说一句,在 2002 年,Dory 的最后一张专辑终于重新发行了 CD,但我已经有了我的 Linux 制作的光盘。
资源
CD 刻录: www.tldp.org/HOWTO/CD-Writing-HOWTO.html
gramofile(带或不带扩展): panic.et.tudelft.nl/~costar/gramofile
gramofile(带 perl-swig 扩展和 xmcd2make): ftp.freeengineer.org/pub/xmcd2make
Linux 音频质量 HOWTO: www.linuxdj.com/audio/quality
内核补丁: www.tech9.net/rml/linux
mpgtx: mpgtx.sourceforge.net
Perl 模块安装: www.perldoc.com/perl5.8.0/lib/CPAN.html
swig: www.swig.org
umix: umix.sourceforge.net