Higuma兄您好,
其實運作方式很簡單。
舉個例子:
1的二進位數是01,而1x256之後的二進位結果是100000000
2的二進位數是10,而2x256之後的二進位結果是1000000000
3的二進位數是11,而3x256之後的二進位結果是1100000000
10的二進位數是1010,而10x256之後的二進位結果是101000000000
可以發現,如果要在二進位裡,將任何數字乘以256(8bit),只要在低位元加入八個0就可以了。
所以,任何數位輸入訊號的位元深度低於DAC可處理的位元深度,如果要求要lossless(bit-perfect)的位元深度轉換,
只要在低位元的部分補上足夠的0就可以了。
也就是說16bit -> 24bit,只要補上八個位元的0。
而16bit -> 32bit,只要補上16個位元的0。
目前幾乎所有的DAC都是如此處理。
但是音量控制的情況,稍微複雜一點。
有人說,所以bit-perfect音量控制,就是補完0之後,依據音量的設定,砍掉後面某些數量的0。
但實際上如果這樣操作,會很難控制音量,因為如果是16bit的音源和24bit的DAC,那麼只有8個0可以砍。
也就是說,音量只有8段,每一段的訊號強度差一倍。
舉例來說,如果是16bit input -> 24bit DAC:
音量全開= 低位元補8個0,也就是訊號x256。
音量減一格 = 低位元補7個0,也就是訊號x128。
音量減兩格 = 低位元補6個0,也就是訊號x64。
以此類推。
這樣的音量控制,應該沒有人想用吧。
所以實際上,如果真的要達到256階的音量控制,就只會是無損(lossless,可以看作是廣義的bit-perfect),而不會是狹義定義的bit-perfect。
舉例來說:
假設原始訊號是7,二進位為111。
16bit input -> 24bit DAC之後,
音量全開為7x256,二進位為11100000000。
音量減一格為7x255,二進位為11011111001。
音量減兩格為7x254,二進位為11011110010。
以此類推。
請注意當音量大小不為2的指數時,最前面三個位元就不再跟原來相同了(上例為111)。
所以不符合狹義的bit-perfect。
但bit-perfect的精神,其實是lossless,也就是無損。
所以如果以廣義的定義來說,要說這是bit-perfect數位音量控制,也沒有太大的問題。
