CRI ADX  Last Updated: 2024-03-21 14:32 p
発音数制御

ADXで扱う発音数制御について

ADXで扱う音の単位は、大きく分けてキュー ボイス があります。
発音数の制限機能は、キューとボイスでそれぞれ独立に働きます。
どちらの設定もCRI Atom Craft上から設定可能です。

キューの発音数制御

キューリミット

「キューリミット」は、そのキュー自体が同時に何音再生できるかの制限です。
例えば、1 を設定するとそのキューを同時に1音しか再生できなくなります。
先着優先であれば、2音目のリクエストは無効になり、後着優先の場合は、すでに再生されているキューを停止してから新しく2音目を再生します。
つまり、一つのキューで閉じた再生数の制限です。他のキューを何音発音しているかには影響を受けません。
また、キューを再生するプレーヤーに関係なく、キュー単位で発音数を制御します。
(複数プレーヤーによる2つの発音と単一プレーヤーによる2つの発音は、キューリミット処理的には単に2つの発音となります。)
キューリミットの値は、アプリ全体での最大同時再生キュー数ではなく、そのキューが何音多重に再生できるかの数と考えてください。
(他のキューの再生数を制限する機能ではありません。)
キューリミット処理はキューシートハンドル単位で動作します。
例えば、キューリミット数に1が設定されているキューを含むキューシートデータを、 2回ロードしキューシートハンドルを2つ作成し(同一キューシートデータで複数のキューシートハンドルを生成)、 それぞれのキューシートを指定してキューの再生を行った場合、それぞれのキューは別個にキューリミットが動作するため最大発音は2となります。
アプリ全体での同時再生キュー数を制限したい場合は、例えば全てのキューを同一の「カテゴリ」に登録し、 カテゴリのリミット数を設定するといったデータの作り方が必要になります。

キューリミットの種類

「キューリミット」は、キュー、キューシート、カテゴリの3つの項目に対し設定が行え、再生時の制御処理の順番は以下のようになります。
項目 制御処理順番 説明
キュー 1 キュー単体での発音数制御:先着後着優先有り、プライオリティ無し
キューシート 2 キューシートハンドル単位での発音数制御:先着後着優先有り、プライオリティ無し
カテゴリ 3 カテゴリ単位での発音数制御:先着後着優先有り、プライオリティ有り

このため、キュー単体での発音数制御によって再生がキャンセルされた場合、キューシートやカテゴリでのキューリミット処理は動作しません。

カテゴリキュープライオリティ

キュー間での発音優先度、発音数を制御したい場合は、「カテゴリ」機能を使います。
キューをカテゴリに登録し、カテゴリ側で「リミットフラグ」を有効にし、 「リミット数」に同時再生数の上限を設定します。
(リミットフラグを有効にしないと、優先度による発音数制限が機能しませんのでご注意ください。)
カテゴリ内での発音優先度は、「カテゴリキュープライオリティ」で指定します。
カテゴリに設定された「リミット数」を超えてカテゴリに属するキューを再生した場合、 ADXライブラリはキューに設定されたカテゴリキュープライオリティ値に基づいて、どのキュー再生を停止するか判断します。
例えば、「Voice」カテゴリを作成し、リミット数を2として複数のキューを登録しておくと、 Voiceカテゴリに属するキューは、同時に最大2音までしか再生できなくなります。
3音目を再生すると、そのカテゴリの中で一番優先度の低いキュー再生が停止して、3音目が再生されます。
カテゴリに登録していないキューについては、カテゴリキュープライオリティの値は機能しません。(優先度は無視されます。)
また、異なる「カテゴリグループ」のカテゴリであれば、キューを複数登録可能です。
カテゴリーキュープライオリティのみ、「近距離プライオリティ」を使用することが可能です。
これは、3Dポジショニング再生を行っているときのみに適用されます。
3Dポジショニングの詳細については、「3Dポジショニング 」を参照してください。

「キュープライオリティ近距離優先」が有効になっているカテゴリでは、リスナーにより近い音源で再生しているキューが優先されるようになります。
但し、以下の点に注意してください。
  • カテゴリキュープライオリティの値が優先されるため、同値の場合にのみ近距離プライオリティ処理が発生します
  • パン3D再生を行っているキューはパラメーターとしてリスナーまでの距離を持っていないため、近距離プライオリティ処理の対象外となります
  • キュープライオリティ近距離優先はCRI Atom Craft上でのみ設定可能です

ボイスの発音数制御

ボイスとは、キュー内に配置された波形単位での発音要素です。
ボイスの発音数制御は、キューとは独立に働きます。
ボイスの最大同時発音数は、「ボイスリミットグループ」「リミット数」で設定します。
ボイスの優先度管理には、「ボイスプライオリティ」を使用します。
ボイスリミットグループで設定したボイスの最大同時発音数は、このグループに属するボイスに対してだけ適用されます。
グループに属さないボイスに関しては、アプリ側が実際に用意しているボイス数に制限されることになります。
つまり、ボイスに関してはキューと異なり、アプリ全体でボイス数の上限がデフォルトで存在します。
(アプリ側で用意しているボイス数が実質的な上限です。)
ボイスリミットグループは、特定のボイスの種類について、さらに再生数を制限したい場合に利用します。
例えば、アプリ側でSE用のボイスプールのボイス数を16と設定すると、SEを最大16音再生できます。
この時、SEの中でも銃声は最大5音までしか鳴らない、という制限をつけたい場合、 銃声のSEをボイスリミットグループに登録し、リミット数を「5」と設定します。
この設定により、銃声以外のSEは最大16音まで、銃声は最大5音まで、合計で最大16音まで、という再生制限が出来ます。
銃声のボイスプライオリティがどんなに高い値でも、ボイスリミットグループで指定したリミット数を超えて再生されることはありません。
また、ボイスプライオリティの値は、ボイスリミットグループへの所属の有無にかかわらず、共通で評価されます。
(この点もキューと異なります。) そのため、銃声以外のSEのボイスプライオリティを 1、銃声のボイスプライオリティを 0と設定すると、 銃声以外のSEが16音鳴っている状態では、銃声は鳴らなくなります。

キューとボイスの発音数制御の関係

キューとボイスの発音数制御の仕組みは独立に働きます。
一方で、ボイスはキュー内に含まれる要素なので、キューが発音されなければ、そのキューに含まれるボイスも発音されないことになります。
先にキューの発音数制御が働き、次にボイスの発音数制御が働きます。
そのため、各キューのカテゴリキュープライオリティ値、キューに含まれるボイスのボイスプライオリティ値に注意してください。

各種パラメーターに基づいたリミット処理

実際にリミット処理が発生した場合、各種リミット設定に基づいて最終的に再生されるキューを決定します。
各項目にて具体例を示して説明しましたが、ここでは汎用的な情報をまとめて記載します。
各種リミット設定には共通して以下のパラメーターがあります。
  • プライオリティタイプ
    キューリミットの場合、プライオリティタイプのみがリミット処理発生時に判定に使用されます。
  • 後着優先:後からリクエストするキューを優先する
  • 先着優先:先にリクエストされているキューを優先する
カテゴリキューリミット・ボイスリミットでは、共通して追加で以下のパラメーターがあります。
  • プライオリティ値
    プライオリティ値は高い方が優先して再生されます。

    これらにおけるリミット処理は、「プライオリティ値 -> プライオリティタイプ」の順で判定が行われます。
    このとき、プライオリティ値が同値のキューが複数ある場合にのみプライオリティタイプでの判定が行われます。
    なお、後からリクエストされたキューの「プライオリティタイプ」がリミット処理に使用されます。
    ※リミット対象の全てのキューのプライオリティ値が同値かつプライオリティタイプが後着優先の場合、一番最初に再生したキューが停止します。
下記条件におけるリミット処理の動作をまとめると、以下の表のようになります。
  • 同一のカテゴリ"Common"および当該カテゴリに属するキュー"A", "B", "C"がある
  • Commonのプライオリティ設定が以下の通りである
    • カテゴリキューリミットフラグ:True
    • カテゴリキューリミット数:2
    • キュープライオリティ近距離優先:False
  • 以下の順で各キューを再生する
    • A -> B -> C
Aのカテゴリキュープライオリティ設定
(値、タイプ)
Bのカテゴリキュープライオリティ設定
(値、タイプ)
Cのカテゴリキュープライオリティ設定
(値、タイプ)
結果
0, 後着優先 0, 後着優先 0, 後着優先 Aが再生されず、BとCが再生される
1, 後着優先 0, 後着優先 0, 後着優先 Bが再生されず、AとCが再生される
0, 後着優先 0, 先着優先 0, 後着優先 Aが再生されず、BとCが再生される
0, 後着優先 0, 後着優先 0, 先着優先 Cが再生されず、AとBが再生される
0, 後着優先 0, 後着優先 1, 先着優先 Aが再生されず、BとCが再生される
カテゴリキューリミットでは、キュープライオリティ近距離優先が有効の場合、追加で3Dリスナーと3Dソース間の距離を使用した近距離プライオリティ判定が行われます。
3Dリスナーまでの距離が近いキューが優先して再生されます。

この場合のリミット処理は、「プライオリティ値 -> 3Dリスナーまでの距離 -> プライオリティタイプ」の順で判定が行われます。
但し、リミット処理の対象となるキューが3Dリスナーまでの距離のパラメーターを持っていない場合、近距離プライオリティ判定の対象にはなりません。
また、プライオリティ値および3Dリスナーまでの距離が同一だった場合、プライオリティタイプによる判定が行われます。
下記条件におけるリミット処理の動作をまとめると、以下の表のようになります。
  • 同一のカテゴリ"Common"および当該カテゴリに属するキュー"A", "B"がある
  • Commonのプライオリティ設定が以下の通りである
    • カテゴリキューリミットフラグ:True
    • カテゴリキューリミット数:1
    • キュープライオリティ近距離優先:True
  • 以下の順で各キューを再生する
    • A -> B
      Aのカテゴリキュープライオリティ設定
      (値、タイプ)
      Aの3D情報
      (パンタイプ、3Dリスナーまでの距離)
      Bのカテゴリキュープライオリティ設定
      (値、タイプ)
      Bの3D情報
      (パンタイプ、3Dリスナーまでの距離)
      結果
      0, 後着優先 3Dポジショニング, 50.0 0, 後着優先 3Dポジショニング, 50.0 Aが再生されず、Bが再生される
      0, 後着優先 3Dポジショニング, 50.0 0, 先着優先 3Dポジショニング, 50.0 Bが再生されず、Aが再生される
      0, 後着優先 3Dポジショニング, 40.0 0, 後着優先 3Dポジショニング, 50.0 Bが再生されず、Aが再生される
      0, 後着優先 3Dポジショニング, 40.0 1, 後着優先 3Dポジショニング, 50.0 Aが再生されず、Bが再生される
      0, 後着優先 3Dポジショニング, 50.0 0, 先着優先 3Dポジショニング, 40.0 Aが再生されず、Bが再生される
      0, 後着優先 パン3D, なし 0, 後着優先 3Dポジショニング, 50.0 Bが再生されず、Aが再生される
      0, 後着優先 パン3D, なし 1, 後着優先 3Dポジショニング, 50.0 Aが再生されず、Bが再生される
      0, 後着優先 3Dポジショニング, 50.0 0, 後着優先 パン3D, なし Aが再生されず、Bが再生される
      0, 後着優先 3Dポジショニング, 50.0 0, 先着優先 パン3D, なし Bが再生されず、Aが再生される
      0, 後着優先 パン3D, なし 0, 後着優先 パン3D, なし Aが再生されず、Bが再生される