機殼內是 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。