WASAPI

Windows Audio Session API (WASAPI) について



Windows Audio Session API、通称WASAPIは、Windows OSにおけるオーディオ処理の中核を担うAPIです。アプリケーションとオーディオデバイス(マイクやスピーカーなど)間の音声データの流れを管理し、低レベルでの柔軟な制御を可能にします。Core Audio API群の一つとして提供され、オーディオ処理を行うアプリケーション開発において重要な役割を果たしています。

WASAPIの概要



オーディオアプリケーションは、音声の入力・出力を行うために、マイクやスピーカーといったオーディオエンドポイントデバイスと連携します。これらのデバイスはOSによって管理されており、WASAPIはこのデバイスとアプリケーションの間でオーディオストリームを管理する役割を担います。具体的には、アプリケーションがスピーカーから音声を出力する場合、WASAPIを通じて「エンドポイントバッファ」に音声データを書き込むことで、OSのAudioEngineがミキシングを行い、デバイスドライバを介してスピーカーから音声が出力されるという流れになります。

WASAPIは基本的にあらゆるサウンドデバイスで利用可能ですが、アプリケーション自体がWASAPIに対応している必要があります。

WASAPIの動作モード



WASAPIには、主に以下の2つの動作モードがあります。

1. 排他モード (Exclusive Mode)
このモードでは、OS標準のミキサーや各種エフェクト処理(APO)を一切介さず、アプリケーションが直接エンドポイントバッファ上のオーディオサンプルを読み書きできます。これにより、非常に低いレイテンシでのオーディオ処理が可能となり、リアルタイム性の高いアプリケーション(楽器演奏やゲームなど)に適しています。ただし、他のアプリケーションと同時に音声を出力することはできません。

2. 共有モード (Shared Mode)
共有モードでは、他のアプリケーションの出力とともに、OS標準のミキサーやエフェクト処理を介して音声が再生されます。そのため、複数のオーディオ再生・録音アプリケーションを同時に使用する場合に適しています。排他モードに比べてレイテンシは大きくなりますが、システム全体のオーディオ処理を円滑に行うことができます。

WASAPIの利用方法



WASAPIは、Win32 API、つまりOSに対するシステムコールとして提供されています。Windows OSは`Audioclient.h`と`Audiopolicy.h`で定義されるインターフェースを公開しており、アプリケーションはこのインターフェースを通してオーディオストリームを制御します。具体的な利用手順は以下の通りです。

1. クライアント初期化 (`IAudioClient::Initialize`):
オーディオストリームの利用を開始するために、クライアントを初期化します。
2. サービス選択 (`IAudioClient::GetService`):
必要なサービス(データの読み書きなど)を選択します。
3. ストリーム開始 (`IAudioClient::Start`):
オーディオストリームを開始します。
4. オーディオI/O:
オーディオデータの読み書きは、以下の手順で行います。
read待ち/write済みバッファ長確認 (`IAudioClient::GetCurrentPadding`)
パケットバッファ取得/ロック (`IAudioCaptureClient::GetBuffer`/`IAudioRenderClient::GetBuffer`)
read/write: 取得したアドレスへデータの読み書きを行います。
解放/送出 (`IAudioCaptureClient::ReleaseBuffer`/`IAudioRenderClient::ReleaseBuffer`)

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

WASAPI対応ソフトウェア



WASAPIは多くのオーディオ関連ソフトウェアで採用されています。以下はその一例です。

DTMソフトウェア
Steinberg Cubase 5
Cakewalk SONAR 8.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が必要)

WASAPIの歴史



WASAPIは、Core Audio APIの一部としてMicrosoft Windows Vistaで導入されました。その後も機能が追加され続けており、例えば`IAudioClient3`などの新しいインターフェースが提供されています。

まとめ



WASAPIは、Windowsにおけるオーディオ処理の基盤となるAPIであり、低レベルでの柔軟な制御と低レイテンシでのオーディオ処理を可能にします。排他モードと共有モードの選択や、バッファ設定の調整によって、アプリケーションのニーズに合わせたオーディオ処理を実現できます。

関連情報



関連項目
Windows Multimedia Extensions (MME)
DirectSound
Sound Manager
Core Audio (Windows)
レイテンシ
Virtual Studio Technology (VST)
ASIO
外部リンク
MSDN: About WASAPI (Windows)
楽しいハック講座 (4) Windows7 オーディオアーキテクチャの概要

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。