スポンサーサイト

--年--月--日
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

XNA:XACT 効果音の3Dポジショニング

2008年10月29日
次は、効果音を3Dサウンドに対応させる作業です。
XACTで3Dポジショニングサウンドを実装するのに不可欠な要素が2つあります。
オーディオエミッター(以下エミッター)とオーディオリスナー(以下リスナー)です。
エミッターは、効果音が発生している位置をVector3値で指定します。
リスナーは、効果音を聴く位置であるVector3値(通常は自機やカメラの位置がそれにあたります)
この2つの関係を持って、リスナーより右側でエミッターが音を出したら、スピーカーの右側から音が聞こえるという感じです。
詳しくは、XNA2.0日本語ヘルプの「方法:基本的な3Dポジショニングエフェクトのキューへの適用」を参照してみてください。

で、私もそれを参照して、3Dオーディオを実装したのですが、一つ問題がります。
エミッターとリスナーの位置関係は、点と点で結ばれています。
エミッターはともかく、リスナーは「向き」が、「ワールド座標」に対して前方となっています。
エミッターとの向きを正確なものにするために、リスナーには向きを表すForwardベクトルとか、Backベクトルなど、向きに関する値をSet・Getできます。
Forwardのデフォルト値はたしか、(0,-0,1)だったと思います。ワールド座標を基準にした「前方」を意味しています。
自機であるタンクの正面は回転によって常に変化します。したがって、タンクの向いている方向をForwardとしてリスナーのプロパティにSetしてやらないと、期待した位置で音が鳴ってくれません。

一応、Forwardのベクトルをタンクの前方の向きで指定して、試しにプレイしていたのですが、音の位置が正確なのか、ちょっと自信がありません。
なので、「常にノイズ音を鳴らす」ようなオブジェクトをマップに1個置いて、その周りをうろうろしながら音のなり具合を聴けば良いと思い、次の作業は音発生器を作る事にしました。

皆さんも3Dサウンドを実装する際は「リスナーの向き」に十分注意してください。

スポンサーサイト
Comment

管理者のみに表示

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。