从黑胶唱片到数字音乐

作者:Tom Younker

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 的软件包中。但是,使用您在另一个窗口或控制台中拥有的任何混音器都没有问题。

From Vinyl to Digital

图 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 的文件中。

From Vinyl to Digital

图 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

Tom Younker (tom@darecomputer.com) 与他热爱 Mac 的妻子和装满 Linux boxen 的地下室住在烟雾弥漫的佐治亚州亚特兰大。他还经营一家咨询公司。