让我郑重声明,当谈到 Hi-Fi 音响系统时,我完全是个菜鸟,但我对音质相当挑剔。通常我会听 16/44 翻录到 FLAC 的 CD 录音,但我有几张专辑也是 24/96 翻录到 FLAC 的。但似乎我无法区分 16 位和 24 位版本之间的区别(当然,除了一些黑胶噪音)。这可能是由于几个原因:
- 我的设备(板载音频、监听耳机)不够好,无法有所作为,
- 我的系统没有播放 24 位 96 kHz 的音频,
- 我身体上听不出区别。
所以这是我的问题,我如何判断我的系统是否可以播放96 或 192 kHz 分辨率的 24 位声音?如果可以,我怎么知道它播放它而不是下采样到 16 位/44 kHz?
另外,您会推荐什么硬件(声卡、放大器等)在 Ubuntu 上播放此类录音?
要了解您的声卡支持什么,请查看
(您只需输入
cat /proc/asound/card0/codec#2
终端即可阅读)现在,0 和 #2 可能会因您而异,
cat /proc/asound
在终端中输入并点击tab以查看其中的内容,在这个文件中(这不是一个真正的文件,但没关系),你会发现这样的东西:
此外,可以说,您可以安全地打字
cat /proc/asound/card0/codec#2 | grep rates
并查看最低公分母。但是:与音响系统真正无关的DAC(数模转换器)可能只是对信号进行插值,声卡甚至可能会做一些虚假广告,你看制造商无法知道安全网站。
你没有听到差异的原因(我断言有一个可以听到,尽管这是一个很大的争论的主题)是 - 可能 - DAC不够好。这是迄今为止最薄弱的环节(在您的计算机内部)。
至于你的第二个问题:虽然这当然不是讨论它的地方,但看看“ESI Juli@”或“Dr. Dac Nano”之类的东西,它们价格合理,分别播放 192kHz / 96kHz - 并且他们被非常挑剔的发烧友社区广泛认为“还可以”。此外,如果耳机/扬声器/放大器跟不上,最好的声音芯片也将无济于事。
我知道这是一个老问题,但是当我研究自己的类似问题时,我偶然发现了它,同时我找到了原始问题的这个特定部分的答案,但尚未得到回答:
简短的回答
在大多数情况下,您可以确定您的系统正在对您的高质量音乐进行下采样。“大多数情况”是指常规的、日常的、正常的操作系统设置。
长答案,并提供有关如何自行验证的指南
首先,一些假设 - 假设您的主声卡是
card0
(如该问题的第一个答案),并且标准立体声输出(用于前置扬声器)进入pcm0p
该卡上的设备(代表“PCM设备0,回放”)。在这种情况下,您感兴趣的文件如下:/proc/asound/card0/pcm0p/sub0/hw_params
子设备在哪里
sub0
(稍后会详细介绍,但是当只播放一个声音时,sub0
它将被发送到子设备)。如果当前没有声音被发送到特定的子设备,则相应hw_params
文件的内容将只是closed
. 因此,首先您需要开始播放您最喜欢的高品质声音文件(您知道超过 16 位和/或超过 44kHz),然后查看该hw_params
文件,检查其中的format
和rate
声明的内容。例如,如果您知道您的声音文件每个样本使用 24 位,并且您看到format: S16_LE
(16 位有符号整数,little-endian 位排序),那么您知道它在到达您的声卡的途中某处被下采样。如果您看到您的文件正在被下采样,并且想检查系统的哪个部分负责(声音服务器?音乐播放器?),请继续阅读。
正如承诺的那样,首先对子设备进行更多介绍。如果你的声卡支持硬件混音,那么播放设备会有多个子设备。如果它不支持硬件混音,它将只有一个子设备 -
sub0
。但即使它确实有多个子设备,也可以肯定只有sub0
一个会被使用。那是因为大多数(全部?)现代操作系统都使用软件混音。例如,Ubuntu 目前使用 PulseAudio 声音服务器,该服务器在将声音进一步发送到操作系统之前进行软件混音。通过硬件混音,来自多个来源(例如多个音乐播放器)的声音将进入不同的子设备,然后声卡将在硬件中进行混音。通过软件混音,来自所有来源的声音进入sub0
子设备。只是要记住一点 - 记得hw_params
在正确的子设备中查看文件。回到主题。既然我们在谈论 Ubuntu,我们将坚持它的软件堆栈——在 PulseAudio 的后端有 ALSA,它是与硬件驱动程序对话的接口,因此 PulseAudio 可以成为一个花哨的高级声音服务器,它不不必费心知道它正在与什么硬件通信。
了解了以上所有内容,我们就可以开始排除潜在的嫌疑人了。我们真的可以自动排除任何类型的音乐播放器,因为他们唯一要做的就是打开声音文件,如果它以 PCM 以外的某种格式编码,则对其进行解码,然后将读取/解码的内容发送到,例如,声音服务器。
所以我们只剩下声卡的硬件驱动程序和音乐播放器之间的层——ALSA 和 PulseAudio。用其他声音子系统(但可行)替换 ALSA(出于测试目的)有点困难,但暂时禁用 PulseAudio 相当容易,这将迫使我们的音乐播放器直接与 ALSA 对话。为了实现这一点,我们从终端(作为普通用户)执行以下命令:
现在您需要重新启动音乐播放器,开始播放音乐文件,然后再次查看
/proc/asound/card0/pcm0p/sub0/hw_params
文件。而这一次你会看到正确的值,这证明了,与网上流传的一些观点相反,PulseAudio确实对声音进行了下采样。我使用在索尼网站 ( https://helpguide.sony.net/high-res/sample1/v1/en/index.html ) 上找到的高分辨率音乐文件 (24bit, 96kHz) 进行了测试,并播放了它回到 VLC 并在
hw_params
文件中看到声卡报告它正在 S16_LEformat
中的 48000 处输入数据rate
。然后我禁用了 PulseAudio,重新启动了 VLC 并播放了同一个文件——这次hw_params
文件报告format
为 FLOAT_LE(浮点,根据定义是 32 位,所以实际上是从 24 位放大的,可能是 ALSA),并且rate
是96000(应该是这样)。测试完成后,您可以使用以下命令重新启用 PulseAudio:
编辑:也许我还应该提到我用于测试的声卡 - (部分)输出
lspci -v
: