« ゲーム中のバックグラウンドでのマイニングを考える | メイン | 論理コア数32以上のCPUで動画再生時エラーが出る問題 »

2017年09月23日

吉里吉里Z 開発:: DirectSoundの廃止とWASAPIへの移行を検討

    

吉里吉里Zマルチ版ではある程度互換性が失われるので、ついでに DirectSound を切り捨てて、WASAPI に切り替えることを検討している。
Windows Vista 以降は DirectSound で直接再生は出来なくなっていて、WASAPI によるソフトウェアエミュレーションで再生されている。
WASAPI は、Windows Vista から使える。
互換性が失われると言っても、コマンドラインオプション周りで DirectSound 関係で設定している項目がなくなるのと、ドキュメント化されていない 3D オーディオ周りが消える、もしくは Windows10 以降用となるだけで、影響は少ない。

Android では、OpenSL ES での再生となっている。
OpenSL ES は、キュー方式での再生となっていて、 DirectSound のリングバッファ方式とは根本的な再生方法が異なる。
Windows でのキュー方式での再生では、XAudio2 が OpenSL ES と近い API 形態のため、まず XAudio2 での再生を実装した。
キュー方式での再生の基本構造を Windows 上で開発した方が開発効率が良いため、使うかどうかは考慮せず XAudio2 を選択した。
ただ、 XAudio2 はバージョン分岐がある。
XAudio2 は低レベルのクロスプラットフォーム オーディオ API と言いつつ、Widnows8/10 で API 体系が Windows7 以前の DirectX 付属の XAudio2 と異なっている。
しかも、この互換性をとるのはだいぶ厄介で、工夫を要する。
このような状況なので、XAudio2 の API 互換性には信頼が置けない。
WASAPI を直接叩くのが一番安心である。
XAudio2 実装は、開発効率とテストのために実装したものなので、捨ててしまう。
DirectSound を切り捨て、基本再生構造をキュー方式に一本化すれば、マルチプラットフォームでの不具合の検出も行いやすくなる。

Windows10 Creators Update 以降で使えるようになった立体音響の Windows Sonic も WASAPI を用いて再生されているようだ。
Windows Sonic は HoloLens 用に追加された立体音響ということなので、どの程度立体感をもって聞こえるのか試してみたい。
WASAPI に切り替えるついでに、実装に手間がかからなさそうなら Windows Sonic も入れてしまいたい。
ヘッドフォンでの立体音響は、ノベルゲームで効果を発揮する場面は少なからずあるように思う。
バイノーラル録音の音声コンテンツは同人でだいぶ流行っているように見える。
Windows10 Creators Update 以降限定ということになってしまうが、そこは諦める。
バイノーラル再生のライブラリを組み込むという手もあるが、それはまた将来の話としたい。


投稿者 Takenori : 2017年09月23日 10:43




comments powered by Disqus
Total : Today : Yesterday : なかのひと