Core Audio APIs的優(yōu)勢(shì):
Windows Vista、Windows 7、Windows server 2008等系統(tǒng)音頻系統(tǒng)相比之前的系統(tǒng)有很大的變化,產(chǎn)生了一套新的底層API即Core Audio APIs。該低層API為高層API( 如Media Foundation(將要取代DirectShow等高層API)等 )提供服務(wù)。相比之前版本的API有如下優(yōu)勢(shì):
1. 具有低延時(shí)、故障恢復(fù)能力的音頻流。
2. 提高可靠性 ( 將很多音頻函數(shù)從核心態(tài)移到了用戶態(tài) )
3. 提高了安全性 (在安全的,低優(yōu)先級(jí)別的線程處理被保護(hù)的音頻內(nèi)容)
4. 為單獨(dú)的音頻設(shè)備分配了特定的系統(tǒng)級(jí)別的規(guī)則 (console, multimedia, communications) 。
5. 用戶可以直接操作相應(yīng)音頻終端設(shè)備(Audio Endpoint Devices 如:揚(yáng)聲器、耳機(jī)、麥克風(fēng)、CD播放器)的軟件抽象。
Core Audio APIs在系統(tǒng)中的位置:

Core Audio APIs的組成:
1. Multimedia Device (MMDevice) API 該API用于枚舉系統(tǒng)中的音頻終端設(shè)備(Audio Endpoint Devices)。告訴音頻客戶端程序有哪些音頻終端設(shè)備以及它們的性能,并且為這些設(shè)備創(chuàng)建驅(qū)動(dòng)實(shí)例(driver instances)。是最基本的Core Audio API,為其他三個(gè)API提供服務(wù)。
主要接口:
IMMDeviceEnumerator 用來(lái)列舉音頻終端設(shè)備。
IMMDevice 代表一個(gè)音頻設(shè)備(audio device)。
IMMEndpoint 代表一個(gè)音頻終端設(shè)備(audio endpoint device),只有一個(gè)方法GetDataFlow,用來(lái)識(shí)別一個(gè)音頻終端設(shè)備是一個(gè)輸出設(shè)備(rendering device)還是一個(gè)輸入設(shè)備(capture device)。
IMMDeviceCollection 代表一個(gè)音頻終端設(shè)備的集合
2. EndpointVolume API 使客戶端程序能夠操作音頻終端設(shè)備。
主要接口:
IAudioEndpointVolume 用于控制音頻終端設(shè)備的音量、靜音。
3. Windows Audio Session API (WASAPI) 使客戶端程序能夠管理介于程序和音頻終端設(shè)備之間的音頻數(shù)據(jù)。
如應(yīng)用程序本身的音量。
主要接口:
ISimpleAudioVolume 代表控制來(lái)往音頻終端設(shè)備的音頻流的音量。
4. DeviceTopology API 客戶端程序使用這個(gè)API可直接沿著音頻適配器(audio adapters)的硬件設(shè)備里的數(shù)據(jù)通道進(jìn)入布局特征。是最底層的音頻API,可以通過(guò)適配器設(shè)備(adapter devices)的布局來(lái)查看和管理設(shè)備中的音頻控制。下圖為DeviceTopology API的作用范圍

音頻適配器設(shè)備(audio adapter device)內(nèi)部是由很多Part組成。主要包括亞單位(Subunit)和連接頭(Connector)。亞單位主要分為:音量控制(Vol)、靜音控制(Mute)、多路器(MUX)等。連接頭(Con)是一個(gè)連接的兩端。
Core Audio APIs的使用:
<1> 音頻終端設(shè)備(Audio Endpoint Device)音量、靜音控制
比如控制“聲音”對(duì)話框下“播放”選項(xiàng)卡中的“揚(yáng)聲器”等,“錄制”選項(xiàng)卡中的“麥克風(fēng)”、“立體聲混音”等。

步驟:
1. 得到IMMDeviceEnumerator接口。
2. 遍歷音頻終端設(shè)備得到IMMDeviceCollection接口。
3. 根據(jù)IMMDeviceCollection得到每個(gè)設(shè)備的IPropertyStore接口,從而分辨并搜索到指定的設(shè)備IMMDevice接口。
4. 用IMMDevice接口激活音量、靜音控制接口IAudioEndpointVolume。
<2> 音頻適配器設(shè)備亞單位(Subunit)的音量、靜音控制
比如控制“聲音”對(duì)話框下“播放”選項(xiàng)卡中的“揚(yáng)聲器”下的“CD 音頻”、“麥克風(fēng)”、“Fornt Pink In”等的控制。

步驟:
1. 得到IMMDeviceEnumerator接口。
2. 遍歷音頻終端設(shè)備得到IMMDeviceCollection接口。
3. 根據(jù)IMMDeviceCollection得到每個(gè)設(shè)備的IPropertyStore接口,從而分辨并搜索到指定的設(shè)備IMMDevice接口。
4. 根據(jù)IMMDevice接口和連接器接口IConnector得到音頻終端設(shè)備所對(duì)應(yīng)的設(shè)備適配器(adapter device)的布局接口IDeviceTopology。
5. 根據(jù)IDeviceTopology接口得到指定的部分(Part)。
6. 最后用得到的部分(Part)接口IPart激活音量控制接口IAudioVolumeLevel和靜音控制接口IAudioMute。
<3> 會(huì)話(Session)音量、靜音控制
比如“音量合成器”中應(yīng)用程序的音量。

步驟:
1. 得到IMMDeviceEnumerator接口。
2. 根據(jù)IMMDeviceEnumerator得到默認(rèn)設(shè)備的IMMDevice接口。
3. 得到音頻會(huì)話接口IAudioSessionManager。
4. 由IAudioSessionManager接口得到IAudioSessionControl接口,該接口用來(lái)設(shè)置會(huì)話(Session)參數(shù)。
5. 設(shè)置好了參數(shù)之后,在由IAudioSessionManager接口得到音頻會(huì)話的音量、靜音控制接口ISimpleAudioVolume,從而可以控制程序的音量、靜音。
轉(zhuǎn)自:http://kanglovepei.spaces./blog/cns!861E0583566CFC59!266.entry