机壳内是 RF EMI 暴风区,会导致讯号受到影响。
但更根源的问题是 OS 内部的混音程式会介入 Audio 数据。就算你播放的影音 Audio
讯号格式与 OS 中的默认输出匹配,还是存在各种因素与机会对原始数据造成变动与修
改。
M$ Windows 开发论坛就有人问过一个问题:
Windows 音效输出设置为 24 bit 48kHz,且关闭所有的增强设定与音量控制
均已调至最高。
使用 WASAPI Shared mode 播放音频,音档为 24 bit 48kHz PCM wave file
,且同时间没有其它音频被播放。
问、我会得到 bit perfect output 吗?或其间会受到任何处理造成截断或衰
减(truncation or attenuation)。
M$ Windows Audio team 的工程师是这么回答:
如果侦测到 sample values 超出浮点域中的 -0.985 to +0.985 左右(也就
是接近 peak 的讯号),audio limiter APO 就会介入引起失真。
https://imgur.com/AyWAWZc
而 Audio Engine 内部以浮点 sample 工作,并且路径中可能存在抖动。
你可以通过使用 WASAPI exclusive mode 而不是 WASAPI shared mode 来避
免这两种情况。
M$ Windows Audio Engine 内部有个限制器防止可能的硬件毁损,所以会提早给你一个
软件 Clipping。
虽然原文指 may be dithering in the path,但想想这其实是你几乎必然会得到抖动。
不管你的原始输入格式为何,Windows Audio Engine 只能处理 PCM 讯号,所以所有的
格式均会被解成 PCM 且不论位元深度为何都会一律转为浮点数处理。
处理完它还会在乎原始讯号位元深度跟输出合不合吗?不会,由浮点转换为 16/24 bit
必然是个 Truncation 所以 Dithering 的引入应是不可避免的(int 32 bit 个人就不
确定了)。
基本上要避开 Windows 内部 Audio Engine 的混音处理只能使用 WASAPI 独占模式或
ASIO。