WASAPI

Windows Audio Session API（ウィンドウズ・オーディオ・セッション・エーピーアイ）、通称 WASAPI（ワサピ）はアプリ-オーディオデバイス間のストリームを管理する低レベルWin32 APIである"The Windows Audio Session API (WASAPI) enables client applications to manage the flow of audio data between the application and an audio endpoint device." Windows Developer. About WASAPI.。Core Audio APIsの1つ。

概要
オーディオを扱うアプリケーションはマイク・スピーカー等の"オーディオエンドポイントデバイス"と連携して機能する。デバイスはOSによって管理されており、これらデバイスとアプリケーションを繋ぐオーディオストリームの管理がWASAPIの役割である。

例えばスピーカー出力を行うためにはWASAPIを用いて"エンドポイントバッファ"へ音声データを書きこめばよい"To play an audio stream through a rendering endpoint device, an application periodically writes audio data to a rendering endpoint buffer. The audio engine mixes the streams from the various applications." Windows Developer. About WASAPI.。APIコールを受けたOSはAudioEngineによるミキシング、デバイスドライバを介したスピーカー制御をおこない、実際にスピーカーから音声が出力される。

WASAPIは基本的にどのようなサウンドデバイスでも利用することができるが、使用するアプリケーションがWASAPIに対応している必要がある。

動作モード
排他モード（exclusive）
OS標準のミキサーや各種エフェクト（APO）処理を一切介さずにエンドポイントバッファ上のオーディオサンプルをアプリケーションが直接読み書きできる構造となっている。

共有モード
他のアプリケーションの出力と共にOS標準のミキサーや各種エフェクト（APO）を介して再生されるため、複数の音声再生・録音アプリケーションを同時に使用する場合に適している。

 利用 
WASAPIはWin32 APIすなわちOSに対するシステムコールである。Windows OSはAudioclient.hとAudiopolicy.h で定義されるWASAPIインターフェースを介してOSのオーディオストリーム管理を公開することで"Header files Audioclient.h and Audiopolicy.h define the WASAPI interfaces." About WASAPI. Windows App Development.、アプリケーションによる低レイテンシの音声入出力を可能にしている。アプリケーションはWASAPIを呼び出すことでI/Oストリームを利用できる。

WASAPIの利用ではまずストリームの準備を次のようにおこなう。

 クライアント初期化 - IAudioClient::Initialize
 サービス（read/write/etc）の選択 - IAudioClient::GetService
 ストリームの開始 - IAudioClient::Start

オーディオI/Oの場合、開始に引き続いて、必要に応じてパケット単位のread/writeを次のようにおこなう。

 read待ち/write済みバッファ長確認 - IAudioClient::GetCurrentPadding"the client can call the IAudioClient::GetCurrentPadding method to get the total amount of captured data that is available in the buffer." Capturing a Stream. Windows App Development."For a rendering buffer, the padding value that is reported by the IAudioClient::GetCurrentPadding method represents the amount of rendering data that is queued up to play in the buffer." Rendering a Stream. Windows App Development.
 パケットバッファ取得/ロック - IAudioCaptureClient::GetBuffer/IAudioRenderClient::GetBuffer
 read/write - 取得したアドレスへのread/write
 解放/送出 - IAudioCaptureClient::ReleaseBuffer/IAudioRenderClient::ReleaseBuffer

このように、WASAPIはクライアントとエンドポイントバッファ間のデータ転送を簡潔に記述できる。高レベルAPIと異なりバッファ取得を明示的に都度おこなうため、read/writeされるデータ量や転送頻度の調整を柔軟にプログラムできる。また初期化時の設定により排他モード/共有モード、バッファ全長、デバイス動作周期など、Windows OSが提供するストリーム管理の様々な側面を調整できる。

対応ソフトウェア
以下はWASAPI対応ソフトウェアの一例である。

DTMソフトウェア
Steinberg Cubase 5
Cakewalk SONAR8.5
波形編集ソフトウェア
 Audacity
メディアプレーヤー
Media Player Classic
foobar2000 （バージョン1.6から共有モードでの出力が既定。バージョン1.6.7からコンポーネントを必要とせず単体での排他モードでの出力に対応）
Music Center for PC
x-アプリ
AIMP
KbMedia Player
PowerDVD（PowerDVD 14シリーズ以降より対応）
MusicBee
XMPlay（WASAPI output plugin の追加が必要）
AudioGate

 歴史 
Core Audio APIの一部としてMicrosoft Windows Vistaにて導入されたのが初出。それ以降も機能が追加されている（例: IAudioClient3）。

 脚注 

 関連項目 
 Windows Multimedia Extensions（MME）
 DirectSound
 Sound Manager
 Core Audio (Windows)
 レイテンシ
 Virtual Studio Technology, VST
 ASIO

 外部リンク 
 MSDN
 About WASAPI (Windows)
 楽しいハック講座 (4) Windows7 オーディオアーキテクチャの概要

Category:コンピュータミュージック
Category:API
Category:音声処理