2016年8月9日 星期二

16bits, 24bits, floating point 32bits?

這些到底是啥意思?
我懷疑搞音樂的人有幾個真的理解...
搞電腦軟硬體的人才清楚。

這篇裡有細節 https://en.wikipedia.org/wiki/Floating_point

數位音樂記錄一般用PCM code,16bits, 24bits就是每個sample的資料量;
16bits是integer/整數,算來有2的16次方65536的訊號振幅差異,因為還分正相/反相,實際上振幅絕對值是一半32768;
這表示法不能記錄振幅絕對值差異小於1/32768的sample有何不同,這誤差就稱為quantization error;
24bits就是2的24次方,顯然多了非常多,多了2的8次方256階,解析度高很多。

如果拿16bits與24bits來轉來轉去呢?
24轉16再轉回24來看,就會出現馬賽克,損失了一堆細節。
因此在音樂處理過程中,該盡量用高解析度的,最後要輸出到CD格式時才轉成16bits。

但是這用24bits integer總是有其解析度極限,就是前面提的quantization error,處理過程的加加減減會不會那誤差就超過解析度極限呢?
顯然會,運算越多誤差就越大,
例如說,鼓組想擺在音場的右邊偏後面,那鼓組的track振幅就要壓低再加上延遲,左聲道還要壓更低、延遲更長,
怎麼辦?
這就要用國中學過的科學記號法,不動解析度,另外加個指數說明衰減量,0.4655746 x 2^-7這般的表示法,這就是 floating point;
一般用 floating point 32bits,其有效數字,也就前面那0.765758,有24bits,如同24bits integer的解析度;後面的指數有8bits。

因此,音樂處理過程中,盡量用floating point運算,最後再轉回24bits或16bits integer。

vicnest補充
https://drive.google.com/file/d/0ByQVD7tCM9xUQmpFREtKcjVKY1k/view?usp=sharing
剛好上次去ken那邊討論完隔天我就想到底差在哪呢,如何能demo出來。
所以產生了一個24bit輸出(需要用truncate限制住,因為用的DAW Reaper內部mixer是64bit fp)的VSTi分送兩軌,其中一軌用digital gain降低8dB後truncate 24bit,再補回8dB digital gain,另一軌則是加第二個truncate 24bit (應該無用了)
(VSTi同一個pass的render避免掉各種synth的亂數)
Dune 2 output without digital gain.wav
Dune 2 output with -8dB.wav
輸出都還是24bit
有興趣的可以聽聽看-8dB的差異。
這只有減一點點所以失真度並不會太高。不是很容易聽到。沒減的聽起來更清楚些,少了種抑鬱模糊感。

在一般初階的設備,很多都懶得做analog gain,也許在他們器材的原始解析度之下digital gain的bit損失根本被其他雜訊干擾蓋過了。
output chipset應該都是24bit integer,可是像CD audio出來應該就限制在16bit,降低ditial gain的影響就頗嚴重了。所以24bit音樂對比CD原始版,聽起來更好、更不容易受到digital gain減少的失真。
我這邊還有一封問RME support的support ticket,我問他說RME的mixer軟體TotalMix的output是哪種gain,他說全都是didigtal gain,還加了一句...."no audible loss"
"All level controls in Totalmix are digital, but there is no audible lossof signal quality."
以16bit的音樂而言,在修改過的RME UFX,降低output的digital gain還是蠻明顯的。