WASAPIを使った音声処理

ちょっとしたきっかけでWASAPIを理解する機会があったのでちょっと書いてみます。

WASAPIといえば、WindowsVistaから実装されたオーディオAPIですが、ハードウェア依存がなく結構使いやすくなっています。今回試したのは、入力デバイスから入力された音声データと、現在OSが再生している出力バッファ領域に容易にアクセスできるということです。

仕組みを簡単に言ってしまえば、OSが音声が再生するタイミングで、再生バッファサイズ(サンプリングレート、ビット長によって変わります)の値が0から実サイズになり、先頭アドレスがGetBufferで返されます。GetBufferには再生フラグが設定されており、再生バッファのデータ値がすべて0の時(無音時)にはサイレントフラグもセットされるようになっています。

データ型はごく一般的なPCMデータでWAVEファイルのデータと同じです。(ただオーディオドライバではサンプリングデータ長を16BItと24Bitの設定ができるのだが、データは常に16Bitになっているのが今だ疑問である。)

AudioSample

データの処理としては、再生も録音も同じ仕組みになっているようで、録音デバイスと再生デバイスの違いだけで処理は共通にすることができます。

WASAPIについては、WinRTでも使えるので覚えておいて損はないと思います。DirectX(Direct3D, Direct2D)とWASAPIで結構なものが作れますね。

Win32でDirect2DとWindows Animationは大体使ったので、WASAPIが制覇できればゲーム系のSDKが作れるなぁ。さてそろそろか。