CRI ADX  Last Updated: 2024-03-21 14:32 p
空間音響接続機能「3Dトランシーバー」

サンプルのディレクトリ

/cri/pc/samples/criatomex/control_3d_pos_transceiver

サンプルで使用しているデータ

/cri/common/smpdata/criatomex/
  • SampleProject.acf
  • AtomCueSheet.acb
  • AtomCueSheet.awb

サンプルの解説

空間音響接続機能「3Dトランシーバー」は従来の3Dポジショニングを拡張する機能です。
機能の具体的な説明は空間音響接続機能「3Dトランシーバー」 をご参照ください。
3Dポジショニングについてはサンプル:3Dポジショニング の解説をご参照ください。
トランシーバーを用いて空間音響表現を実現するには、以下の要素が必要です。

3Dトランシーバーハンドルのパラメーター設定はリスナーや音源同様に以下の関数を使います。

パラメーター設定後、実際にパラメーターを反映するにはい以下の関数を使います。

3Dリージョンはゲームの3D空間上での領域を表現します。リスナー、音源、 トランシーバーに設定を行う際は以下の関数を使います。
3Dトランシーバーを用いた3Dポジショニングを行うコードを以下に示します。
/* 変数宣言 */
CriAtomEx3dRegionHn region_a, region_b;
/* 各オブジェクトの作成 */
listener = criAtomEx3dListener_Create(NULL, NULL, 0);
source = criAtomEx3dSource_Create(NULL, NULL, 0);
transceiver = criAtomEx3dTransceiver_Create(NULL, NULL, 0);
region_a = criAtomEx3dRegion_Create(NULL, NULL, 0);
region_b = criAtomEx3dRegion_Create(NULL, NULL, 0);
/* EXプレーヤーに音源、リスナーを設定 */
player = criAtomExPlayer_Create(NULL, NULL, 0);
/* リージョンの設定 */
criAtomEx3dTransceiver_Set3dRegionHn(transceiver, region_b);
/* パラメーターの設定 */
pos.x = 0.0f;
pos.y = 0.0f;
pos.z = 0.0f;
:
:
/* 再生開始 */
id = criAtomExPlayer_Start(player);
:
pos.x += 10.0f;
:
/* リスナーのリージョン変更 */
CriAtomEx3dRegionObj * CriAtomEx3dRegionHn
3Dリージョンハンドル
Definition: cri_atom_ex.h:4682
CriAtomEx3dRegionHn criAtomEx3dRegion_Create(const CriAtomEx3dRegionConfig *config, void *work, CriSint32 work_size)
3Dリージョンハンドルの作成
void criAtomEx3dSource_Update(CriAtomEx3dSourceHn ex_3d_source)
3D音源の更新
CriAtomEx3dListenerObj * CriAtomEx3dListenerHn
3Dリスナーハンドル
Definition: cri_atom_ex.h:4656
void criAtomEx3dListener_Set3dRegionHn(CriAtomEx3dListenerHn ex_3d_listener, CriAtomEx3dRegionHn ex_3d_region)
3Dリスナーハンドルに対する3Dリージョンハンドルの設定
void criAtomEx3dSource_Set3dRegionHn(CriAtomEx3dSourceHn ex_3d_source, CriAtomEx3dRegionHn ex_3d_region)
3D音源ハンドルに対する3Dリージョンハンドルの設定
CriAtomEx3dListenerHn criAtomEx3dListener_Create(const CriAtomEx3dListenerConfig *config, void *work, CriSint32 work_size)
3Dリスナーハンドルの作成
void criAtomEx3dTransceiver_Update(CriAtomEx3dTransceiverHn ex_3d_transceiver)
3Dトランシーバーの更新
CriAtomEx3dTransceiverHn criAtomEx3dTransceiver_Create(const CriAtomEx3dTransceiverConfig *config, void *work, CriSint32 work_size)
3Dトランシーバーハンドルの作成
CriAtomEx3dSourceObj * CriAtomEx3dSourceHn
3D音源ハンドル
Definition: cri_atom_ex.h:4630
void criAtomEx3dListener_Update(CriAtomEx3dListenerHn ex_3d_listener)
3Dリスナーの更新
void criAtomEx3dSource_SetPosition(CriAtomEx3dSourceHn ex_3d_source, const CriAtomExVector *position)
3D音源の位置の設定
CriAtomEx3dSourceHn criAtomEx3dSource_Create(const CriAtomEx3dSourceConfig *config, void *work, CriSint32 work_size)
3D音源ハンドルの作成
void criAtomEx3dTransceiver_Set3dRegionHn(CriAtomEx3dTransceiverHn ex_3d_transceiver, CriAtomEx3dRegionHn ex_3d_region)
3Dトランシーバーハンドルに対する3Dリージョンハンドルの設定
CriAtomEx3dTransceiverObj * CriAtomEx3dTransceiverHn
3Dトランシーバーハンドル
Definition: cri_atom_ex.h:4710
CriAtomExPlaybackId criAtomExPlayer_Start(CriAtomExPlayerHn player)
再生の開始
CriAtomExPlayerHn criAtomExPlayer_Create(const CriAtomExPlayerConfig *config, void *work, CriSint32 work_size)
AtomExPlayerの作成
void criAtomExPlayer_Set3dSourceHn(CriAtomExPlayerHn player, CriAtomEx3dSourceHn source)
3D音源ハンドルの設定
void criAtomExPlayer_Set3dListenerHn(CriAtomExPlayerHn player, CriAtomEx3dListenerHn listener)
3Dリスナーハンドルの設定
3次元ベクトル構造体
Definition: cri_atom_ex.h:4538
CriFloat32 z
Definition: cri_atom_ex.h:4541
CriFloat32 y
Definition: cri_atom_ex.h:4540
CriFloat32 x
Definition: cri_atom_ex.h:4539
サンプルプログラム:シーン1
サンプルプログラム:シーン1は、部屋のような別の空間の中の音が、 開口部から漏れ出してくるようなデザインを想定しています。
図で3Dトランシーバーと示している場所には2つのトランシーバーが入力位置と出力位置を同一座標にして設定されており、 屋外と屋内のリージョンに所属している音源をそれぞれまとめて出力します。
これは3Dリージョン一つにつき3Dトランシーバーが一つ必要であるという仕様によるものです。 これにより2つの空間の接続部には3Dトランシーバーが2つ必要になります。
本サンプルではリスナーの座標を監視し、3Dリスナーが屋外にいるか、 屋内にいるかを判定し、適切なリージョンを3Dリスナーにセットしています。
3Dトランシーバーの動作の基準は、3Dリージョンですので、 ゲームプログラムでは3Dリージョンの設定を適切に行ってください。
/* リスナーのリージョン切替 */
/* Switch region of listener */
if (0.0f < listener->transform.pos.z) {
listener->region_index = 0;
} else {
listener->region_index = 1;
}
criAtomEx3dListener_Set3dRegionHn(listener->hn, s_app_obj->regions[listener->region_index]);


本サンプルでは3Dトランシーバー周辺でクロスフェードを行っています。 クロスフェードの動作については空間音響接続機能「3Dトランシーバー」 のページをご参照ください。
関連API
サンプルプログラム:シーン2
サンプルプログラム:シーン2は、別の空間の中の音が、 トランシーバーによって別の空間に出力されるようなデザインを想定しています。
3Dトランシーバーは1つで、屋内にいるリスナーに対して屋外の音を3Dトランシーバーが伝えます。
3D音源から3Dトランシーバーまでの間でも3Dポジショニングの計算が行われているので、 ヘリの音源が遠ざかるにつれトランシーバー出力から出る音も小さくなることが確認できます。