投稿日 : 2015/10/26 3:13:28
WASAPIについて

WASAPIとは

WASAPIとはWikiにもありますがWindows Audio Session APIの略で、要はWindows Vista SP1から使える新しいサウンド用のAPIです。

これまでは主にWaveOutやDirectSoundといったAPIを使用してサウンドを再生していましたが、これらの古いAPIは再生コマンドを送ってから実際に再生されるまで若干のラグがあります。ゲーム用途で言えばこの程度のラグはあまり気にはなりませんが、DTM(PCで音楽制作)の分野ではMIDIとWAVを合成して録音するといったことを行うため、このラグのせいでタイミングが合わずうまく合成できないといった問題が起こります。

ちなみにラグのことを専門用語でレイテンシと言います。

Macは元からサウンドAPIが充実しているため、今までは音楽制作はMacというのが定説でしたが、Windowsで音楽ソフトの需要が高まったため、ソフトメーカーが独自にASIOというサウンドAPIを用意しました。しかし、これを利用するには対応したサウンドカードが必要だったりなど、OS標準で使えるAPIというわけではなくかなりハードルの高いものでした。

そこでMSもようやく需要があると理解したのか、VistaからOS標準の機能としてWASAPIが実装されました。これにより、どのようなサウンドカードでもラグの少ないサウンドの再生が可能になりました。

なお、実はWASAPIには排他モード共有モードの2種類があり、実際にラグが少なくなるのは排他モードの方です。排他モードとはサウンドデバイスを占有することで直接サウンドデータをダイレクトに送ることが出来ますが、共有モードはデバイスを占有せず、OS側で他のソフトの音もミキシングしてから出力するため、結果的にラグの多いDirectSoundと変わりません。このため、WASAPIは基本的に排他モードで使用するのが一般的だと思われます。

DirectSoundとWASAPIの違い

ここではDirectSoundとWASAPIの違いについて説明します。
DirectSoundを使ったことがあり、WASAPIへ移行を考えているのならばこの違いはかなり重要です。
根本的に考え方が異なるため、まったく別物と考えたほうが良いです。
項目 DirectSound WASAPI 補足
COM 暗黙的に使用 必須 DirectSoundではCOMは内部で使用はしていますが特に初期化などは必要ありません。WASAPIでは全てのAPIがそもそもCOMインターフェースで出来ているため、COMによるプログラミングをある程度理解している必要があります。
サウンドバッファ IDirectSoundBuffer8 自前管理 DirectSoundではサウンドバッファのインターフェースが用意されていますが、WASAPIは全て自分でバッファを管理する必要があります。
ミキシング プライマリバッファで
自動ミキシング
自前ミキシング DirectSoundではたくさんのサウンドバッファを用意し、それぞれ再生と停止を行うことで自動的にミキシングされて再生されますが、WASAPIではミキシング機能は存在せず、必要ならば自分でミキシング処理を実装する必要があります。
また、DirectSoundではバッファの周波数やビット数、チャンネル数が異なる場合でも気にせずミキシングが可能ですが、WASAPIではこれらを考慮しなけれなりません。
エフェクト IDirectSoundFXGargle8
IDirectSoundFXChorus8
IDirectSoundFXFlanger8
IDirectSoundFXEcho8
IDirectSoundFXDistortion8
IDirectSoundFXCompressor8
IDirectSoundFXParamEq8
IDirectSoundFXWavesReverb8
IDirectSoundFXI3DL2Reverb8
DMOを直接使用 DirectSoundではセカンダリバッファにエフェクトオブジェクトを設定することで、簡単にエフェクトをかけることが出来ますが、WASAPIでは機能としてのエフェクト処理は存在しないため、自前でDMOやフリーのライブラリなどを使用してエフェクトを行う必要があります。
コメントはまだ登録されていません。
コメントする
名前
コメント
※タグは使用出来ません
この記事に関連するタグ
WASAPI