WASAPI について

Windows オーディオ セッション 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 エラー コードを返します。 多くの場合、アプリケーションはこのエラーから回復できます。 詳細については、「無効なデバイス エラーからの回復」を参照してください。

WASAPI は次のインターフェイスを実装します。

Interface 説明
IAudioCaptureClient クライアントがキャプチャ エンドポイント バッファーから入力データを読み取れるようにします。
IAudioClient クライアントがオーディオ アプリケーションとオーディオ エンジンまたはオーディオ エンドポイント デバイスのハードウェア バッファーの間で、オーディオ ストリームを作成および初期化できるようにします。
IAudioClock クライアントがストリームのデータ レートとストリーム内の現在の位置を監視できるようにします。
IAudioRenderClient クライアントが出力データをレンダリング エンドポイント バッファーに書き込めるようにします。
IAudioSessionControl クライアントがオーディオ セッションのコントロール パラメーターを構成し、セッション内のイベントを監視できるようにします。
IAudioSessionManager クライアントがクロスプロセスおよびプロセス固有両方のオーディオ セッションのセッション コントロールとボリューム コントロールにアクセスできるようにします。
IAudioStreamVolume クライアントがオーディオ ストリーム内のすべてのチャネルのボリューム レベルを制御および監視できるようにします。
IChannelAudioVolume ストリームが属するオーディオ セッション内のすべてのチャネルのボリューム レベルをクライアントが制御できるようにします。
ISimpleAudioVolume クライアントがオーディオ セッションのマスター ボリューム レベルを制御できるようにします。

 

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

Interface 説明
IAudioSessionEvents ボリューム レベルの変更、表示名、セッション状態など、セッション関連のイベントの通知を生成します。

 

ストリームの管理

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