XAudio2 実装メモ2

ほんとにメモなので読み辛い&分かり辛い。でも読み手を意識した文体、と非情に中途半端です。


ストリーミング再生と言えばポイントとなるのがストリーム用のバッファのサイズ。
XAudio2 でのストリーミング再生は、サウンドデータバッファを SubmitSourceBuffer でキューイングしながら処理していくので、
・いくつキューを用意するか
・一個あたりのキューのサイズをどうするか
が結構大事になってくる。
や、適当なサイズでも問題なく再生可能なんだけど、処理負荷を余り重くしたくない(キューイング回数減らしたい)けどメモリもあまり使いたくない、
というトレードオフをどうするかってのが、PCのスペックに依存してくる為に中々にめんどくさい。
※家庭用やコンシューマはこの点非情に楽っぽ
最低限度の要求としては、最低限度のスペックのマシンでも音飛びしない(キューイングが再生に間に合わない場合に発生する)事なんだが、
低スペックPCが手元にないので試せない……PC負荷ソフトでも使って試験するのが一番なのかなぁ。
結局、色々試した結果、現状は 65536Byte(キュー一個=1024 * 16Byte、キューの個数=4個)で回している。
これなら音源50個でも 3Mちょい(3276800) とまぁ許容範囲な感じなので……。
※ゲームではパックファイルからoggファイルをメモリに読み込むので更にoggファイルサイズ分のメモリを食う事になってえらいこっちゃ
そんな訳で、この辺の目安を定量的に示している資料が欲しい今日この頃。


エフェクトに関してはこれから。
XAudio2CreateReverb を使えばリバーブだけはお手軽に実装可能らしいが、
XAudio2 の組み込みエフェクトはこれと XAudio2CreateVolumeMeter だけしかないもよう(あとは自力で色々頑張れ状態)。
えぇぇ、簡単にエフェクトできるんじゃなかったん?
と思ってよく読み直したら、X3DAudio と合わせて使ってね、との事だった。
肝心の実装内容はと言うと、X3DAudio で計算したボリュームとピッチを XAudio のボイスに突っ込む感じで、XAudio2 の実装同様これもお手軽感が漂っている。便利べんり。
ただ、どうせならこれ XAudio2 の組み込み関数として最初から一緒にしてくれても良いんじゃ……と思わないでもない。
過渡期とは言え、DirectSound、XACT(2,3)、XAudio(2)、XAPO、etc と色々あるのはユーザにとっては分かり辛いだけなので……。