共用方式為


關於 WASAPI

Windows 音訊會話 API (WASAPI) 可讓用戶端應用程式管理應用程式與 音訊端點裝置之間的音訊資料流

頭檔 Audioclient.h 和 Audiopolicy.h 會定義 WASAPI 介面。

每個音訊資料流都是音訊會話 的成員。 透過工作階段抽象概念,WASAPI 用戶端可以將音訊數據流識別為相關音訊數據流群組的成員。 系統可以將會話中的所有數據流當做單一單位來管理。

音訊引擎是 使用者模式音訊元件, 應用程式透過其中共用音訊端點裝置的存取權。 音訊引擎會在端點緩衝區與端點裝置之間傳輸音訊數據。 若要透過轉譯端點裝置播放音訊串流,應用程式會定期將音訊數據寫入轉譯端點緩衝區。 音訊引擎會混合來自各種應用程式的串流。 若要從擷取端點裝置錄製音訊數據流,應用程式會定期從擷取端點緩衝區讀取音訊數據。

WASAPI 是由數個介面所組成。 其中第一個是 IAudioClient 介面。 若要存取 WASAPI 介面,用戶端首先透過呼叫參數 iid 設定為 REFIID IID_IAudioClient 的 IMMDevice::Activate 方法,來取得音訊端點設備的 IAudioClient 介面的參考。 用戶端會呼叫 IAudioClient::Initialize 方法來初始化端點裝置上的數據流。 初始化數據流之後,用戶端可以呼叫 IAudioClient::GetService 方法來取得其他 WASAPI 介面的參考。

如果用戶端應用程式所使用的音訊端點裝置無效,WASAPI 中的許多方法都會傳回錯誤碼AUDCLNT_E_DEVICE_INVALIDATED。 應用程式通常會從此錯誤中復原。 如需更多資訊,請參閱 從 Invalid-Device 錯誤恢復

WASAPI 會實作下列介面。

介面 描述
IAudioCaptureClient 可讓用戶端從擷取端點緩衝區讀取輸入數據。
IAudioClient 可讓用戶端在音訊應用程式與音訊引擎或音訊端點裝置的硬體緩衝區之間建立和初始化音訊數據流。
IAudioClock 可讓客戶端監視數據流的數據速率和數據流中目前的位置。
IAudioRenderClient 可讓客戶端將輸出數據寫入轉譯端點緩衝區。
IAudioSessionControl 可讓客戶端設定音訊會話的控制參數,以及監視會話中的事件。
IAudioSessionManager 可讓用戶端存取跨進程和進程特定音訊會話的會話控件和音量控件。
IAudioStreamVolume 可讓用戶端控制及監視音訊數據流中所有通道的音量層級。
IChannelAudioVolume 可讓用戶端控制數據流所屬音訊會話中所有通道的音量層級。
ISimpleAudioVolume 可讓用戶端控制音訊會話的主要音量層級。

 

需要會話相關事件通知的 WASAPI 用戶端應該實作下列介面。

介面 描述
IAudioSessionEvents 提供有關會話相關事件的通知,例如音量級別、顯示名稱和會話狀態的變更。

 

串流管理

程式設計參考