Mini-XR: OpenALの拡張で何とかできないか問題
XRオーディオはマジで大量の選択肢がある。これを何とか単一のAPIにwrapし、切り替えて運用したい。
OpenGLというかWebGLに比べるとAPI自体は多いものの実装自体は現実的な手間でできる気はする。が、エフェクト類が伝統的な単純なオーディオエンジン(OpenAL)、オーディオデザイン環境(WWise、CRI)とXRオーディオ環境(Apple PHASE、Oculus Audio)で激烈に互換性が無い。
数値型 vs. テンプレート型
OpenALというかCreativeのEAX Reverbが最もアイデアとしては古くから有る気がする。これは部屋の広さや材質に合わせて数値でパラメタを設定する。これはDirectXというかXAudio2の伝統的なリバーブであるI3DL2リバーブでも同様となる。
-
https://openal-soft.org/misc-downloads/Effects Extension Guide.pdf
- OpenALのデザインガイド
-
https://github.com/kcat/openal-soft/blob/a55c4b1e0d0eb295074e674cb3509f8254a63015/include/AL/efx-presets.h
- EAX Reverbのプリセット
-
https://github.com/FNA-XNA/FAudio/blob/16f86bffec36b6e82e5c93d5f04ebc4ee4f980ab/include/FAudioFX.h#L202-L261
- FAudio(XAudio2互換実装)のI3DL2リバーブプリセット
I3DL2リバーブとEAX Reverbを相互変換できるか。。?残響時間とかを揃えれば行ける気はする。。
Apple PHASEはテンプレート型で、非常に限られた材質リストからどれかを選び、そのメッシュをエンジンにアップロードする必要がある。Oculus Audio SDKはより幅広い材質を提供しているが、これは部屋の材質表現にしか使えない(遮蔽を表現しない)。
-
https://developer.apple.com/documentation/phase/phasematerialpreset?language=objc
- Brick、Cardboard、Concrete、Drywall、GlassとWood
-
https://developer.oculus.com/reference/audio/v47/o_v_r_audio_8h
- 各種テンプレート
MSのProject Acoustics https://learn.microsoft.com/ja-jp/gaming/acoustics/what-is-acoustics はボクセルベースの事前シミュレーションで、選択的なマテリアル https://learn.microsoft.com/ja-jp/gaming/acoustics/unity-baking-materials と "Outdoorness" を使って空間を表現できる。事前シミュレーションの結果は数値型フィルタとリバーブに変換される。
GoogleのResonance Audioもオプショナルな事前ベイクがあり https://resonance-audio.github.io/resonance-audio/develop/unity/developer-guide 、マテリアルのテンプレートとメッシュを元に数値型フィルタを生成できる。
FIXME: Steam Audio https://github.com/ValveSoftware/steam-audio
Ambisonics
... 実はサポートしていないのはXAudio2くらいになった。。? Ambisonicsをサポートしたツールは https://github.com/leomccormack/Spatial_Audio_Framework のように充実しているので、こちらで吸収しても良い気がする。
距離モデリング、パススルー
例えばUIオーディオはHRTF自体もパススルーしたい(高音が減るとUIオーディオ的な意味が無くなるので)。しかし、エンジンがHRTFをパススルーする簡単な方法を提供しているとは限らない。
距離モデリングはエンジンによって有ったり無かったりする。例えばWindows Sonicのような単純なオブジェクトオーディオインターフェースは自前でgainを調整する必要がある。OpenALを始め、大抵のインタラクティブオーディオエンジンは減衰やフィルタをサポートしていることがある。
BGM、配信許可フラグ
... オーディオシステム自体を分けさせる実装が一般的なようだ。まぁXRオーディオではその辺の配慮があまり必要ないのかもしれない。
dsoalはそもそも変換を諦めていた
なんてこった
つまり、そもそもEFX extensionの大手ユーザは既に存在しない。。?