一応できたが、ストリーミング再生はやはりスレッドが必要だったのでこの辺の細々とした面倒な処理がまだ。
どっちも断片的な情報ばかりでまとまったのが少ねえ...
Vorbisのデコード周りは断片でも単体でそれっぽい動きが確認できるのだが、ストリーミングはDirectSoundの初期化、プライマリバッファの作り方、waveformatexの作り方、セカンダリバッファの作り方、Notifyの扱い方、スレッドの作法、別スレッドでNotifyイベントの通知を受けてその処理の仕方なんぞが必要になってくるが、流石にDirectSoundとスレッドまで絡めて全部の説明は善意で書いてくださってる人でもめんどくさかろう。サウンドに限ったことではないので仕方ない。
なにより昔SDKにあったらしいStreamingDataサンプルとやらが既に無くなっていたのでオフィシャルなストリーミングが分からないというのが痛かった。代わりに用意されたDXUTでもストリーミング再生はあるのだが、用意されてるだけでサンプルで使われてない部分だし、酷いソースなので中を追いかけたくもない代物だし。
割と見かけた他のプレイヤーと同時再生した場合にnotifyイベントが混ざって音が飛ぶ現象は、結局ローカルメモリにつくれば解決っぽい?そういうフラグをとりあえず立ててみてるが、今のところ音飛びは起こってない。サウンドドライバが駄目な所為らしく、憶測と忌まわしい過去からの邪推になるがサウンドは最大手のカニとかC社とかあれだけのシェアでも糞みたいなドライバしか出してねえからハードは信用するなということですかね。
これでも問題が出るようなら整合性の対策とらないと駄目か。
で、ストリーミング再生を作って思ったのは、誰が書いても大体同じようなコードになるだろうなあと。DirectSoundでサポートしてくれりゃ無駄コードも変な問題もこっちで抱えなくて済むのだが、DirectSoundすら切り捨てられる御時世。まあでもめんどくせー言いながら書いて、きっちり動いたときの快感はプログラミングならではか。