瀏覽單個文章
Shade
Senior Member
 
Shade的大頭照
 

加入日期: Oct 2002
您的住址: El's room
文章: 1,046

剛剛無聊用"削波失真"查了一下,可以查到資料,不過其中的一些解釋可能不太好懂,也許用英文原文查會得到比較精確的資料。

在 foobar2000 裡,clipping 指的是輸出的訊號超過資料所能允許的範圍,例如 16bit 的聲音檔,其資料範圍是 +32767 ~ -32768,以 dB 來表示就是 0dBFS。如果輸出的數值超過這個範圍,譬如說 +40000,這個數值超過 +32767(0dB),所以超出的部分就會被切掉,無法表現出這個數值,只能記錄為資料範圍所允許的最大值 +32767。如果有太多個取樣點的數值都超過 +32767(0dB),則它們都只能被紀錄為 +32767,這時你看到的波形,就是頂部呈現一條直線(每一個點都是 +32767,連成一條直線),這種輸出的波形轉換成電流,就是「直流」,沒有保護措施嚴重的話,就會燒毀後端的設備。

正常的情況下,原始聲音檔所記錄的數值是不會超出它所能允許的資料範圍,但是如果你故意放大音量,譬如說做正規化(Normalize) 到 200%,這時就會有許多的取樣點被放大至破表,就會產生 clipping 了。
當然一般不會有人這麼做,除非是對音訊處理毫無概念的人
然而有一種很常見的情況會使我們碰到 clipping 的問題,那就是播放 MP3,OGG,AAC 等失真壓縮的音源。當原始聲音檔經過失真壓縮之後,很容易產生 clipping,尤其是如果原始聲音檔的音量原本就很大,很接近 0dB,這樣再經過壓縮之後,很容易就破表了。
所以播放 MP3,OGG,AAC 等失真壓縮的音源時,我們就會碰到 clipping。
foobar2000 的 clipping warning 這個功能,就是當解解碼器在解碼輸出的時候,如果發現解出來的資料數值會超過 0dB,就會跳出警告訊息來提醒使用者,破表了,請降低輸出的音量。
這裡的降低輸出音量不是去調音效卡的音量控制,那是沒有用的,而是要調整 foobar2000 內部的音量控制(Preamp),調整解碼器輸出的音量,讓解碼器在輸出破表之前,就先在內部降低即將要輸出的音量。

為了更自動地做到這點,foobar2000 又有另一個功能,叫做 ReplayGain。使用 ReplayGain 它會偵測每一首歌的音量,如果它發現音量會破表,它就會在這個檔案的後面寫入一個標籤(tag),裡面紀錄著這個檔案播放時需要降低多少音量才不會破表。這樣當播放時解碼器解碼到這個檔案,就會自動的根據 ReplayGain 的記錄來降低輸出的音量,就不會破表啦
__________________
舊 2005-05-11, 06:54 AM #4
回應時引用此文章
Shade離線中