サウンドについて

新作では3Dサウンドエフェクト使いたいですよね!
という事で、脱DirectSound計画。
選択肢とその特徴を箇条書きしてみる。


【DirectSound】
旧時代のDirectX関連のサウンド制御クラス。
・レイテンシ
小さい


・コーディング
サンプルがweb上にいっぱいあるので簡単


・制限事項
Vista 以降のOSでオーディオのアーキテクチャが書き換えられたので、
オーディオドライバを直接叩く事ができない = DirectSound3D を使用できなくなった


・メリット
前作のコードを有効活用できる
レイテンシが小さい
処理をHALに任せるので、CPU負荷が小さい


・個人的意見
レイテンシの小ささと過去リソースの流用は魅力だけど、
今後のこと考えるとさよならしといた方が賢い。




【XAudio2】
新時代のDirectX関連のサウンド制御クラス。DirectSound と DirectSound3D を統合して、HAL使えないようにした感じ?
・レイテンシ
極大(数フレーム以上遅延する)


・コーディング
web上にサンプルはあまりないが、ストリーミング再生にデフォルトで
対応している(コールバック関数登録するだけなので楽ちん)ので易しめ


・デメリット
CPUにサウンドミキシングなどの処理を行わせるので、負荷とレイテンシがかなり大きい


・メリット
Vista以降のOSでも3Dエフェクトに対応可能
360でゲームを出す時に流用できるがそんなシチュエーションはありえない
XNAならありえるかもしれないけど、その場合はXACTなので意味なし
xWMA再生可能


・個人的意見
エフェクトをかけているサンプルがwebにほとんど落ちていないので難易度がよくわからないのが怖い。
が、きっとそこはお手軽にできるようにしてあるだろうから(じゃないと意味ないし)問題ない、と信じたい。


・その他どうでも良い情報
360にもXAudioが利用されているが、あちらはそれ様のアーキテクチャやらCPU用処理割り当てやらを
してるので、レイテンシがそこまで大きくないとかいう噂を聞いた




【XACT3】
DirectX系オーディオのラッパライブラリ。
XAC の頃は 360=XAudio、PC=DirectSound で動作するものだったらしいが、
XAC3 はPCでも XAudio を呼び出して音を鳴らしてくれるらしい。
なので、特徴はほぼ XAudio と同じで、関数的な使い易さは向上。
ただし、リソースファイルを 360 形式にする必要がある。
サンプルはこれまたあんまりなさげ。



OpenAL
サウンドプログラム業界の一大勢力であるオープンソース
・レイテンシ
小さい


・コーディング
サンプルがweb上にいっぱいあるので簡単
3Dエフェクトも簡単に付けられる


・制限事項
ライセンスが LGPL な事。
LGPL についてうろ覚えだったので wiki からぺたり。

LGPLライセンスで配布されたライブラリAについて、
ライブラリAにリンクしたプログラムBを配布する場合、Bのライセンスにリバースエンジニアリングを禁止する条項を含めてはならない。(LGPLv2-6、LGPLv3-4)[1]
ライブラリAに静的リンクしたプログラムBを配布する場合、Bのソースコードまたはオブジェクトコードの配布を拒否してはならない。(LGPLv2-6a、LGPLv3-4d0)
ライブラリAを改変して作成されたライブラリA'を配布する場合、A'のライセンスはLGPLまたはGPLである必要がある。

static リンクする → コード開示迫られたら拒否できない = 超お手軽にセキュリティ乙 なので無理。
dll 使用する → リバースエンジニアリング禁止、と書けない = そこそこめんどくさいけどセキュリティ乙 だけど、現状そんな事は書いてないし、そこまでされるならいいや、なので問題なし?


・メリット
レイテンシが小さい
HAL が使えるのでサウンドドライバに処理任せられて軽い


・個人的意見
ライセンス以外は最強。




○まとめ
本音は OpenAL 使いたいけど、ライセンスがめんどくさいのでかなり迷い所。
XAudio + OpenMP が賢い選択なんだろうけど、工数おも……。




ちなみに、コーデックは ogg Vorbis 一択。BSDライセンスさいこう。
でも、ちょっと xWMA にも惹かれたり……。