用戶模式音頻組件
在windows vista中,core audio apis充當用戶模式音頻子系統的基礎,core audio apis作為用戶模式系統組件的一個thin layer,它用來將用戶模型客戶端和內核模式音頻驅動以及音頻硬件區分隔開;高級音頻接口,像DirectSound和 windows 多媒體函數(waveOutXxx waveInXxx),都是通過core audio apis進入音頻設備,見下圖:
core audio apis使用戶對音頻終端設備(audio endpoint device)保持友好,它用抽象概念用來代表一個用戶可以直接操縱的物理設備,比如揚聲器,頭戴耳機和麥克風等;

核心音頻api包含mmdeviceapi,wasapi,devicetopology api 和 endpointvolume api,它在Audiosed.dll和 Mmdevapi.dll 用戶模型系統模塊,是如下高級api的基礎:
a.Media Foundation
b.Windows multimedia waveXxx and mixerXxx functions
c.DirectSound
d.DirectMusic
WAS API客戶端通過endpoint buffer來傳遞數據給終端設備,System software and hardware components管理著數據從終端緩存到終端設備,這在一定程度上是有很大的透明度的。
(1)共享模式(shared mode):
有兩種類型的endpoint buffer,第一種為共享模式,WASAPI的客戶端打開了一個共享模式的音頻流,然后客戶端向endpoint buffer寫入音頻數據,window audio engine從這個buffer中讀取數據;在這種模式下,客戶端與其他進程中的程序共享著audio hardware,audio engine混合這些程序的流并且通過硬件播放這個混合后的流;audio engine是一個用戶模型的系統組件(audiodg.dll);
(2)獨占模式(exclusive mode):
于此相反,一個客戶端采用獨占模式打開一個音頻流;
注意:
a.雖然這個圖表示了共享和獨占模式兩個流,但同一時間只有一個流(同時一個與之相關的endpoint buffer)存在,究竟哪個存在,取決于客戶端打開這個流的方式;
b.在獨占模式中,客戶端可以選擇任何的endpoint device支持的的音頻格式開打開流,而在共享模式下,客戶端必須用目前audio engine使用的mix format;
c.win7中,加入的新的共享模式叫low-latence mode,低延時,適用于通信程序;
d.core audio api同時支持 pcm和非pcm流格式;然而,audio engine只可以配置PCM流,獨占模式流可以采用非pcm格式;
音頻引擎(audio engine)
audio engine運行在它自己的保護線程,它與程序運行的線程相分離;為了支持共享模式流,Windows audio service分配一個跨進程的endpoint buffer,應用程序和音頻引擎都可以使用的;作為獨占模式,endpoint buffer 住在可以被程序和音頻硬件訪問的內存塊;
音頻服務(audio service)
windows audio service是用于實現windows音頻策略的模塊,音頻策略是用于在多個共享和競爭并存(使用相同的audio hardware)的程序中分配策略;windows audio service通過設置引擎的控制參數實現音頻策略,其使命包括:
a.保持音頻設備的音軌,這個音軌用戶從系統中增加或移除
b.監控在系統中分配給音頻設備的任務
c.管理各種纏上相似音頻內容層級的任務組的音頻流。(控制臺,多媒體和通信)
d.為了許多種類中的每個音頻內容控制混合輸出流的音量等級
e.為音頻流通知音頻引擎處理在數據通道里的元素。
上圖中,終端設備是一個插入音頻適配器的揚聲器,客戶端程序向endpoint buffer寫入音頻數據,audio engine處理從buffer到endpoint device的傳輸細節;該圖只展示了渲染流, 同樣也支持捕獲流,在共享模式下,多個客戶端可以從音頻硬件設備共享捕獲流,在獨占模式下,一個程序擁有設備捕獲流的獨占權限;
本文參考文檔:http://msdn.microsoft.com/en-us/library/dd370802(v=vs.85).aspx
浙公網安備 33010602011771號