Directsound 与 Waveout 有何不同
生活随笔
收集整理的這篇文章主要介紹了
Directsound 与 Waveout 有何不同
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Q Directsound 與 Waveout 有何不同?
A Waveout 是在32位的Windows上的一種老舊且過時,用來播放數(shù)字音訊的應用程序接
口(Application
Programming Interface,簡稱API)。舊的Windows操作系統(tǒng)(如Win9x WinNT4)在 Wav
eout 的完成度很高(因為 waveout 是針對這些操作系統(tǒng)設計的),如果你想獲得最好
的效能,你應該在這些操作系統(tǒng)上使用 Waveout 輸出。然而 Waveout 的功能有所局限
,它無法支持「混和多重音訊流」的功能。這顯示在Win2kXP下的 Waveout,只是為了
舊的軟件的兼容性所提供的,也因此Win2kXP下 Waveout 的完成度很糟,它沒有使用任
何的硬件加速功能,所有的混音動作都是用軟件來執(zhí)行(因此當CPU的使用率很高時,常
常會發(fā)生類似CD跳針的斷音現(xiàn)象)。
Directsound 是種較新、較現(xiàn)代化的聲音播放 API,都已經內建在最近的32位Windows操
作系統(tǒng)中。
Directsound 支持混和多重音訊流、獨立的音量控制、硬件加速層及硬件仿真層(如果
某些功能硬件無法支持,可以用軟件來仿真,因此程序設計師無須擔心他們的新 l33t?
碼無法在舊的聲霸卡16上運作)。一般來說,只要你的操作系統(tǒng)安裝了適當?shù)穆暱寗?br /> 程序及最新的 DirectX,Direstsound 都應該可以運作的很好(除了WinNT4以外)。在
Win2kXP下,Directsound 比 waveout 更好,因為在這些操作系統(tǒng)里,Directsound 的
完成度相對的比 waveout 來的更高(比 waveout 占用較少的CPU資源,自由度較高,且
不會有 Waveout 常見的小毛病)。Directsound 原本是被設計來讓游戲利用系統(tǒng)的硬件
加速功能,而無須直接接觸低階的硬件函數(shù)(就如同 DirectX 其它的組件)。
Q 為何 Directsound 總是比 waveout 來的小聲?
A 在Win2kXP中,改變 waveout 的音量似乎會改變整體音量的設定,然而 Directsou
nd 的音量是獨立控制的。換句話說,你用 waveout 來播放音樂,你將音量設為50%,你
就會得到50%的音量,然后你用 Directsound 來播放,你將音量設為50%,你只會得到最
大音量的25%。解決之道:別使用 waveout,并在Windows的音量控制中將音量設為最大
。
Q Directsound 及 waveout 之間的聲音輸出品質有所不同嗎?
A1 在Win2kXP下(或者使用WDM驅動程序),waveout 及 Directsound 只有在傳輸 P
CM 資料給 Windows kernel mixer 上有兩點不同。waveout 只使用軟件混音,因此較少
造成系統(tǒng)中的特殊問題,而 Dircetsound可以使用硬件混音,因此會造成某些已知的,
聲音品質的問題。
A2 在Win9x下,Directsound 驅動系統(tǒng)完全的與 waveout 分離,并使用低階的方式來
控制硬件,因此這就像拿兩種不同的驅動程序來配合 waveout 及 Directsound。在使用
某些老舊的ISA接口的聲卡時,Directsound 為了節(jié)省 ISA 總線的頻寬,有著會將音訊
資料降低取樣率至 22khz 8bit (或者其它相近的取樣率)的問題。
Q 對于 Directsound 而言,軟件混音及硬件混音有何不同?
A 在 WinXP sp1、DirectX 8.1 中,無論是使用微軟的 Directsound 核心或者是驅動
程序來進行硬件混音,都很容易碰到問題。目前已經證實,在 Winxp 下使用硬件混音來
傳輸音訊資料時,即使是使用不同的聲卡,皆會碰上「取樣頻率」的問題。特別是某些
驅動程序存在已久的問題(著名的創(chuàng)新未來 Audigy 聲卡 Skipping 問題,在某些設定
中會出現(xiàn)不間斷、靜態(tài)的雜音,甚至在某些例子中,會發(fā)生聲音品質驟降的情形,天曉
得為何會如此!)。如果你想穩(wěn)定的運作計算機,那建議你最好把硬件加速給關掉。硬
件混音可以 foobar2000 的偏好設定中的 Driectsound 這個字段里找到 "allow hardw
are acceleration"。開啟它不代表你就真的激活了這個功能(Directsound 會在沒有可
用資源時自動使用軟件混音)。
關于重新取樣(resampling)
Q 如果我使用重新取樣的功能,能夠增進(improve)聲音的品質嗎?
A 不行,你無法利用重新取樣來「增進」聲音的品質,重新取樣是個有耗損的過程。你
可以試看看改變一張 bmp 圖片的大小,改過大小的圖片會和原本的圖片極為相似,不過
假如你把兩張圖都放大(zoom-in)來看,你會發(fā)現(xiàn)它們在細節(jié)上并不相同。在某些硬件上
,如果你使用高品質的重新取樣軟件,來避免讓你的驅動程序硬件處理重新取樣的過程
,你可以避免大量資料的損失(也就是避免音訊品質降低)。我知道某些人在他們的聲
霸卡16上將取樣率提升為 96khz 24bit,并且聲稱這樣能聽到較「明亮」的聲音(事實
上Windows kernel mixer會將取樣率降回 44khz 16bit),別聽他們所說的話。
Q 我應該將重新取樣的參數(shù)設為多少比較好?
A 首先,你應該查詢你聲卡的硬件資料。某些聲卡(例:在 Awesome系列以前發(fā)售的
聲霸卡)不需要重新取樣,這表示你不需要額外的重新取樣就已經得到最好的品質了(
不會有重新取樣造成的品質降低)。所有的 Live!系列Audigy系列AC97兼容的聲卡
,都已經將輸出的取樣頻率固定為 48khz,重新取樣的品質會因為驅動程序硬件裝置
Windows混音設定而改變。在許多例子中,SSRC重新取樣軟件會優(yōu)先于你的硬件驅動程
序,因此你需要將重新取樣的參數(shù)設為 48khz16bits,以避免你的硬件驅動程序來進
行它們較差的重新取樣。
Q 但是我在我的聲霸卡上可以重新取樣為 96khz24bits ...
A 當然可以,Windows混音器會將取樣率降回你硬件能夠接受的格式(例如: 48khz1
6bits),這會造成額外的品質降低。不要提升取樣率,除非你的硬件真的能夠接受這些
格式。
Dithering
dither 在計算機繪圖上稱為「遞色」,而在處理音訊上,也有著相似的意思。以下有三
張圖,大家可以看看 dither 的差異在何處。
原始的圖(24bit 高彩),左上角的小方塊是從黑框中放大的。
有 dither 的圖(8bit 256色),較遠處看可以說看不出與原圖的差異。
無 dither 的圖(8bit 256色),色彩的分布不平順,與原圖可以看出根本的差異。(圖
略)
啟用這個功能,將會在播放波形時Dithering。如果dithering沒有激活,那么foobar20
00將會改用切平。這意指沒有用到的位會被砍掉并丟棄。在許多較安靜的音樂中有淡入
或淡出的情況時,會造成「斷裂」的聽覺效果(也就是淡入出的效果不平順)。
Dithering只有在你將高位(例如:32bit)的音訊以低位(例如:16bit)來播放時才真
正有用。
輸出位設定(Output bit depth)
這里有個下拉式選單,可以讓你選擇輸出的位率。如果你有張 24bit 的聲卡,你當然會
想讓那些沒有用到的位使用 dither to 24bit 來輸出。即使是 16bit 的聲卡,在播放
32bit 的音訊時使用 dither to 16bit 也能增進音質。
foobar2000 處理音訊資料的管道如下
decoder(32 bit fp)=>[replaygain]=>[DSP]=>downsample to 1624 bit with option
al dithering
因此當你選擇 dither to 1624bit 時,建議你激活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 輸出,你會發(fā)現(xiàn)音質和
Kernel Streaming 輸出沒什么不同。
Q 哪些操作系統(tǒng)可以使用 Kernel Streaming ?
A Kernel Streaming 只能在 Windows 2000 及 Windows XP 上運作,有人說應該可以
在Windows ME 上運作。
如何設置
一打開 foobar2000, 你會發(fā)現(xiàn)它連 play, stop 這些基本的按鈕都沒有, 你可以到 Fo
obar2000>Preferences>Display 里, 選 Show buttons, 接著到 DSP Manager, 把右邊
的 Resampler 移到左邊, 然后在 DSP Manager 下的 Resampler 里, 把 Target sampl
e rate 設定成你 soundcard 本身的 sample
rate 以下是一些建議數(shù)值 (參考自 DearHoney 的 RMAA 數(shù)據(jù)庫)
44100 - 16, AWE32, AWE64 和其它類似的 ISA soundcard
48000 - PCI, Live, Audigy1, Audigy2, Extigy, Philips AE, Sonic Fury, Ya
maha 7x4 和一般的 onboard soundcard
96000 - Audigy2 和一些真正支持 96khz 的 soundcard, 例如 Terratec 的
在使用 Resampler 之后, 再試試播放上面提及的兩個測試訊號, 聽聽是否只聽到很純很
尖的超高頻聲音, 而且聽不出兩個檔案的分別。如果是的話, 高質素的 src 已經成功了
。否則請到 foobar2000>preferences>Output 里, 試試選用不同的 Output, 如 Kerne
l Streaming (只限 WDM driver), 變更 DirectSoundWaveOut 里的各種設定再試試看
, 如果仍然失敗的話, 試試在 Windows 音量控制里按選項>進階控制, 看看是否有高低
音控制, 如果有的話, 把高低音都移到正中間再試試看 (如果本身已經在中間就不用移
了), 如果還是不行的話, 我也無話可說。注意使用 Kernel Streaming 時 Windows 音
量控制里的 wave 輸出可能會無法控制, 那是正常的現(xiàn)象。
接著到 Playback 一欄, 會有一個 Output bit depth 的選項, 只有 soundcard 真正支
持 24-bit 時才選擇 24-bit (Audigy1 是 16-bit, Audigy2 才是 24-bit), 因為在不
支持 24-bit 的 soundcard 上選 24-bit 只會令音質比 16-bit 更差, 即使你可能聽
不出。
大致上就是這樣了, 其它的功能自己慢慢發(fā)掘吧。
A Waveout 是在32位的Windows上的一種老舊且過時,用來播放數(shù)字音訊的應用程序接
口(Application
Programming Interface,簡稱API)。舊的Windows操作系統(tǒng)(如Win9x WinNT4)在 Wav
eout 的完成度很高(因為 waveout 是針對這些操作系統(tǒng)設計的),如果你想獲得最好
的效能,你應該在這些操作系統(tǒng)上使用 Waveout 輸出。然而 Waveout 的功能有所局限
,它無法支持「混和多重音訊流」的功能。這顯示在Win2kXP下的 Waveout,只是為了
舊的軟件的兼容性所提供的,也因此Win2kXP下 Waveout 的完成度很糟,它沒有使用任
何的硬件加速功能,所有的混音動作都是用軟件來執(zhí)行(因此當CPU的使用率很高時,常
常會發(fā)生類似CD跳針的斷音現(xiàn)象)。
Directsound 是種較新、較現(xiàn)代化的聲音播放 API,都已經內建在最近的32位Windows操
作系統(tǒng)中。
Directsound 支持混和多重音訊流、獨立的音量控制、硬件加速層及硬件仿真層(如果
某些功能硬件無法支持,可以用軟件來仿真,因此程序設計師無須擔心他們的新 l33t?
碼無法在舊的聲霸卡16上運作)。一般來說,只要你的操作系統(tǒng)安裝了適當?shù)穆暱寗?br /> 程序及最新的 DirectX,Direstsound 都應該可以運作的很好(除了WinNT4以外)。在
Win2kXP下,Directsound 比 waveout 更好,因為在這些操作系統(tǒng)里,Directsound 的
完成度相對的比 waveout 來的更高(比 waveout 占用較少的CPU資源,自由度較高,且
不會有 Waveout 常見的小毛病)。Directsound 原本是被設計來讓游戲利用系統(tǒng)的硬件
加速功能,而無須直接接觸低階的硬件函數(shù)(就如同 DirectX 其它的組件)。
Q 為何 Directsound 總是比 waveout 來的小聲?
A 在Win2kXP中,改變 waveout 的音量似乎會改變整體音量的設定,然而 Directsou
nd 的音量是獨立控制的。換句話說,你用 waveout 來播放音樂,你將音量設為50%,你
就會得到50%的音量,然后你用 Directsound 來播放,你將音量設為50%,你只會得到最
大音量的25%。解決之道:別使用 waveout,并在Windows的音量控制中將音量設為最大
。
Q Directsound 及 waveout 之間的聲音輸出品質有所不同嗎?
A1 在Win2kXP下(或者使用WDM驅動程序),waveout 及 Directsound 只有在傳輸 P
CM 資料給 Windows kernel mixer 上有兩點不同。waveout 只使用軟件混音,因此較少
造成系統(tǒng)中的特殊問題,而 Dircetsound可以使用硬件混音,因此會造成某些已知的,
聲音品質的問題。
A2 在Win9x下,Directsound 驅動系統(tǒng)完全的與 waveout 分離,并使用低階的方式來
控制硬件,因此這就像拿兩種不同的驅動程序來配合 waveout 及 Directsound。在使用
某些老舊的ISA接口的聲卡時,Directsound 為了節(jié)省 ISA 總線的頻寬,有著會將音訊
資料降低取樣率至 22khz 8bit (或者其它相近的取樣率)的問題。
Q 對于 Directsound 而言,軟件混音及硬件混音有何不同?
A 在 WinXP sp1、DirectX 8.1 中,無論是使用微軟的 Directsound 核心或者是驅動
程序來進行硬件混音,都很容易碰到問題。目前已經證實,在 Winxp 下使用硬件混音來
傳輸音訊資料時,即使是使用不同的聲卡,皆會碰上「取樣頻率」的問題。特別是某些
驅動程序存在已久的問題(著名的創(chuàng)新未來 Audigy 聲卡 Skipping 問題,在某些設定
中會出現(xiàn)不間斷、靜態(tài)的雜音,甚至在某些例子中,會發(fā)生聲音品質驟降的情形,天曉
得為何會如此!)。如果你想穩(wěn)定的運作計算機,那建議你最好把硬件加速給關掉。硬
件混音可以 foobar2000 的偏好設定中的 Driectsound 這個字段里找到 "allow hardw
are acceleration"。開啟它不代表你就真的激活了這個功能(Directsound 會在沒有可
用資源時自動使用軟件混音)。
關于重新取樣(resampling)
Q 如果我使用重新取樣的功能,能夠增進(improve)聲音的品質嗎?
A 不行,你無法利用重新取樣來「增進」聲音的品質,重新取樣是個有耗損的過程。你
可以試看看改變一張 bmp 圖片的大小,改過大小的圖片會和原本的圖片極為相似,不過
假如你把兩張圖都放大(zoom-in)來看,你會發(fā)現(xiàn)它們在細節(jié)上并不相同。在某些硬件上
,如果你使用高品質的重新取樣軟件,來避免讓你的驅動程序硬件處理重新取樣的過程
,你可以避免大量資料的損失(也就是避免音訊品質降低)。我知道某些人在他們的聲
霸卡16上將取樣率提升為 96khz 24bit,并且聲稱這樣能聽到較「明亮」的聲音(事實
上Windows kernel mixer會將取樣率降回 44khz 16bit),別聽他們所說的話。
Q 我應該將重新取樣的參數(shù)設為多少比較好?
A 首先,你應該查詢你聲卡的硬件資料。某些聲卡(例:在 Awesome系列以前發(fā)售的
聲霸卡)不需要重新取樣,這表示你不需要額外的重新取樣就已經得到最好的品質了(
不會有重新取樣造成的品質降低)。所有的 Live!系列Audigy系列AC97兼容的聲卡
,都已經將輸出的取樣頻率固定為 48khz,重新取樣的品質會因為驅動程序硬件裝置
Windows混音設定而改變。在許多例子中,SSRC重新取樣軟件會優(yōu)先于你的硬件驅動程
序,因此你需要將重新取樣的參數(shù)設為 48khz16bits,以避免你的硬件驅動程序來進
行它們較差的重新取樣。
Q 但是我在我的聲霸卡上可以重新取樣為 96khz24bits ...
A 當然可以,Windows混音器會將取樣率降回你硬件能夠接受的格式(例如: 48khz1
6bits),這會造成額外的品質降低。不要提升取樣率,除非你的硬件真的能夠接受這些
格式。
Dithering
dither 在計算機繪圖上稱為「遞色」,而在處理音訊上,也有著相似的意思。以下有三
張圖,大家可以看看 dither 的差異在何處。
原始的圖(24bit 高彩),左上角的小方塊是從黑框中放大的。
有 dither 的圖(8bit 256色),較遠處看可以說看不出與原圖的差異。
無 dither 的圖(8bit 256色),色彩的分布不平順,與原圖可以看出根本的差異。(圖
略)
啟用這個功能,將會在播放波形時Dithering。如果dithering沒有激活,那么foobar20
00將會改用切平。這意指沒有用到的位會被砍掉并丟棄。在許多較安靜的音樂中有淡入
或淡出的情況時,會造成「斷裂」的聽覺效果(也就是淡入出的效果不平順)。
Dithering只有在你將高位(例如:32bit)的音訊以低位(例如:16bit)來播放時才真
正有用。
輸出位設定(Output bit depth)
這里有個下拉式選單,可以讓你選擇輸出的位率。如果你有張 24bit 的聲卡,你當然會
想讓那些沒有用到的位使用 dither to 24bit 來輸出。即使是 16bit 的聲卡,在播放
32bit 的音訊時使用 dither to 16bit 也能增進音質。
foobar2000 處理音訊資料的管道如下
decoder(32 bit fp)=>[replaygain]=>[DSP]=>downsample to 1624 bit with option
al dithering
因此當你選擇 dither to 1624bit 時,建議你激活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 輸出,你會發(fā)現(xiàn)音質和
Kernel Streaming 輸出沒什么不同。
Q 哪些操作系統(tǒng)可以使用 Kernel Streaming ?
A Kernel Streaming 只能在 Windows 2000 及 Windows XP 上運作,有人說應該可以
在Windows ME 上運作。
如何設置
一打開 foobar2000, 你會發(fā)現(xiàn)它連 play, stop 這些基本的按鈕都沒有, 你可以到 Fo
obar2000>Preferences>Display 里, 選 Show buttons, 接著到 DSP Manager, 把右邊
的 Resampler 移到左邊, 然后在 DSP Manager 下的 Resampler 里, 把 Target sampl
e rate 設定成你 soundcard 本身的 sample
rate 以下是一些建議數(shù)值 (參考自 DearHoney 的 RMAA 數(shù)據(jù)庫)
44100 - 16, AWE32, AWE64 和其它類似的 ISA soundcard
48000 - PCI, Live, Audigy1, Audigy2, Extigy, Philips AE, Sonic Fury, Ya
maha 7x4 和一般的 onboard soundcard
96000 - Audigy2 和一些真正支持 96khz 的 soundcard, 例如 Terratec 的
在使用 Resampler 之后, 再試試播放上面提及的兩個測試訊號, 聽聽是否只聽到很純很
尖的超高頻聲音, 而且聽不出兩個檔案的分別。如果是的話, 高質素的 src 已經成功了
。否則請到 foobar2000>preferences>Output 里, 試試選用不同的 Output, 如 Kerne
l Streaming (只限 WDM driver), 變更 DirectSoundWaveOut 里的各種設定再試試看
, 如果仍然失敗的話, 試試在 Windows 音量控制里按選項>進階控制, 看看是否有高低
音控制, 如果有的話, 把高低音都移到正中間再試試看 (如果本身已經在中間就不用移
了), 如果還是不行的話, 我也無話可說。注意使用 Kernel Streaming 時 Windows 音
量控制里的 wave 輸出可能會無法控制, 那是正常的現(xiàn)象。
接著到 Playback 一欄, 會有一個 Output bit depth 的選項, 只有 soundcard 真正支
持 24-bit 時才選擇 24-bit (Audigy1 是 16-bit, Audigy2 才是 24-bit), 因為在不
支持 24-bit 的 soundcard 上選 24-bit 只會令音質比 16-bit 更差, 即使你可能聽
不出。
大致上就是這樣了, 其它的功能自己慢慢發(fā)掘吧。
總結
以上是生活随笔為你收集整理的Directsound 与 Waveout 有何不同的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python常用函数总结(按照字母顺序)
- 下一篇: 最小均方算法二分类(基于双月数据集)