Stream Management
システムに オーディオ エンドポイント デバイスを列挙し、適切なレンダリングまたはキャプチャ デバイスを識別した後、オーディオ クライアント アプリケーションの次のタスクは、エンドポイント デバイスとの接続を開き、その接続経由のオーディオ データのフローを管理することです。 WASAPI を すると、クライアントはオーディオ ストリームを作成および管理できます。
WASAPI には、オーディオ クライアントにストリーム管理サービスを提供するための複数のインターフェイスが実装されています。 プライマリ インターフェイスは IAudioClientです。 クライアントは、エンドポイント オブジェクトの IMMDevice::Activate メソッド (パラメーター iidREFIID IID_IAudioClient に設定) を呼び出すことによって、オーディオ エンドポイント デバイスの IAudioClient インターフェイスを取得します。
クライアントは、IAudioClient インターフェイス内のメソッドを呼び出して、次の操作を行います。
- エンドポイント デバイスでサポートされているオーディオ形式を検出します。
- エンドポイント バッファー サイズを取得します。
- ストリームの形式と待機時間を取得します。
- エンドポイント デバイスを通過するストリームを開始、停止、リセットします。
- 追加のオーディオ サービスにアクセスします。
ストリームを作成するために、クライアントは IAudioClient::Initialize メソッドを呼び出します。 このメソッドを使用して、クライアントはストリームのデータ形式、エンドポイント バッファーのサイズ、およびストリームが共有モードまたは排他モードで動作するかどうかを指定します。
IAudioClient インターフェイスの残りのメソッドは、次の 2 つのグループに分類されます。
- IAudioClient::Initializeによってストリームが開かれた後にのみ呼び出すことができるメソッド。
- Initialize 呼び出しの前後にいつでも呼び出すことができるメソッド。
次のメソッドは、IAudioClient::Initializeを呼び出した後にのみ呼び出すことができます。
- IAudioClient::GetBufferSize
- IAudioClient::GetCurrentPadding
- IAudioClient::GetService
- IAudioClient::GetStreamLatency
- IAudioClient::Reset
- IAudioClient::Start
- IAudioClient::Stop
次のメソッドは、IAudioClient::Initialize 呼び出しの前または後に呼び出すことができます。
追加のオーディオ クライアント サービスにアクセスするために、クライアントは IAudioClient::GetService メソッドを呼び出します。 このメソッドを使用して、クライアントは次のインターフェイスへの参照を取得できます。
IAudioRenderClientの
レンダリング データをオーディオ レンダリング エンドポイント バッファーに書き込みます。
IAudioCaptureClientの
オーディオ キャプチャ エンドポイント バッファーからキャプチャされたデータを読み取ります。
IAudioSessionControlの
オーディオ セッション マネージャーと通信して、ストリームに関連付けられているオーディオ セッションを構成および管理します。
ISimpleAudioVolumeの
ストリームに関連付けられているオーディオ セッションのボリューム レベルを制御します。
IChannelAudioVolumeの
ストリームに関連付けられているオーディオ セッション内の個々のチャネルのボリューム レベルを制御します。
IAudioClockの
ストリーム データ レートとストリーム位置を監視します。
さらに、セッション関連のイベントの通知を必要とする WASAPI クライアントでは、次のインターフェイスを実装する必要があります。
IAudioSessionEventsの
イベント通知を受信するために、クライアントは、IAudioSessionControl::RegisterAudioSessionNotification メソッドに、IAudioSessionEvents インターフェイスへのポインターを呼び出しパラメーターとして渡します。
最後に、クライアントは上位レベルの API を使用してオーディオ ストリームを作成しますが、ストリームを含むセッションのセッション コントロールとボリューム コントロールにもアクセスする必要があります。 通常、上位レベルの API では、このアクセスは提供されません。 クライアントは、IAudioSessionManager インターフェイスを使用して、特定のセッションのコントロールを取得できます。 このインターフェイスを使用すると、クライアントは、IAudioSessionControl を取得し、セッションの ISimpleAudioVolumeインターフェイスをできます。クライアントは、IAudioClient インターフェイスを使用してストリームを作成し、セッションにストリームを割り当てる必要はありません。 クライアントは、エンドポイント オブジェクトの IMMDevice::Activate メソッド (パラメーター iidREFIID IID_IAudioSessionManager に設定) を呼び出すことによって、オーディオ エンドポイント デバイスの IAudioSessionManager インターフェイスを取得します。
IAudioSessionControl、IAudioSessionEvents、および IAudioSessionManager インターフェイスは、ヘッダー ファイル Audiopolicy.h で定義されます。 他のすべての WASAPI インターフェイスは、ヘッダー ファイル Audioclient.h で定義されます。
次のセクションでは、WASAPI を使用してオーディオ ストリームを管理する方法について説明します。
- WASAPI について
- ストリーム のレンダリングの
- ストリーム のキャプチャを する
- ループバック記録
- Exclusive-Mode ストリーム
- Invalid-Device エラー からの回復の
- 通信デバイス を使用する
- ストリーム ルーティング
関連トピック