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