EndpointVolume API
EndpointVolume API 可讓特製化用戶端控制及監視音訊端點裝置的音量層級。 用戶端會取得音頻端點裝置的 IMMDevice 介面,並呼叫 IMMDevice::Activate 方法,以取得 EndpointVolume API 中介面的參考。
頭檔 Endpointvolume.h 會定義 EndpointVolume API 中的介面。
使用MMDevice API和 WASAPI 的音訊應用程式通常會使用 ISimpleAudioVolume 介面來控制每個會話的音量層級。 只有兩種類型的音訊應用程式需要使用 EndpointVolume API。 這些應用程式類型包括:
- 管理音訊端點裝置主要音量層級的應用程式,類似於 Windows 音量控制程式,Sndvol.exe。
- 需要對音訊端點裝置進行獨佔模式存取的專業音訊 (“pro audio”) 應用程式。
不當使用 EndpointVolume API 可能會干擾 Windows 音訊原則,並中斷使用者的系統音量設定。
如果音訊端點裝置實作硬體音量和靜音控件,EndpointVolume API 會使用這些控件來管理裝置音量。 否則,EndpointVolume API 會在軟體中以透明方式對客戶端實作控件。
如果裝置具有硬體磁碟區和靜音控制,則透過EndpointVolume API 對裝置的磁碟區和靜音設定所做的變更會影響共用模式和獨佔模式中的磁碟區層級。 如果裝置缺少硬體磁碟區和靜音控件,則透過 EndpointVolume API 對軟體磁碟區和靜音控件所做的變更會影響共用模式中的磁碟區層級,但不在獨佔模式中。 在獨佔模式中,用戶端和裝置會直接交換音訊數據,略過軟體控制件。
對於必須管理硬體磁碟區和靜音控件的應用程式,EndpointVolume API 提供兩個潛在優勢,優於 DeviceTopology API。
首先,一些音訊配接器裝置缺少硬體音量控制。 如果裝置缺少硬體磁碟區控制, EndpointVolume API 中的 IAudioEndpointVolume 介面會自動在該裝置的數據流上實作軟體磁碟區控件。 對於 EndpointVolume API 的用戶端,無論磁碟區控制是由裝置或在軟體中由 EndpointVolume API 介面實作在硬體中,結果都相同。
其次,即使配接器裝置確實實作硬體磁碟區控制,使用DeviceTopology API實作拓撲周遊演算法的應用程式可能無法找到它所要尋找的控件。 一般而言,這類應用程式的設計目的是周遊特定裝置或一組相關裝置的硬體拓撲。 如果應用程式嘗試周遊未特別針對或測試裝置的拓撲,應用程式可能會失敗。
只有必須存取磁碟區和靜音控制以外的硬體功能的特殊應用程式,才需要使用DeviceTopology API。 對於僅需要控制獨佔模式數據流音量層級的應用程式,EndpointVolume API 會比較簡單,而且能夠可靠地與更廣泛的音訊硬體裝置搭配運作。
如需使用 EndpointVolume API 中介面的程式代碼範例,請參閱下列主題:
若要查看使用 EndpointVolume API 的範例,請參閱 Windows SDK 中的 EndpointVolume 。
EndpointVolume API 會實作下列介面。
介面 | 描述 |
---|---|
IAudioEndpointVolume | 代表音訊端點裝置或從音訊端點裝置的音訊數據流上的音量控件。 |
IAudioMeterInformation | 表示音訊串流對音訊端點裝置或從音訊端點裝置的尖峰計量。 |
此外,需要音訊端點裝置中音量通知和靜音變更的 EndpointVolume API 用戶端應該實作下列介面。
介面 | 描述 |
---|---|
IAudioEndpointVolumeCallback | 當音訊端點裝置的音量層級或靜音狀態變更時,提供通知。 |
相關主題