訓練
關於 WASAPI
Windows 音訊會話 API (WASAPI) 可讓用戶端應用程式管理應用程式與 音訊端點裝置之間的音訊數據流程。
頭檔 Audioclient.h 和 Audiopolicy.h 會定義 WASAPI 介面。
每個音訊數據流都是音訊會話的成員。 透過工作階段抽象概念,WASAPI 用戶端可以將音訊數據流識別為相關音訊數據流群組的成員。 系統可以將會話中的所有數據流當做單一單位來管理。
音訊引擎是使用者模式音訊元件, 應用程式會透過該元件 共用對音訊端點裝置的存取權。 音訊引擎會在端點緩衝區與端點裝置之間傳輸音訊數據。 若要透過轉譯端點裝置播放音訊串流,應用程式會定期將音訊數據寫入轉譯端點緩衝區。 音訊引擎會混合來自各種應用程式的串流。 若要從擷取端點裝置錄製音訊數據流,應用程式會定期從擷取端點緩衝區讀取音訊數據。
WASAPI 是由數個介面所組成。 其中第一個是 IAudioClient 介面。 若要存取 WASAPI 介面,用戶端會先呼叫 IMMDevice::Activate 方法,並將參數 iid 設為 REFIID IID_IAudioClient,以取得音訊端點裝置 IAudioClient 介面的參考。 用戶端會 呼叫 IAudioClient::Initialize 方法來初始化端點裝置上的數據流。 初始化數據流之後,用戶端可以藉由呼叫 IAudioClient::GetService 方法來取得其他 WASAPI 介面的參考。
如果用戶端應用程式所使用的音訊端點裝置無效,WASAPI 中的許多方法都會傳回錯誤碼AUDCLNT_E_DEVICE_INVALIDATED。 應用程式通常會從此錯誤中復原。 如需詳細資訊,請參閱 從無效裝置錯誤復原。
WASAPI 會實作下列介面。
介面 | 描述 |
---|---|
IAudioCaptureClient | 可讓用戶端從擷取端點緩衝區讀取輸入數據。 |
IAudioClient | 可讓用戶端在音訊應用程式與音訊引擎或音訊端點裝置的硬體緩衝區之間建立和初始化音訊數據流。 |
IAudioClock | 可讓客戶端監視數據流的數據速率和數據流中目前的位置。 |
IAudioRenderClient | 可讓客戶端將輸出數據寫入轉譯端點緩衝區。 |
IAudioSessionControl | 可讓客戶端設定音訊會話的控制參數,以及監視會話中的事件。 |
IAudioSessionManager | 可讓用戶端存取跨進程和進程特定音訊會話的會話控件和音量控件。 |
IAudioStreamVolume | 可讓用戶端控制及監視音訊數據流中所有通道的音量層級。 |
IChannelAudioVolume | 可讓用戶端控制數據流所屬音訊會話中所有通道的音量層級。 |
ISimpleAudioVolume | 可讓用戶端控制音訊會話的主要音量層級。 |
需要會話相關事件通知的 WASAPI 用戶端應該實作下列介面。
介面 | 描述 |
---|---|
IAudioSessionEvents | 提供會話相關事件的通知,例如磁碟區層級、顯示名稱和會話狀態的變更。 |