使用开源技术从丢失格式中恢复音频

HDCD 格式的历史以及我如何在 Linux 上恢复丢失的音频。
67 位读者喜欢这篇文章。
CDs

Silver Spoon。Jason Baker 修改。CC BY 3.0。

回到 2000 年代初期,我们家决定升级客厅的音响设备。当时使用的设备是我大约 20 年前刚获得稳定的大学毕业后收入时购买的一系列装备。早期的这些设备可以最好地描述为“工业时尚”,最值得注意的是我从套件组装的 Hafler 功放,以及用某种复合木制品制成并用丑陋的仿红木乙烯基包裹饰面的 Polk 扬声器。它们的声音还不错,但宿舍风格的装饰在客厅里实在是不协调。

你们这些还记得 2000 年代初期的人会记得,当时世界上大多数人仍然在 CD 上听音乐。我们家也不例外,最终我们得到了一台不错的 CD 播放器,它有一个有趣的功能——它能够解码普通 CD 以及高清晰度兼容数字 (HDCD) 光盘。

根据 维基百科,HDCD 是一种专有的音频编码-解码过程,声称在保留与现有 CD 播放器的向后兼容性的同时,提供比标准红皮书音频 CD 更大的动态范围。

我们的 CD 播放器的 手册 中写道:“HDCD 系统是在 Pacific Microsonics, Inc. 的许可下制造的”,并且“HDCD 是加利福尼亚州 Pacific Microsonics 开发的一种数字信号处理系统,它将控制代码隐藏在录制的 CD 数字音频流中非常小的部分中。HDCD 解码器识别这些控制代码,并使用它们来处理数字音频,以增加其动态范围和分辨率,同时保持原始数字流与传统 CD 播放器的兼容性。”

您可能会问,HDCD 如何实现这种神奇的效果?同一篇维基百科条目指出,“HDCD 通过使用自定义抖动、音频滤波器以及一些可逆的幅度和增益编码,在 16 位数字音频信号中编码相当于 20 位的数据;峰值扩展,这是一种可逆的软限制器;以及低电平范围扩展,这是一种低电平信号的可逆增益。”

无论这项技术有什么优点,其母公司都无法继续经营,并在 2000 年左右停止运营。维基百科文章指出,微软收购了该公司,并将代码 incorporated in Windows Media Player 以允许 HDCD 的解码,但似乎对其推广失去了兴趣。这可能是由于其他专有的高分辨率音频格式(如 SACD 和 DVD-A)的出现,它们能够在类似外观但不兼容的媒体上编码完整的 24 位信号。这两种后者格式都没有特别成功,至少在商业 terms 方面是这样,尽管录音室继续在 SACD 上发行音乐。碰巧的是,SACD 包括一个“混合”标准,该标准在同一张光盘上提供 SACD 和向后兼容的 CD 层,允许在标准 CD 分辨率下在普通 CD 播放器上播放这些专辑。

究竟有多少艺术家和录音室实际使用了 HDCD?好吧,Discogs 提供了 11,284 个 HDCD 录音的列表(截至撰写本文时)。这个网站 提供了一些 HDCD 提供的功能的有趣分析,使用了实际的 HDCD 编码音乐。对于那些对原始专利感兴趣的人,Google Patents 声称该专利已过期,可以在这里找到

我的 HDCD 故事

任何对音频设备有足够兴趣阅读宣传册或发烧友杂志的人都会认识到许多发烧友对专有设计的痴迷——他们似乎将专利视为使用该技术的设备的验证。

尽管现在我尽我所能避免被“专有技术迷恋”所左右,但我承认在 2000 年代初期,我并不是所有开源事物的坚定支持者。我不仅购买了上述带有专有内部结构的精美 CD 播放器,而且我还购买了——太可怕了!——一些实际的 HDCD 编码标题。

上周末,我设法在我们的收藏中找到了其中三张,但我确信还有更多。我设法找到的三张包括 Ensemble Dumont 的 La Messe du Roi、Musica Secreta 的 Dangerous Graces 以及启蒙时代乐团的 Vivaldi Concerti,全部来自 Linn Records 对 Linux 友好的 音乐商店。在确保这些标题仍然可用的同时,我注意到它们不再以 HDCD 形式提供。

鉴于我手头有这些专辑,并且专利似乎已经过期,我决定找出我是否可以将这些光盘以其完整的预期分辨率转换为开放音乐格式,而且,我是否可以在不使用专有软件的情况下做到这一点。

我偶然发现的第一个用于解码 HDCD 格式的软件是 hdcd.exe,在此处描述和提供。由于未提供此软件的源代码,并且由于它需要 Windows,或者至少需要 Wine 才能运行,我最初的兴趣基本上消失了。

上面提到的维基百科文章指出,一些其他基于 Windows 的音乐播放器提供了 HDCD 解码。嗯。但随后我发现了

“FFmpeg 的 libavfilter 从 FFmpeg 3.1(2016 年 6 月)开始包含 HDCD 过滤器,它会将带有 HDCD 数据的 16 位 PCM 转换为 20 位 PCM。”

这似乎是一个有希望的起点,所以我从我的发行版的存储库中安装了 ffmpeg,然后开始寻找更多提示,此时我偶然发现了 hydrogenaudio 上的非常简洁的描述,它甚至提供了一个脚本,用于在音乐目录中查找 HDCD 编码的文件。我使用了针对先前提到的 Musica Secreta CD 中提取的文件运行 ffmpeg 的行,如下所示

ffmpeg  -hide_banner -nostats -y -v verbose -i \
'01 - Musica Secreta - Questi odorati fiori.flac'
-vn -af hdcd -f s24le /dev/null 2>&1 | grep "_hdcd_"

并收到了以下输出

[Parsed_hdcd_0 @ 0x55b2137e2c80] Disabling automatic format conversion.
[Parsed_hdcd_0 @ 0x55b2137e2c80] Auto-convert: disabled
[Parsed_hdcd_0 @ 0x55b2137e2c80] Looking for 16-bit HDCD in sample format s16
[Parsed_hdcd_0 @ 0x55b2137e2c80] CDT period: 2000ms (88200 samples @44100Hz)
[Parsed_hdcd_0 @ 0x55b2137e2c80] Process mode: process stereo channels together
[Parsed_hdcd_0 @ 0x55b2137e2c80] Force PE: off
[Parsed_hdcd_0 @ 0x55b2137e2c80] Analyze mode: [0] disabled
[Parsed_hdcd_0 @ 0x55b2137e2c80] Channel 0: counter A: 0, B: 1657, C: 1657
[Parsed_hdcd_0 @ 0x55b2137e2c80] Channel 0: pe: 1657, tf: 0, almost_A: 0, checkfail_B: 0, unmatched_C: 0, cdt_expired: 0
[Parsed_hdcd_0 @ 0x55b2137e2c80] Channel 0: tg 0.0: 1657
[Parsed_hdcd_0 @ 0x55b2137e2c80] Channel 1: counter A: 0, B: 1657, C: 1657
[Parsed_hdcd_0 @ 0x55b2137e2c80] Channel 1: pe: 1657, tf: 0, almost_A: 0, checkfail_B: 0, unmatched_C: 0, cdt_expired: 0
[Parsed_hdcd_0 @ 0x55b2137e2c80] Channel 1: tg 0.0: 1657
[Parsed_hdcd_0 @ 0x55b2137e2c80] Packets: type: B, total: 3314
[Parsed_hdcd_0 @ 0x55b2137e2c80] HDCD detected: yes, peak_extend: enabled permanently, max_gain_adj: 0.0 dB, transient_filter: not detected, detectable errors: 0

请注意上面最后一行提到实际上检测到了 HDCD。此外,似乎启用了“峰值扩展”功能。据我了解,此功能会反转应用于音乐最响亮部分的压缩/限制,然后在将整体信号电平降低两倍后,从而恢复原始录音的一些额外动态范围。Goodwin's High End 的网站 此处 对此主题进行了详细描述。

此时,是时候尝试一下整个过程了。出于某种原因,我对从 16 位未解码 FLAC 到 24 位解码 FLAC 的一步转换没有信心,所以我分两步运行了转换,如下所示

for f16 in *.flac; do
trk=`basename "$f16" .flac`
w24="$trk"_24.wav
ffmpeg -i "$f16" -af hdcd -acodec pcm_s24le "$w24"
flac "$w24"
done

这给了我一组 24 位 44.1kHz FLAC 文件,我用 file 命令验证了这些文件。那时,我所需要做的就是确保所有标签看起来都不错,就这样了。

说到音乐…

今年我一直在休息我的音乐专栏,因为我除了听一些我已经拥有的东西之外,没有做太多事情。但一些新东西已经悄然进入我的收藏。

Emancipator 的最新专辑 Mountain of Memory 可以从那个对 Linux 友好且对艺术家友好的在线商店 Bandcamp 获得。如果您喜欢 Emancipator 早期的作品,您不会对这张专辑感到失望。

剑桥克莱尔学院合唱团和德米特里合奏团发行了 Arvo Pärt、Peteris Vasks 和 James MacMillan 的精美音乐合集,名为“Arvo Pärt Stabat”。我还没有仔细听过这张专辑,即便如此,我还是被这里呈现的三位作曲家的作品之间的相似性所震撼。也许与北欧景观和天气的共同影响有关?我从 Presto Classical 购买了这张美丽的合唱音乐的 96/24 FLAC 下载版,这是另一家对 Linux 友好的在线商店。对于那些对这种音乐更感兴趣的人,该网站上有一篇对克莱尔学院合唱团指挥格雷厄姆·罗斯的采访。

最后,一些其他有趣的消息——一家拥有大量高分辨率下载的在线商店,多年来一直让我感到沮丧(以至于我给他们发送了无数抱怨的电子邮件),HDtracks,终于可以在不使用他们的下载管理器的情况下从他们那里购买音乐了!我还没有在那里买任何东西,但我很快就会试一试并汇报结果。

接下来阅读什么
Chris Hermansen portrait Temuco Chile
自从 1978 年毕业于不列颠哥伦比亚大学以来,我几乎一直与某种计算机为伴,自 2005 年以来一直是全职 Linux 用户,1986 年至 2005 年是全职 Solaris 和 SunOS 用户,在那之前是 UNIX System V 用户。

1 条评论

您的数据恢复方法很棒。我有一些音乐 CD,将恢复并发布到 YouTube。我将使用 YouTube 来存储我的数据,而不是 CD。目前我经常在互联网上分享教程,以下是如何使用歌曲自定义铃声的教程。

Creative Commons License本作品根据 Creative Commons 署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.