ゲームなどのBGMでWAVファイルを使用する場合、数十Mバイトのバッファを用意するのは現実的ではないので、数秒程度のバッファを使って少しずつ再生していきます。まずはイベント通知型ではなく、ポーリング型で実装してみたいと思います。 解説 SubmitSourceBuffer()によって内部の再生キューにバッファが追加されます。 再生中、常にバッファの再生キューの状態を監視して、2つ以上のバッファが追加されている状態にします。 再生キューの先頭にあるバッファの再生が終わったら、空になったバッファに新しいデータを書き込んで、再生キューに追加します。 以降、同様に再生中のバッファと再生待ちのバッファが存在する状態を保ちつつ、先頭のバッファの再生が終わったら新しいデータを書き込んで、再生キューに追加します。書き込みカーソル(write)がWAVEデータの終端に達したら再生終了です。 実装 実装方法は
![XAudio2を使ってみる。その4-ストリーミング再生- - while( c++ );](https://cdn-ak-scissors.b.st-hatena.com/image/square/b96f96c3d2e9675bafad78b9b24e98359c256e6f/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fs%2Fsetuna-kanata%2F20091224%2F20091224020126.png)