WASAPI について
Windows オーディオ セッション API (WASAPI) を使用すると、クライアント アプリケーションは、アプリケーションとオーディオ エンドポイント デバイスの間のオーディオ データのフローを管理できます。
ヘッダー ファイル Audioclient.h および Audiopolicy.h は、WASAPI インターフェイスを定義します。
すべてのオーディオ ストリームは、オーディオ セッションのメンバーです。 セッションの抽象化により、WASAPI クライアントは、関連するオーディオ ストリームのグループのメンバーとして、オーディオ ストリームを識別することができます。 システムは、セッション内のすべてのストリームを 1 つのユニットとして管理できます。
オーディオ エンジンは、アプリケーションがオーディオ エンドポイント デバイスへのアクセスを共有するユーザー モードのオーディオ コンポーネントです。 オーディオ エンジンは、エンドポイント バッファーとエンドポイント デバイスの間でオーディオ データの転送を行います。 レンダリング エンドポイント デバイスを介してオーディオ ストリームを再生するために、アプリケーションは定期的にオーディオ データをレンダリング エンドポイント バッファーに書き込みます。 オーディオ エンジンは、さまざまなアプリケーションからのストリームをミックスします。 キャプチャ エンドポイント デバイスからオーディオ ストリームを録音するために、アプリケーションはキャプチャ エンドポイント バッファーからオーディオ データを定期的に読み取ります。
WASAPI は、複数のインターフェイスで構成されています。 その 1 つ目は、IAudioClient インターフェイスです。 WASAPI インターフェイスにアクセスするために、クライアントはまず、パラメーター iid が REFIID 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 | ボリューム レベルの変更、表示名、セッション状態など、セッション関連のイベントの通知を生成します。 |
関連トピック