WASAPI について

Windows Audio Session API (WASAPI) を使用すると、クライアント アプリケーションは、アプリケーションと オーディオ エンドポイント デバイスの間のオーディオ データのフローを管理できます。

ヘッダー ファイル Audioclient.h と Audiopolicy.h は、WASAPI インターフェイスを定義します。

すべてのオーディオ ストリームは、 オーディオ セッションのメンバーです。 セッションの抽象化により、WASAPI クライアントは、オーディオ ストリームを関連するオーディオ ストリームのグループのメンバーとして識別できます。 システムは、セッション内のすべてのストリームを 1 つのユニットとして管理できます。

オーディオ エンジンは、アプリケーションがオーディオ エンドポイント デバイスへのアクセスを共有する ユーザー モード のオーディオ コンポーネントです。 オーディオ エンジンは、エンドポイント バッファーとエンドポイント デバイスの間でオーディオ データを転送します。 レンダリング エンドポイント デバイスを介してオーディオ ストリームを再生するために、アプリケーションは定期的にオーディオ データをレンダリング エンドポイント バッファーに書き込みます。 オーディオ エンジンは、さまざまなアプリケーションからのストリームをミックスします。 キャプチャ エンドポイント デバイスからオーディオ ストリームを記録するために、アプリケーションはキャプチャ エンドポイント バッファーからオーディオ データを定期的に読み取ります。

WASAPI は、いくつかのインターフェイスで構成されます。 これらの 1 つ目は 、IAudioClient インターフェイスです。 WASAPI インターフェイスにアクセスするために、クライアントは最初に、パラメーター iidREFIID 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 ボリューム レベルの変更、表示名、セッション状態など、セッション関連のイベントの通知を提供します。

 

Stream Management

プログラミング リファレンス