不会。
简单说,外行以为数字音频系统是这样:
自左到右的,按照采样频率,比如 48khz,一个点一个点的匀速从磁盘读取、写入 DA 芯片,然后还原出音频波形。
然后他们就创作出一大堆的奇谈怪论。比如,他们以为,如果 CPU 不能“实时”的、精确间隔 1/48k 秒的把一个个采样点送进 DA 芯片,音频波形就会随之变劣——就好像当年电机转速忽快忽慢的磁带录音机一样——还发明了一个极其有 B 格的词叫 jitter,专门用来描述他们想象出来的这种现象。
这是典型的半瓶子咣当。
他们自己有那么蠢、解决不了这个问题,就以为全世界都必须像他们一样蠢。
很遗憾,只有这一小撮蠢人会如此设计数码音频系统。
真实世界里,哪怕你 5 块钱买个地摊 mp3,它都不会像这些低能老烧一样蠢。因为它是这样设计的:
首先,计算机体系并不是只有 CPU。CPU 也不是每次需要用的时候就去磁盘 /flash 读取音频信息,而是一次性把整个 mp3 或者无损的 flac 文件读入内存。
然后,音频芯片里面起码包括三个部分。第一部分是 DA 转换器,第二部分是按照外接晶振频率、均匀从缓冲区搬运采样点、传入 DA 电路的这么一个逻辑电路(为叙述简单起见,这里忽略了不同采样率如何支持等问题的解决方案),第三部分就是集成在芯片中的存储器,用来缓冲音频。
换句话说,音频播放的时间精度由音频芯片本身(以及晶振)保证,CPU 只管保证缓冲区总有数据就够了。
音频播放真正的工作模式是:
- CPU 从磁盘读入音频信息并解码,置于内存缓冲区
- CPU 指示 DMA 芯片,把解码后的若干毫秒音频数据传给音频芯片
- 音频芯片把这些音频数据存储在缓冲区里
- 音频芯片的播放控制逻辑开始从缓冲区匀速搬运音频信息
- 音乐播放开始
- 当音频芯片缓冲区内容即将用尽(比如还剩下 2ms 的数据)时,产生中断
- CPU 执行中断程序,指示 DMA 把解码后的另外若干毫秒音频数据传给音频芯片
- DMA 芯片忙于数据传输时,CPU 就可以做其它事情了
- CPU 的工作时间太宝贵,不应该浪费在这些屁事上
- 它只要消耗若干纳秒处理下中断、指示 DMA 开始工作就行了
- 正因为 cpu 这种高效率,使得 2ms 的缓冲时间已经绰绰有余、无需担心数据接不上
- 音频芯片继续缓存这些数据
- 音频芯片的播放控制逻辑毫无所觉,自始至终以晶振控制的稳定频率搬运数据
- 在播放逻辑眼里,数据永远都是现成的,永远不会缺
现在哪怕 SATA 都有 6Gbps 以上的传输率。你知道它的意思吗?
意思是,只要磁盘速度够,CPU 可以一秒钟搬运大约 100 首 MP3、或者说 500 分钟的音频到内存。
换句话说,CPU 干一秒活,声卡得忙起码 8 个小时——注意这还是按磁盘传输速率算的;按内存传输速率的话就更夸张了:DDR4 内存每秒能传大约 25G 字节数据;如果这些数据是 mp3 的话,这一秒钟传输的内容声卡播放半个月都播不完。
所以,我们压根不需要“实时”处理音频——让 CPU 干几个 ms 的活,它就能把过去磁带录音机的一整盘磁带读入内容;然后丢给声卡播放就行了。
但,真这样搞就要求声卡上面必须有一个比较大的存储;而且你听不了几秒钟就切歌的话,这些搬运工作就白费了——CPU/ 总线的工作时间是很宝贵的,不能这样浪费。
同时,对游戏、MIDI 来说,我们希望在敲击键盘后、音箱能尽快出现反馈,让我们知道自己的操作 / 弹奏有效果了——你让声卡缓存 1M 信息,这里就会出现若干秒的延迟。这显然是无法使用的。
因此,我们故意把声卡缓冲区做的很小,让它只能存储几个毫秒的音频数据(实际情况是支持更复杂的协议,使得在游戏 /MIDI 业务时延迟更低、但在播放音乐时缓冲更大:有时候机器突然死机、但并未重启或者关机,你就会听到声卡在反复播放一小段音频。这就是因为 CPU 罢工、声卡内部的环形缓冲区内容得不到更新、使得它的内置播放逻辑循环播放缓冲区内的声音片段)。这才能尽量降低游戏 / 演奏的延迟。
——如果你用蓝牙耳机玩过游戏、弹过 MIDI 的话,应该会对此有所察觉。你会发现音箱里面的声音“不跟手”,总是在你敲过键盘后略微延时才会出现:这在你玩格斗、音游、演奏时更加明显,因为这类游戏 / 工作需要更实时的反馈
——造成这个问题的原因,就是蓝牙传输比较慢、编解码复杂、缓冲区大
——这样才能在受到外界干扰、产生误码时,从容不迫的纠错或者丢弃错误报文、要求主机重传
——没错。反驳老烧们的另一个谣言:数字音频系统是不会有误码的。各种协议都会实时的识别和纠正它们。借助缓冲区,这个识别和纠正动作也不会对音质造成任何影响
——但,这些技术要求也使得通过蓝牙播放音乐时,延迟可能达到 100ms 甚至 200ms 以上
——这个延迟对音乐播放毫无影响,但比较影响游戏、音乐演奏等需要听到实时反馈的应用
内核工匠:一文读懂蓝牙音频
扯到蓝牙就有点太远了,哈哈。
回到声卡。
综上,在设计合理的前提下,利用缓冲区和中断机制,数字音频系统是不存在什么 jitter 的。
就是设计不合理、使得音频芯片缓冲区断流,也只会导致噼噼啪啪的“爆音”而不是 jitter。
实时内核不会改变音质。它对音频系统的可能改善只有一个,就是降低延迟——但却对蓝牙这种协议层面产生的延迟无能为力。
而且,非实时内核也能很轻易的就把延迟压到极低水平、低到哪怕格斗游戏玩家、音游玩家、音乐家都感知不到的水平。
鉴于评论区老烧们见缝插针的插入误解,看来这里有再次正本清源的必要。
一、音源 -CPU- 声卡
音源文件,无论是 mp3、flac 还是 wav,载入内存后 CPU 都会给它解码。
这是因为无论 mp3 还是 flac 甚至 wav,都可能是压缩过的:WAV
而声卡是无法直接播放这些五花八门的音频文件的。
因此,虽然如果你使用各种播放库时,它允许你直接传入 mp3、flac 以及各种格式的 wav,或者直接传入各种视频、在播放视频的同时播放它内嵌的伴音音频;但,声卡本身是没有支持这些五花八门的音频格式的能力的。
在你看不见的地方,这些文件都会被 CPU 按照一定流程识别格式、解开压缩。最终送给声卡的,一定是标准的 PCM 格式信息。
换句话说,在上面的缓冲区里,存放的一定是 PCM 格式音频。声卡不可能识别 MP3,你给它 MP3 它一定会发出各种噪音。
很多人可能被评论区老烧误导,以为出现了 PCM 是多么可怕的事……扯淡。
二、缓冲区到 DAC
DAC 的工作原理是:你给它一个数字,它输出等于这个数字的电平。
而 PCM 呢,它其实就是一序列的采样点;只要你按照采样频率把 PCM 数据传给 DAC,DAC 就能还原当初采样的音频波形了。这个波形再经过滤波、放大,就可以通过两米长的耳机线播放进你的耳朵,或者通过三四米甚至十几米长的模拟线缆送进功放机(可能内置于音箱),完成模拟波形放大并通过喇叭播放。
换句话说,DAC 相当于过去的录音机磁头,而我们把 PCM 匀速送到这个“磁头”下的“走带机构”是什么呢?
没错。晶振。晶体振荡器。石英晶体振荡器。
依靠晶振输出的、超高稳定性的时钟信号,把一个个 PCM 数据里的采样点依序、匀速的送到 DAC。
当然了,晶体振荡器虽然具有极高的稳定性,但这个稳定性也是有极限的。这在高精度仪表里面是个问题,也就是 jitter。
不过,这个 jitter 究竟听不听得到呢?
1、录音机时代的抖晃率
录音机时代和现在不同,当时全靠电机转速控制技术来保证“走带机构”以4.76 厘米每秒的速度匀速走带;但这个技术是不靠谱的,电池电量不足时就会明显变慢。下面就是典型的电机转速控制电路:
录音机磁带走得慢的解决办法 - 音频技术 - 电子发烧友网
有些录音机的调速电路是集成在电机内部的;电机后端会留一个调节孔,用螺丝刀伸进去拧里面的可调电阻,就可以控制走带速度了。
我们可以看到,这套电路并没有石英晶体振荡器来精确控制速度,而是使用了不靠谱的滑动电阻器。
理所当然的,无论环境温度变化还是机器工作时的震动(以及音箱震耳欲聋的声波冲击)造成的滑动变阻器接触簧压紧 / 放松、还是空气湿度变化、长期使用后的脏污,都可能引起走带速度改变。
那么,怎么校准录音机的走带速度呢?
Freeman:用手机 APP 调整磁带录音机转速的方法
答案是用一盘录着标准 1khz 音频的专用磁带在上面放音,然后用螺丝刀调整可调电阻,直到最终播放的音频频率恰好等于 1khz。
当然,正好等于 1000.00HZ 是不可能的。人耳并没有那么高的精度。
更“可怕”的是,电机本身依靠磁场工作,而直流电机内部的磁场是不均匀的:
绕组磁场方向和永磁体磁场正好相反时,受到的磁场推力是最大的;但一旦稍微偏转,受到的磁场力就会指数水平的降低:
我拆解过几十个不同录音机使用的电机。很遗憾,它远不如现在的电脑风扇精致:简单的两片弧形永磁体(也有做成环形、但仍然只有两个极性的),三个绕组——现在电脑风扇为了静音,经常都要做 5 个、7 个甚至更多绕组呢。
这样的电机,其转速显然不可能非常均匀。
不仅如此,录音机走带速度还严重依赖于“主轴”的加工精度;但主轴本身可能有安装误差、或者主轴本身不够直、使得转动时另一端画圆、于是走带速度就忽快忽慢。
用久了的主轴还可能沾染上大量脏污,我当年帮人修录音机,其中的一大工作就是抠上面的污物——这玩意儿在上面沾的非常紧,尤其那些使用多年未曾打理的,靠酒精是去不掉的;用指甲抠掉大块的、再用酒精彻底擦净,这是当时的重要维修工作之一。
这些脏污显然也会严重影响磁带走带速度。
显然,走带速度是不可能均匀的,一定存在某种忽快忽慢的变动。这叫“抖晃率”。
那么,允许的走带偏差 / 抖动是多少呢?
一.核心技术指标:
1,带速误差<0.15%,即 4.5Hz
2,抖晃率<0.03%RMS,<0.05%PEAK
二.使用的测试工具:
抖晃仪软件,或者实体抖晃仪
索尼 KA3ES 三磁头卡座
三.使用方法:
1,分别播放测试带的带头和带尾
2,检查抖晃仪显示的频率和抖晃率
3,和维修手册的参考值进行比较
如果不符合,检查原因并作出调整!
四.实测结果:
华声 HCD340 测试带
带速 2994.1
抖晃率约 0.03RMS,0.062PEAK
TEAC MTT111DN(标称误差小于 1Hz)
带速 2995
抖晃率约 0.03RMS,0.057PEAK
索尼 KA3ES 的指标是:
带速 2990 到 3010
抖晃率小于 0.047RMS
可见符合技术指标
两盘测试带的测试结果的基本一致的!
华声测试带实测指标分析:
实测频率和 Teac 比误差<1Hz
实测抖晃率和 Teac 比差距<0.01%
玩转测试带之一! 3kHz 和 3.15kHz 测试带的正确使用方法! 国产和进口指标对比!
2、石英晶体振荡器的精度
硬之城 Allchips:谈谈晶振的频率精度、稳定度及长期稳定度
老烧们神奇的耳朵,它们听不见录音机转速 0.15%的“巨大”偏差,也听不出录音机主轴脏污 / 弯曲后远超 0.06%的抖晃——却听得出石英晶体振荡器百万分之几的频率差值。
三、信号传输
在这个框图中:
音源 -CPU- 音频芯片这些路径中,传输的信号都是纯数字信号。
这些信号是无需考虑误码率 / 抖动的,只要缓冲区补充及时就足够了。
而缓冲区到 DAC 的搬运过程比较特殊。此时是“半数字半模拟”的。
半数字指的是 PCM 采样点,这些信息是数字的;半模拟是石英晶体振荡器控制着采样点到 DAC 的输出间隔——当然了,如果你读了前面部分,会知道石英晶体振荡器远比录音机电机“可怕”的精准度和稳定度;那么你肯定不会担心这里出现问题。
没错。可能有 jitter;但那又如何?只要你还是地球上的大型哺乳动物,你就听不出来。
DAC 转换并经过前级滤波、放大之后、传输到音箱这段,是纯模拟信号。
实际实现中,不同方案可能会采取不同的传输方式。
1、光纤输出
光纤输出其实相当于用光纤替代了后续的晶振、DAC 的位置,从而直接把 CPU 放到声卡缓冲区的 PCM 信息透过光纤传递给外部解码器。
这个设计本质上和 USB 输出是一样的。因此这里不再讨论它。
2、USB 输出
USB 输出相当于用 USB 接口替代了声卡的位置,使得 CPU 直接把本该放到声卡缓冲区的 PCM 信息通过 USB 电缆、传递到了外部解码器。
和电脑机箱中一样,这个传输是纯数字输出。也就是说,它并不携带晶振的频率信号。
恰恰相反,USB 音频标准要求在报文中包含 PCM 采样频率等信息(且可以支持不同音频格式);远端的 USB 解码器需要通过这些信息调整自己的晶振分频,从而以正确的速度从自己的缓冲区把一个个 PCM 采样点送到 DAC。
因此,和老烧们的凭空想象不同,这里并不会引入什么 jitter。除非你用的解码器太烂。
3、模拟信号和数字信号
当然,和光纤一样,USB 输出的 PCM 信息是不带校验的。也就是说,它可能出错。
那么,这会不会影响音质呢?
在谈论这个之前,我要先科普一下何谓“数字信号”,以及数字信号有什么优势。
先让我们看看模拟音频信号吧:
如你所见,模拟音频信号是一系列细碎的波。这些波的最高频率是 20KHZ。
通过一条音频电缆传输模拟信号时,这些波可能发生畸变。
畸变包括频率漂移、引入干扰、振幅改变等等——总之,把 20khz 的音频传输 150 米,这是一项极大的挑战。
不过没关系。人的耳朵极不敏感。只要避免引入干扰、造成极大的底噪甚至啸叫,其它畸变都无所谓。反正听不出来。
相比之下,数字信号就靠谱多了。
和模拟信号不同,数字信号要“简单粗暴”的多得多。
以 USB 为例:
USB 总线电平标准、USB 总线状态、USB 总线信号详解_usb 时序图 -CSDN 博客常用通信接口电气特征(七):USB_usb 差分信号电压是多少 -CSDN 博客
看到了吗?
2.8v 以上、0.3v 以下有效。
换句话说,0 和 1 状态至少相差 2.5v,这才是有效的数字信号。
差值低于 2.5v,这个信号就认为是一个错误。
再换句话说,峰值 2.5v 的干扰,这在模拟信号里面足够遮的什么声音都听不清了、根本谈不上音质;但在数字信号里面可以无视。
当然,高速数字信号不用如此恐怖的电压差。耗电太凶、对器件要求太高了。所以标准定在 700~1100mv 这样的级别。这叫牺牲可靠性换速度。
正因为这个牺牲,使得目前的 USB3 对线材存在一定的要求。可以轻易传输 USB2.0 信号的线缆,传输 USB3.0 信号就可能协商不通过,只能降速到 USB2.0 使用。
模拟信号里面,10 个 mv 意味着什么?
——简单说,10 个 mv 就可以把一些耳机驱动到足够损害你的听力的声压级了。
而在数字信号里,几百个毫伏、甚至 2500 毫伏以下的信号可以直接无视。高于这个压差的信号才被认为是有效信号。
长期戴入耳式耳机听歌有什么危害吗?
顺带说一句,搜麦文学大神这篇文章时,我看到了某音频设备厂商在知乎的一个账号正在谋财害命——它甚至鼓吹使用 95db 以上声压听歌、并要求设备必须能把耳机推到 120db,也就是痛阈。
但事实上,长时间用超过 65db 的音量听歌,已经可能造成永久性听力下降了。
每天暴露在 91db 噪声环境里的时间超过 2 小时,就足以造成听力损失。
而那个无良厂商居然到处放毒、要求使用 95db 以上音量听歌!
那么,如何知道高速数字信号质量好不好呢?
没错,就是硬件同学熟悉的“眼图”了。
只要眼睛张得开,信号就不会有问题。
比如,哪怕牺牲了可靠性的、usb3.2 这样 10Gbps 以上的信号,其误码率都可以低于 10E-12——小数点后 12 个零!
低压差、超高频的 USB3.2 都有这么高的可靠性;USB2.0 嘛……其实压根无需规定,随便捡条线都能用——只要线没锈,包括 USB2.0 的 480Mbps 传输速率,都是想错都难。
USB3 之前的任何协议都是不挑线的。随便买,都能用,别锈的太夸张都行。
直到 usb3 之后,想要支持 USB3 的传输率,你才需要买质量稍微好一点的线。
这样优秀的能力,以 PCM 格式传输点傻乎乎的低频音频数字信号,岂不是手到擒来?
你要知道,USB 所谓的低速、全速,指的可是:
没错,12Mbps!
——事实上,当调制技术更高时,比如当年 12Mbps 的 ADSL,你知道它的设计传输距离有多远吗?
以 ITU-T G.992.1 标准为例,ADSL 在一对铜线上支持上行速率 512Kbps~1Mbps,下行速率 1Mbps~8Mbps,有效传输距离在 3~5 公里范围以内。当电信服务提供商的设备端和用户终端之间距离小于 1.3 千米的时候,还可以使用速率更高的 VDSL,它的速率可以达到下行 55.2Mbps,上行 19.2Mbps。
adsl
没错。用粗重的音频电缆在音乐会现场把功放后的、强劲的音频信号传递 150 米,难死了无数音频工程师;用一对细细的铜线传输数字信号,却成了“小于 1.3km 时,可以使用 VDSL,从而达到下行 55.2Mbps 上行 19.2Mbps”——读出其中的举重若轻了吗?
这就是数字信号的优越性。
就你 20KHZ 的小音频,也敢来碰瓷数字信号?
这玩意儿模拟信号传两米、甚至都不用差分接法,你的木头耳朵照样听不出问题。
结果用更粗的差分线把黑大傻粗的数字信号传一米两米,你居然就听出来了?尤其是,居然是去碰瓷早年的、超高压差的 USB2.0 前的 USB 线?
这都是谁给你的勇气……
这里专门研究您这种高人,不妨去为国家做点贡献吧: