CRI ADX  Last Updated: 2024-02-08 10:52 p
パンニング
Atomライブラリには、以下の3種類のパン設定方法が用意されています。

パン設定
パン設定 説明
パン3D 音源の方向(角度と距離)を指定する方法
3Dポジショニング リスナー情報と音源情報(位置)を指定する方法
センドレベル 原音を各スピーカーからどれだけのボリュームで出すか指定する方法

スピーカーの角度

サラウンドスピーカー

ADXにおける各スピーカーのデフォルト角度はITU-R BS.775-1に則り、以下のように設定されています。
スピーカーの角度設定
スピーカー設定 L R C LFE Ls Rs Lb Rb
5.1ch -30° 30° -120° 120° - -
7.1ch -30° 30° -110° 110° -150° 150°
なお、サラウンドスピーカーの角度は criAtomEx_SetSpeakerAngles 関数または criAtomEx_SetSpeakerAngleArray 関数を使用して変更することが可能です。

トップスピーカー

上方のスピーカー(トップスピーカー)の位置は以下のとおりです。
  • トップレフトスピーカーとトップライトスピーカーの間隔は、フロントレフトスピーカーとフロントライトスピーカーの間隔に準拠します。
  • トップフロントスピーカーの仰角は以下のとおりです。
    • トップスピーカーが4chの場合、トップフロントスピーカーの仰角は45°、トップバックスピーカーの仰角は135°です。
    • トップスピーカーが2chの場合、トップスピーカーの仰角は80°です。
例えば、7.1.4ch環境におけるトップ4chのスピーカーは、平面上では以下の位置に配置されます。
同環境を側面から見た場合の位置関係は以下のとおりです。

パン3D

パン3D方式でパンを操作する場合、以下のパラメーターを指定します。
  • 角度
  • インテリア距離
インテリア距離とは、スピーカの内側に音像を移動させるときに使用します。
  • 1.0で最外周になり1つまたは2つのスピーカーで再生されます。
  • 0.0になるとすべてのスピーカーから同じ音量で聞こえるようになり、リスナーと同じ位置に音像があることになります。
  • 0から1.0の間の値では、3つ以上のスピーカーから出力され、自然な音像の移動が実現できます。

3Dポジショニング

3Dポジショニング機能とは

3Dポジショニング機能とは、音源とリスナーに対して位置や速度などの座標情報を設定するだけで、 それらの座標の位置関係に応じた音響効果を得ることができる機能です。

位置関係による音量やパンニング等の音像に関するパラメーターはライブラリ側で自動的に計算されるため、 ゲームプログラム側は音源とリスナーに対して位置や向きなどの情報を入力するだけで、 3次元的な音響演出を行うことができます。

使用方法

以下のような値をゲームプログラム側から指定します。
■リスナー情報
  1. 座標(x, y, z)
  2. 移動速度(x, y, z)
  3. 前方への姿勢ベクトル(x, y, z)
  4. 上方への姿勢ベクトル(x, y, z)
■音源情報
  1. 位置(x, y, z)
  2. 速度(x, y, z)
  3. コーンの向き(x, y, z)
これらの値を指定すると以下の図のようになります。 この図では、以下の状況を想定するものとして値を設定します。
  1. リスナー(人)はz軸方向を向いてまっすぐ立っている。
  2. 犬は左方向を向いている。
  3. 鳥は右を向きながら飛行している。

各種設定値

基本的な設定値
設定項目 説明 関連API
リスナー位置 リスナーの空間上での位置を指定します。  criAtomEx3dListener_SetPosition
リスナー速度 リスナーの速度を指定します。 criAtomEx3dListener_SetVelocity
リスナー姿勢ベクトル リスナーの空間上での向きを設定します。  criAtomEx3dListener_SetOrientation
音源位置 音源の空間上での位置を指定します。  criAtomEx3dSource_SetPosition
音源速度 音源の速度を指定します。 criAtomEx3dSource_SetVelocity
音源姿勢ベクトル 音源のサウンドコーンの向きを設定します。 criAtomEx3dSource_SetOrientation
※音源サウンドコーン 音源のサウンドコーンを設定します。  criAtomEx3dSource_SetConeParameter
※音源ボリューム 音源のボリュームを指定します。  criAtomEx3dSource_SetVolume
※音源減衰距離  音源の距離減衰を設定します。 criAtomEx3dSource_SetMinMaxAttenuationDistance
※データ側にも設定可能な値です。ゲームプログラム側で指定すると、データ側の設定は上書き(無視)されます。

減衰

3Dポジショニング機能ではリスナーと音源の位置関係によって音量が減衰します。
減衰には距離によるものとサウンドコーンによるものがあります。
動作仕様については下記APIの解説をご参照ください。
距離: criAtomEx3dSource_SetMinMaxAttenuationDistance
サウンドコーン: criAtomEx3dSource_SetConeParameter

3Dポジショニング内の追加機能

ADXの3Dポジショニングではより多彩な空間音響表現を行うための機能が存在します。

AISACを使用した独自の減衰デザイン

以下のパラメーターに応じてAISACコントロールを変化させることができます。
  • リスナーと音源の距離(距離減衰AISAC)
  • リスナーから見た音源の角度(リスナー基準方位角AISAC、リスナー基準仰俯角AISAC)
  • 音源から見たリスナーの角度(音源基準方位角AISAC、音源基準仰俯角AISAC)
デフォルトの距離減衰設定ではボリュームのみが変化しますが、AISACを使用することでボリューム以外のパラメーターを変化させることが可能となります。
AISACの詳細については「AISAC インタラクティブサウンド機能「AISAC」 」を参照してください。
[注意]
  • リスナー基準方位角AISACと音源基準方位角AISACでは、方位角を元にしたAISACコントロール値への変換ルールが異なります

発音数制御

3Dポジショニングに関する発音数制御は、大きく分けて2つ存在します。
  • 距離によるボイスプライオリティ減衰
  • カテゴリキュープライオリティにおける近距離プライオリティ
    ここでは「距離によるボイスプライオリティ減衰」についてのみ説明します。
    発音数制御および近距離プライオリティの詳細については、「 発音数制御 」を参照してください。
CriAtomEx3dSourceConfig::enable_voice_priority_decay を有効にし、 criAtomEx3dSource_Create 関数の引数に指定して実行すると、距離によるボイスプライオリティ減衰が有効になります。
最小減衰距離のときを0、最大減衰距離のときを-255とし、リスナーと当該音源の距離に応じてボイスプライオリティが線形に変化します。
[注意]
  • 本機能で算出されるボイスプライオリティは加算適用されます
    そのため、データ上やプレーヤの設定値と合算されます
  • ボイスプライオリティの変動は各キューないし音源の減衰距離設定に依存します
    リスナーと音源の距離のみで発音制御を行いたい場合は、カテゴリキュープライオリティにおける近距離プライオリティを使用してください

マルチポジショニング再生

複数の音源のパラメーターを考慮した「マルチポジショニング再生」が可能です。
複数の音源を管理する音源リストを単一のExプレーヤーに対して設定することで、 その音源リストに追加されている全ての音源のパラメーターが、定位や減衰等の計算に用いられます。
[準備]
使用の際には以下の点に注意してください。
  • 音源リストに追加可能な音源数に上限はありませんが、音源数と処理負荷は比例します。
  • Exプレーヤーに対して音源リストが設定されている状態で音源をExプレーヤーに対して設定すると、先に設定されていた音源リストはExプレーヤーからクリアされ、新たに設定した音源がEXプレーヤーに設定されます。
  • 既にExプレーヤーに設定されており、かつ音源リストに追加されている音源は、新たに別の音源リストに追加することは出来ません。
  • 距離のボイスプライオリティ減衰は、常にリスナーとの距離が最小である音源の設定値が適用されます。
  • ドップラーゲイン等によるピッチ変更は行われません。
関連API

位置のランダム化

3D音源の位置を再生時にランダムに決定することが可能です。
上記の図のように、元となる音源を中心として各種形状におさまるように一様分布します。
現在対応している形状は以下の通りです。
  • 矩形
  • 直方体
  • 円柱
  • 自由(コールバック)
  • リスト
位置のランダム化に関する設定は、ランタイムだけでなく、 CRI Atom Craft からも設定可能です。
CRI Atom Craft 上の設定方法については、「 3Dポジショニング 」の「3Dポジショニングの設定方法」を参照してください。
ランタイム上での設定について
CriAtomEx3dSourceRandomPositionConfig 構造体にて、位置のランダム化に関する設定を行い、 criAtomEx3dSource_SetRandomPositionConfig 関数にて3D音源に設定を適用します。
設定を解除する場合は、当該関数の第二引数に対して NULL を指定してください。
CriAtomEx3dSourceRandomPositionConfig 構造体では以下の設定が可能です。
基本的な形状を使用する場合、パラメーター配列に対して形状に関する設定値を格納する必要があります。
形状とパラメーターの組み合わせは以下の表を参照してください。
定義 形状(座標の算出方法) calculation_parameters[0] calculation_parameters[1] calculation_parameters[2]
CRIATOMEX3DSOURCE_RANDOM_POSITION_CALCULATION_TYPE_RECTANGLE 矩形 左右幅 前後幅 -
CRIATOMEX3DSOURCE_RANDOM_POSITION_CALCULATION_TYPE_CUBOID 直方体 左右幅 前後幅 上下幅
CRIATOMEX3DSOURCE_RANDOM_POSITION_CALCULATION_TYPE_CIRCLE 半径 - -
CRIATOMEX3DSOURCE_RANDOM_POSITION_CALCULATION_TYPE_CYLINDER 円柱 半径 上下幅 -
CRIATOMEX3DSOURCE_RANDOM_POSITION_CALCULATION_TYPE_SPHERE 半径 - -
[備考]
自由(コールバック)について
基本的な形状ではなく、ゲームエンジンなどの物理エンジンと連携して任意の形状内でランダム化を行いたい場合は、位置座標決定用のコールバック関数を使用することで対応可能です。
そのため、この設定を使用する場合はランタイム上で必ずコールバックを登録する必要があります。
以下の関数を使用することで、本コールバックの登録が可能です。
リストについて
事前に決めた座標をリストとして設定し、ランダム時に使用することが可能です。
そのため、この設定を使用する場合はランタイム上でリストに関する設定およびリストの登録する必要があります。
CRI ADX 内部では、リストの領域を確保します。
そのため、3D音源ハンドルを作成する際に以下のコンフィグに対して、確保するリストの最大要素数を設定してください。
また、以下の関数を使用することで、リストの登録が可能です。
ランダム化された座標の取得について
デバック目的などでランダム化された位置座標を取得したい場合は、位置座標決定・更新時にそのボイスの座標位置を返却するコールバック関数をご利用ください。
以下の関数を使用することで、本コールバックの登録が可能です。

リスナーのオートマッチング機能

複数のリスナーから自動的に最短の距離にあるリスナーを割り当てる機能です。
画面分割マルチプレイなどで近いプレイヤー側で3Dポジショニングの計算を行いたい場合などに利用できます。
[注意]
リスナーの選択を毎フレーム行うため、明示的にリスナーをセットする場合よりも負荷が上がります。
関連API

フォーカスポイント

「フォーカスポイント」 は、3Dポジショニング時にリスニングポイントを細かく制御するための機能です。
フォーカスポイントを使用することで、音源からリスナまでの「距離」と「方向」を分離して制御することが可能となります。

主な用途

フォーカスポイントは、カメラとキャラクタが独立した三人称視点のゲームで主に使用します。
3Dポジショニング機能を使用して三人称視点のゲームを作成する場合、リスナをどこに配置すべきか検討する必要があります。
カメラに配置した場合、距離に応じた音量の減衰が音源~カメラ間を基準に計算されるため、キャラクタが音源近くにいる場合でも、音量が小さくなってしまいます。
(ユーザがキャラクタと音源との距離感を把握し辛くなってしまいます。)
また、カメラが音源に近づいた際には、画面上に表示されていない音源の音量が大きく聞こえてしまう恐れもあります。
上記の問題を回避する選択肢として、キャラクタにリスナを配置する方法がありますが、この方法も万全ではありません。
キャラクタにリスナを配置した場合、キャラクタ~音源間の距離に応じて音量の減衰が決まるため、キャラクタと音源の位置関係に応じて音量が自然に減衰します。
しかし、音源の位置が下図のようにキャラクタとカメラの間にある場合、音源がキャラクタの背後に存在するため、音がリアスピーカーから鳴る形になります。
この場合、ゲームを操作するプレーヤーにとっては、音源は前方に見える(モニタに表示される)にもかかわらず音が後ろから聞こえる形になるため、映像と音声に矛盾を感じてしまいます。
以上の問題は、フォーカスポイントを使用することで解消可能です。
リスナに加えてフォーカスポイントを配置すると、音源の距離や方向を計算する起点をリスナ~フォーカスポイント間の任意の場所に設定することが可能となります。
例えば、キャラクタにフォーカスポイント、カメラにリスナをそれぞれ配置し、距離計算の起点をキャラクタ、角度計算の起点をカメラに設定すると、音量は音源~キャラクタ間の距離に応じて減衰し、音源の方向はカメラに対する角度で決定されることになります。

使用するAPI

フォーカスポイントの制御には、以下のAPIを使用します。
criAtomEx3dListener_SetFocusPoint 関数でフォーカスポイントを配置し、 criAtomEx3dListener_SetDistanceFocusLevel 関数と criAtomEx3dListener_SetDirectionFocusLevel 関数で距離と方向の起点を設定します。
備考:
距離・方向の起点となる位置は0.0f~1.0fの範囲で指定します。
0.0fがリスナ上、1.0fがフォーカスポイント上に該当します。
0.5f等を指定することで、リスナとフォーカスポイントの間の位置に起点を置くことも可能です。

空間音響接続機能「3Dトランシーバー」

3Dポジショニングの機能として空間音響接続機能「3Dトランシーバー」を提供しています。
本機能は3Dポジショニングの仮想空間上で音声をサブミックスし、一点から出力する機能です。
※サブミックスに関しては、実際に信号をミックスして処理しているわけではなく、ボリュームなどの パラメーターの演算によって処理を行っています。
 そのため、処理負荷は通常の3Dポジショニングと同様となります。
本機能では、上記の図のように壁に囲まれた空間に存在する3D音源をグループ化し、 壁の外の空間の3Dリスナーに音声をサブミックスして伝えます。
3Dトランシーバーを用いない3Dポジショニングでは、仮に音源がゲーム上で部屋の中にあった場合でも、 音像の向きは壁を無視します。
本機能を利用することで、閉じられた空間内に存在する音を開口部からまとめて出力することが可能になります。
逆に、リスナーが閉じられた空間に侵入した場合には外の世界の音を入り口に集約して出力することができます。
本機能は従来の3D音源と3Dリスナーに新たに、空間によるグループ化を行う要素である3Dリージョンを付与し、 3Dトランシーバーを設定することで利用することができます。
3D音源と3Dリスナーは与えられた3Dリージョンに基づいて自動的にグループ化されます。
グループ化された音源は別の3Dリージョンを持つ3Dリスナーに対して3Dトランシーバーから音声を出力します。
リスナーの3Dリージョンを切り替えた際、音像が急激に変化することを防ぐため、3Dトランシーバーにはクロスフェードをする機能があります。
3Dトランシーバーにはクロスフェード距離を指定でき、この範囲内ではリスナーからトランシーバーの入力位置までの距離に応じて、 トランシーバーの出力から聞こえる音と3D音源から聞こえる音がクロスフェードされます。
また、直接音領域では3D音源からの音のバランスが100になります。
よって、直接音領域内で3Dリスナーの3Dリージョンを切り替えることで、音像をシームレスに変化させることができます。
3D音源が3Dトランシーバーに近づいた場合も同様に、 クロスフェード領域の設定と音源とトランシーバーの入力位置の距離に応じて同様にクロスフェードが行われます。
この場合も、音源が直接音領域を通りすぎる際に3D音源の3Dリージョンを切り替えることで、 音像をシームレスに変化させることができます。
さらに、上記の図のように3Dトランシーバーは音声の入力位置と出力位置を別に設定することが可能です。 これにより、遠隔地の音声をまとめて一点から出力するマイクとスピーカーのような演出や、 複数のキャラクター間での無線通信などを再現することが可能です。

マルチチャンネルの音声について

3Dポジショニングはマルチチャンネルの音声についても音源として扱うことが可能です。
但し、本来のスピーカー構成を維持したままポジショニングされます。
例えば5.1chの音声の場合、L・R・C・LFE・Ls・Rsの構成および配置を維持し、音源をどこに移動させてもそれぞれのチャンネルから再生されます。
なお、センターおよびLFEは音源のパラメーター変化に関する一切の影響を受けません。
それに対し、その他のチャンネルは全ての影響を受け、音源位置を移動させた場合はリスナーとの関係によってそれぞれの出力されるチャンネルが変化します。

リスナが正面(前方ベクトル(0.0, 0.0, 1.0)・上方ベクトル(0.0, 1.0, 0.0))を向いているときの音源位置による出力先一覧(5.1chの場合)
リスナからみた音源位置 Lの出力先 Rの出力先 Lsの出力先 Rsの出力先
前方 L R Ls Rs
右方 R Rs L Ls
後方 Rs Ls R L
左方 Ls L Rs R

減衰距離の最小距離以下に音源を配置した場合、インテリア距離にしたがってパンされます。
インテリア距離についてはこちらを参照してください。
また、スピーカー角度はバーチャルスピーカー機能が有効になっている場合、その設定に依存します。
バーチャルスピーカーについてはこちらを参照してください。

センドレベル

センドレベル方式では、元波形のどのチャンネルどのスピーカーからどれだけの音量で出力するかを指定します。