Foobar2000 的問答集與小提示
翻譯者*:wueiz
(*轉載附註:對不起,看到的文章已經好幾手,所以實在無法得知原始連結在何處)
以下的文章轉譯自 Hydrogen Audio forum。
http://www.hydrogenaudio.org/index.php? ... =24&t=6716
Directsound 與 Waveout
Q: Directsound 與 Waveout 有何不同?
A: Waveout 是在32位元的 Windows 上的一種老舊且過時,用來播放數位音訊的應用程式介面(Application Programming Interface,簡稱 API)。舊的 Windows 作業系統(如Win9x WinNT4)在 Waveout 的完成度很高(因為 Waveout 是針對這些作業系統設計的),如果你想獲得最好的效能,你應該在這些作業系統上使用 Waveout 輸出。然而 Waveout 的功能有所局限,它無法支援「混和多重音訊流」的功\能。這顯示在 Win2k/XP下的 Waveout,只是為了舊的軟體的相容性所提供的,也因此 Win2k/XP 下 Waveout 的完成度很糟,它沒有使用任何的硬體加速功能,所有的混音動作都是用軟體來執行(因此當CPU的使用率很高時,常常會發生類似CD跳針的斷音現象)。
Directsound 是種較新、較現代化的聲音播放 API,都已經內建在最近的32位元 Windows 作業系統中。Directsound 支援混和多重音訊流、獨立的音量控制、硬體加速層及硬體模擬層(如果某些功能硬體無法支援,可以用軟體來模擬,因此程式設計師無須擔心他們的新 l33t 碼無法在舊的聲霸卡16上運作)。一般來說,只要你的作業系統安裝了適當的音效卡驅動程式及最新的 DirectX,Direstsound 都應該可以運作的很好(除了 WinNT4 以外)。在Win2k/XP下,Directsound 比 waveout 更好,因為在這些作業系統里,Directsound 的完成度相對的比 waveout 來的更高(比 Waveout 占用較少的CPU資源,自由度較高,且不會有 Waveout 常見的小毛病)。Directsound 原本是被設計來讓游戲利用系統的硬體加速功能,而無須直接接觸低階的硬體函數(就如同 DirectX 其他的組件)。
Q: 為何 Directsound 總是比 waveout 來的小聲?
A: 在 Win2k/XP 中,改變 Waveout 的音量似乎會改變整體音量的設定,然而 Directsound 的音量是獨立控制的。換句話說,你用 Waveout 來播放音樂,你將音量設為50%,你就會得到50%的音量,然後你用 Directsound 來播放,你將音量設為50%,你只會得到最大音量的25%。解決之道:別使用 Waveout,並在 Windows 的音量控制中將音量設為最大。
Q: Directsound 及 Waveout 之間的聲音輸出品質有所不同嗎?
A1: 在Win2k/XP下(或者使用WDM驅動程式),Waveout 及 Directsound 只有在傳輸 PCM 資料給 Windows Kernel Mixer 上有兩點不同。Waveout 只使用軟體混音,因此較少造成系統中的特殊問題,而 Dircetsound 可以使用硬體混音,因此會造成某些已知的聲音品質的問題。
A2: 在Win9x下,Directsound 驅動系統完全的與 Waveout 分離,並使用低階的方式來控制硬體,因此這就像拿兩種不同的驅動程式來配合 Waveout 及 Directsound。在使用某些老舊的ISA介面的音效卡時,Directsound 為了節省 ISA 匯流排的頻寬,有著會將音訊資料降低取樣率至 22Khz 8bit (或者其他相近的取樣率)的問題。
Q: 對於 Directsound 而言,軟體混音及硬體混音有何不同?
A: 在 WinXP Sp1、DirectX 8.1 中,無論是使用微軟的 Directsound 核心或者是驅動程式來進行硬體混音,都很容易碰到問題。目前已經証實,在 WinXP 下使用硬體混音來傳輸音訊資料時,即使是使用不同的音效卡,皆會碰上「取樣頻率」的問題。特別是某些驅動程式存在已久的問題(著名的創新未來 Audigy 音效卡 Skipping 問題,在某些設定中會出現不間斷、靜態的雜音,甚至在某些例子中,會發生聲音品質驟降的情形,天曉得為何會如此!)。如果你想穩定的運作電腦,那建議你最好把硬體加速給關掉。硬體混音可以 foobar2000 的偏好設定中的 Driectsound 這個欄位里找到 "Allow Hardware Acceleration"。開啟它不代表你就真的啟動了這個功能(Directsound 會在沒有可用資源時自動使用軟體混音)。
關於重新取樣 (Resampling)
Q: 如果我使用重新取樣的功能,能夠增進(Improve)聲音的品質嗎?
A: 不行,你無法利用重新取樣來「增進」聲音的品質,重新取樣是個有耗損的過程。你可以試看看改變一張 bmp 圖片的大小,改過大小的圖片會和原本的圖片極為相似,不過假如你把兩張圖都放大(Zoom-in)來看,你會發現它們在細節上並不相同。在某些硬體上,如果你使用高品質的重新取樣軟體,來避免讓你的驅動程式/硬體處理重新取樣的過程,你可以避免大量資料的損失(也就是避免音訊品質降低)。我知道某些人在他們的聲霸卡16上將取樣率提升為 96khz 24bit,並且聲稱這樣能聽到較「明亮」的聲音(事實上 Windows Kernel Mixer 會將取樣率降回 44khz 16bit),別聽他們所說的屁話**。
(**轉載附註:對不起,去英文網頁確認過,作者的確用的詞是 BS)
Q: 我應該將重新取樣的參數設為多少比較好?
A: 首先,你應該查詢你音效卡的硬體資料。某些音效卡(例:在SB Awesome系列以前發售的聲霸卡)不需要重新取樣,這表示你不需要額外的重新取樣就已經得到最好的品質了(不會有重新取樣造成的品質降低)。所有的 SB Live!系列/Audigy系列/AC97相容的音效卡,都已經將輸出的取樣頻率固定為 48khz,重新取樣的品質會因為驅動程式/硬體裝置/ Windows 混音設定而改變。在許多例子中,SSRC重新取樣軟體會優先於你的硬體/驅動程式,因此你需要將重新取樣的參數設為 48Khz/16bits,以避免你的硬體/驅動程式來進行它們較差的重新取樣。
Q: 但是我在我的聲霸卡上可以重新取樣為 96khz/24bits ...
A: 當然可以, Windows 混音器會將取樣率降回你硬體能夠接受的格式(例如: 48Khz/16bits),這會造成額外的品質降低。不要提升取樣率,除非你的硬體真的能夠接受這些格式。
Dithering
Dither 在電腦繪圖上稱為「遞色」,而在處理音訊上,也有著相似的意思。以下有三張圖,大家可以看看 Dither 的差異在何處。
原始的圖(24bit 高彩),左上角的小方塊是從黑框中放大的。***
有 dither 的圖(8bit 256色),較遠處看可以說看不出與原圖的差異。***
無 dither 的圖(8bit 256色),色彩的分布不平順,與原圖可以看出根本的差異。***
(***轉載附註:對不起,去英文網頁確認過,沒有這些圖?)
啟用這個功能,將會在播放波形時 Dithering。如果 Dithering 沒有啟動,那麼foobar2000 將會改用切平。這意指沒有用到的位元會被砍掉並丟棄。在許多較安靜的音樂中有淡入或淡出的情況時,會造成「斷裂」的聽覺效果(也就是淡入/出的效果不平順)。
Dithering只有在你將高位元(例如:32bit)的音訊以低位元(例如:16bit)來播放時才真正有用。
輸出位元設定 (Output Bit Depth)
這裡有個下拉式選單,可以讓你選擇輸出的位元率。如果你有張 24bit 的音效卡,你當然會想讓那些沒有用到的位元使用 dither to 24bit 來輸出。即使是 16bit 的音效卡,在播放 32bit 的音訊時使用 dither to 16bit 也能增進音質。
foobar2000 處理音訊資料的管道如下
Decoder (32 bit fp) => [Replaygain] => [DSP] => Downsample to 16/24 bit with optional dithering
因此當你選擇 Dither to 16/24bit 時,建議你啟動 Dithering。然而如果設為 32bit 是不需要啟動 Dithering,因為從解碼器直接傳送過來的資料就是 32bit。
關於 Kernel Streaming
Q: 何謂 Kernel Streaming ?
A: Kernel Streaming 會繞過 Windows Kernel Mixer,直接輸出音訊資料給音效卡。這種方式有著較低的輸出延遲,也許可以被視為 ASIO output 之外的另一種選擇。
Q: 我應該用 Kernel Streaming 嗎?
A: 如果你的音效卡及驅動程式能支援,且你使用 Kernel Streaming 沒有什麼問題的情況下,我會建議你使用 Kernel Streaming 。
Q: 為何使用 Kernel Streaming 來輸出,比使用 Directsound 輸出,感覺聲音變的更大聲或者明亮?
A: 聲音並沒有變的明亮,只有變大聲。因為輸出資料給音效卡的方式不同,因為繞過了 Windows 的混音器,音量控制 (Wave) 對於 Kernel Streaming 是無效的,而且都以最大音量來輸出。如果你將音量控制中的 Wave 音量設為最大,並使用 Directsound 輸出,你會發現音質和 Kernel Streaming 輸出沒什麼不同。
Q: 哪些作業系統可以使用 Kernel Streaming ?
A: Kernel Streaming 只能在 Windows 2000 及 Windows XP 上運作,有人說應該可以在 Windows ME 上運作,但仍未被確定。
(****轉載附註:如果知道這篇原始連結,歡迎告知,謝謝)