Windows Vista中,對于任何一個音頻流都有四種不同的音量控制方式,它們是: : d: l: y6 E) c! P- v) p) h
<P></P>, a, C, L/ B5 R( x/ d# q
<P> 1. 流音量(Stream Volume)</P>
2 r+ Y5 j" s; r8 `1 U* G<P> 2. 簡單音量(Simple Volume)</P>& Z& B$ e: O2 B- T2 D7 p6 m
<P> 3. 通道音量(Channel Volume)</P>
l& }5 x c5 g: I+ f+ F) \<P> 4. 端點音量(EndPoint Volume)</P>
3 H" P* u: z6 Y: s! L<P> 由于每種方式是一個增益級(gain stage),所以每一種都可以添加到音頻輸入采樣中,并生成最終的音頻輸出流。</P>
: Q p, y' |6 ?8 a F<P> 圖中的每個WASAPI實例表示一個音頻流,這些流會在音頻合成器(Mixer)中合并起來并“流向”音頻驅(qū)動。流音量、簡單音量、通道音量均通過向某個獨立的音頻流中插入一個APO實現(xiàn),而端點音量則是在合成器后面添加一個APO或者用硬件音量控制來處理,這取決于用戶的音頻解決方案的功能。</P>9 M* D9 I4 U8 ]- z* T1 E' ^; B
<P> 那么這些不同的音頻控制有什么聯(lián)系呢?</P>% f2 t: h) H! Q9 K# E# F: W* X
<P> 首先來講講<STRONG>流音量。</STRONG>流音量是多通道音量,它對每個音頻流起作用,可以讓應(yīng)用程序?qū)崿F(xiàn)一些相對簡單的3D效果(使用多通道流音量控制來模擬一個處于活動狀態(tài)的球被彈起后的位置改變)。你可以讓應(yīng)用程序控制某個獨立音頻流的音量,但這種需求比較少。</P>3 U `5 m& O% w2 j- |9 o0 {
<P> 接下來是<STRONG>通道音量。</STRONG>通道音量是針對音頻會話(session)的音量,用于控制整個會話中的所有音頻流的音量(如果你還記得“大圖”貼的話,其中講到過一個會話包含了許多音頻流)。通道音量之所以存在是因為有 waveOutSetVolume API--由于波形音量是多通道(立體聲)音量,所以我們必須在WASAPI中模擬一個。同樣的,這種音量也很少被使用--通常僅當(dāng)從控制面板運行系統(tǒng)安裝任務(wù)(空間修正(room correction))時才會改變通道音量,所以這一設(shè)置會影響所有的應(yīng)用程序而不僅僅針對某個特定的應(yīng)用程序)。</P>
5 \, b- J3 X: w d0 Y1 J- R; V<P> 再來則是<STRONG>簡單音量。</STRONG>簡單音量是這對音頻會話的音量,用于控制整個會話中的所有音頻流的音量。它是一種統(tǒng)一的音量,會平均應(yīng)用到所有的通道。這也是我們希望大部分應(yīng)用程序使用的音量控制方式--因為它提供了一種簡單的控制應(yīng)用程序音量和靜音狀態(tài)的方式,這種方式對于大部分應(yīng)用程序已經(jīng)足夠了。這種音量其實就是Vista聲音混合器中顯示的每個應(yīng)用程序的音量滑塊。</P>9 t& C6 g4 z1 d) ]
<P> 邏輯上講,你可以把上面三個音量一起應(yīng)用(但這其實不是事實,它們其實是同時被應(yīng)用的)來為每個音頻流創(chuàng)建最終音量。</P>! R& O1 [" x" _1 E: V9 k8 F
<P> 最后我們來講<STRONG>端點音量。</STRONG>正如我以前提到過的,端點音量表示主音量(master output)輸出,它是作用于最后合成的音頻流的,可以對特定的端點起到主音量控制的作用。</P> |