串流管理

列舉 系統中的音訊端點裝置 並識別適當的轉譯或擷取裝置之後,音訊用戶端應用程式的下一個工作是開啟與端點裝置的連線,並管理該連線的音訊數據流程。 WASAPI 可讓用戶端建立和管理音訊串流。

WASAPI 會實作數個介面,以提供串流管理服務給音訊用戶端。 主要介面為 IAudioClient 用戶端會在端點物件上呼叫 IMMDevice::Activate 方法(參數 iid 設為 REFIID IID_IAudioClient),以取得音訊端點裝置的 IAudioClient 介面。

用戶端會呼叫 IAudioClient 介面中的 方法,以執行下列動作:

  • 探索端點裝置支援的音訊格式。
  • 取得端點緩衝區大小。
  • 取得數據流格式和延遲。
  • 啟動、停止和重設流經端點裝置的數據流。
  • 存取其他音訊服務。

若要建立數據流,用戶端會 呼叫 IAudioClient::Initialize 方法。 透過此方法,用戶端會指定數據流的數據格式、端點緩衝區的大小,以及數據流是以共用或獨佔模式運作。

IAudioClient 介面中的其餘方法分為兩個群組:

  • 只有在 IAudioClient::Initialize 開啟數據流之後,才能呼叫的方法。
  • 可以在 Initialize 呼叫之前或之後隨時呼叫的方法。

只有在呼叫 IAudioClient::Initialize 之後,才能呼叫下列方法:

下列方法可以在 IAudioClient::Initialize 呼叫之前或之後呼叫:

若要存取其他音訊用戶端服務,用戶端會呼叫 IAudioClient::GetService 方法。 透過此方法,用戶端可以取得下列介面的參考:

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

最後,用戶端可能會使用較高層級的 API 來建立音訊數據流,但也需要存取包含數據流之會話的會話控件和音量控件。 較高層級的 API 通常不提供此存取。 用戶端可以透過 IAudioSessionManager 介面取得特定會話的控件。 此介面可讓用戶端取得會話的 IAudioSessionControl ISimpleAudioVolume 介面,而不需要用戶端使用 IAudioClient 介面來建立數據流,並將數據流指派給會話。 用戶端會在端點對象上呼叫 IMMDevice::Activate 方法(參數 iid 設為 REFIID IID_IAudioSessionManager),以取得音訊端點裝置的 IAudioSessionManager 介面。

標頭檔案 Audiopolicy.h 中定義了 IAudioSessionControlIAudioSessionEvents IAudioSessionManager 介面。 所有其他 WASAPI 介面都定義於頭檔 Audioclient.h 中。

下列各節說明如何使用 WASAPI 來管理音訊串流:

程式設計指南