次の方法で共有


Stream Management

システムに オーディオ エンドポイント デバイスを列挙し、適切なレンダリングまたはキャプチャ デバイスを識別した後、オーディオ クライアント アプリケーションの次のタスクは、エンドポイント デバイスとの接続を開き、その接続経由のオーディオ データのフローを管理することです。 WASAPI すると、クライアントはオーディオ ストリームを作成および管理できます。

WASAPI には、オーディオ クライアントにストリーム管理サービスを提供するための複数のインターフェイスが実装されています。 プライマリ インターフェイスは IAudioClientです。 クライアントは、エンドポイント オブジェクトの IMMDevice::Activate メソッド (パラメーター iidREFIID IID_IAudioClient に設定) を呼び出すことによって、オーディオ エンドポイント デバイスの IAudioClient インターフェイスを取得します。

クライアントは、IAudioClient インターフェイス内のメソッドを呼び出して、次の操作を行います。

  • エンドポイント デバイスでサポートされているオーディオ形式を検出します。
  • エンドポイント バッファー サイズを取得します。
  • ストリームの形式と待機時間を取得します。
  • エンドポイント デバイスを通過するストリームを開始、停止、リセットします。
  • 追加のオーディオ サービスにアクセスします。

ストリームを作成するために、クライアントは IAudioClient::Initialize メソッドを呼び出します。 このメソッドを使用して、クライアントはストリームのデータ形式、エンドポイント バッファーのサイズ、およびストリームが共有モードまたは排他モードで動作するかどうかを指定します。

IAudioClient インターフェイスの残りのメソッドは、次の 2 つのグループに分類されます。

  • IAudioClient::Initializeによってストリームが開かれた後にのみ呼び出すことができるメソッド。
  • Initialize 呼び出しの前後にいつでも呼び出すことができるメソッド。

次のメソッドは、IAudioClient::Initialize呼び出した後にのみ呼び出すことができます。

次のメソッドは、IAudioClient::Initialize 呼び出しの前または後に呼び出すことができます。

追加のオーディオ クライアント サービスにアクセスするために、クライアントは IAudioClient::GetService メソッドを呼び出します。 このメソッドを使用して、クライアントは次のインターフェイスへの参照を取得できます。

  • IAudioRenderClient

    レンダリング データをオーディオ レンダリング エンドポイント バッファーに書き込みます。

  • IAudioCaptureClient

    オーディオ キャプチャ エンドポイント バッファーからキャプチャされたデータを読み取ります。

  • IAudioSessionControl

    オーディオ セッション マネージャーと通信して、ストリームに関連付けられているオーディオ セッションを構成および管理します。

  • ISimpleAudioVolume

    ストリームに関連付けられているオーディオ セッションのボリューム レベルを制御します。

  • IChannelAudioVolume

    ストリームに関連付けられているオーディオ セッション内の個々のチャネルのボリューム レベルを制御します。

  • IAudioClock

    ストリーム データ レートとストリーム位置を監視します。

さらに、セッション関連のイベントの通知を必要とする WASAPI クライアントでは、次のインターフェイスを実装する必要があります。

最後に、クライアントは上位レベルの API を使用してオーディオ ストリームを作成しますが、ストリームを含むセッションのセッション コントロールとボリューム コントロールにもアクセスする必要があります。 通常、上位レベルの API では、このアクセスは提供されません。 クライアントは、IAudioSessionManager インターフェイスを使用して、特定のセッションのコントロールを取得できます。 このインターフェイスを使用すると、クライアントは、IAudioSessionControl を取得し、セッションの ISimpleAudioVolumeインターフェイスをできます。クライアントは、IAudioClient インターフェイスを使用してストリームを作成し、セッションにストリームを割り当てる必要はありません。 クライアントは、エンドポイント オブジェクトの IMMDevice::Activate メソッド (パラメーター iidREFIID IID_IAudioSessionManager に設定) を呼び出すことによって、オーディオ エンドポイント デバイスの IAudioSessionManager インターフェイスを取得します。

IAudioSessionControlIAudioSessionEvents、および IAudioSessionManager インターフェイスは、ヘッダー ファイル Audiopolicy.h で定義されます。 他のすべての WASAPI インターフェイスは、ヘッダー ファイル Audioclient.h で定義されます。

次のセクションでは、WASAPI を使用してオーディオ ストリームを管理する方法について説明します。

プログラミング ガイド