ADXで設定した音をさまざまな条件下でプレビュー再生する

# ADXで設定可能な音の挙動とプレビュー再生

アクションゲームなど、音が多く鳴るゲームにおいては、次のような音の制御が必要です。

1. 多重再生を防止するために、同時再生数を音ごとに制限する
2. BGM、SE、ボイスなどの音の種類ごとに同時再生数を制限する
3. ゲーム側からパラメーターを受け取って、音をリアルタイムに変化させる
4. 距離減衰による音の変化をデザインする

ゲーム向けサウンドミドルウェア「CRI ADX」「CRI ADX LE」は、音に対して多彩な再生設定ができます。

CRI ADXは、こうしたゲーム開発において必要な音の制御機構を内包しています。

これらの音の設定をスクリプトを書かずに設定できます。設定は、ADXのSDKに内包しているオーサリングツール「Atom Craft」を使います。

![atomcraft.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19010/1c320d9a-4ebc-fd84-2346-ca80f94469bc.png)

Atom Craftは音の設定をするだけではなく、複数の音が同時に再生されたときのプレビューが可能です。

1.のような再生数上限の設定は動作をそのまま確認できます。たとえば「同時に2音までしか鳴らない」という設定の音は、Atom Craftのプレビュー再生(再生ボタンかF5キー)を連打することで、同時2音までの挙動を確認できます。

2,3,4の例のような、複数の音が関係する挙動設定や、ゲーム側の動作と連動するような設定の場合は、「セッションウィンドウ」という機能を使ってプレビューを行います。本投稿では、このセッションウィンドウについて紹介します。

※CRI ADXを初めて使う方は、[「Unityのサウンド機能をADXで強化する」](https://qiita.com/Takaaki_Ichijo/items/16e6501fc07f5b3b3377)を確認してください。

## セッションウィンドウの使い方

セッションウィンドウは、キュー(ADXにおける音の単位)の再生プレビューを行うためのウィンドウです。多数の音の同時再生テストや、様々なパラメータを確認しながら再生プレビューができます。

Atom Craftメニューの「表示」-> 「セッションウィンドウ」から表示できます。

![セッションウィンドウ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576800/374b420d-7c3a-9469-d56d-552fc241d321.png)

セッションウィンドウでは、実際のゲーム動作時の挙動に近い形でプレビュー再生ができます。「プレイヤー」と呼ばれる再生ハンドルを複数持っており(Unityで言うところのAudio Sourceのようなオブジェクトです)、距離減衰のテスト機能など、ゲーム側から渡されるパラメータのゲーム内の挙動を模した操作ができます。

特徴は、再生プレビューのショートカットキーをキーボード上に自動配置する機能です。セッションウィンドウにキューを登録すると、キーボード左手側エリアのキー（1,2,3,4,q,w,e,r,a,s,d,f,z,x,c,v）がキューの再生トリガとして機能します。多種類の音を同時に再生したときの挙動が確認できます。

まずは、プロジェクトビューからキューをいくつか登録してみましょう。セッションウィンドウの下部エリアにドラッグ＆ドロップします。自動的にキュー再生が割り振られることが確認できます。

![キューの登録](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576800/6393c013-43d2-3ecb-eebf-90edbd384cd2.png)

複数の音を同時に再生しまくったときどうなるか、セッションウィンドウを使うと簡単に組み合わせテストができます。

ADXでは音をBGMやSE、ボイスなどにラベル分けして管理できる「カテゴリ」という機能があります。たとえば、「ボイスは最大で同時３音までしかならない」としたとき、さまざまなキャラのボイスをセッションウィンドウに登録して、ショートカットキーを使って鳴らしまくってテストができます。

## ゲーム側からパラメータを受け取って変化する音のテスト

ADXには、ゲーム内のパラメータに応じて鳴らす音を変えたり、音のパラメータを変化させる機能があります。「セレクタ」「ゲーム変数」「AISAC」は、セッションウィンドウにプレビュー用の機能があります。

### セレクタの確認

「セレクタ」は簡単に言えば、キューに引数オプションをつける機能です。キュー内のトラックごとにラベルを張って、キュー再生時にそのラベルを指定して再生リクエストを送ることで、音を切り替えます。たとえば足音に「木の床」「砂利」のような2種類の音を設定し、「足音キューを再生、設定は木の床」といったような再生処理ができます。

最低限の設定は以下となりますが、詳しくは公式マニュアルの[「CRI ADX2: セレクターによる再生トラックの切り替え」](https://game.criware.jp/manual/native/adx2/latest/criatom_tools_atomcraft_switch_track_by_selector.html)を御覧ください。

設定の順序は次のとおりです。

①セレクターとセレクターラベル作成する（ラベルは複数）

②キューのシーケンスタイプをポリフォニックに変更する

③トラックにラベルを設定する

![トラックにラベルを設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576800/383bb200-3983-4711-3c54-eab5c23bcfee.png)

セレクタ機能で設定したラベルの変更はゲームプログラムから行うものですが、Atom Craftでプレビュー再生を行う場合はセッションウィンドウの「ラベル」から切り替えができます。

### ゲーム変数の確認

「ゲーム変数」は簡単に言えば、ゲーム内のパラメータを保持できるフィールドです。たとえば「キャラのダメージ状態」のようなパラメータをADX側に持って置き、そのパラメータに応じて音を変化させる機能です。扱えるのは0～1のfloat値となります。

最低限の事前準備としては以下の通りです。

①ゲーム変数を作成する

②キューのシーケンスタイプをスイッチに変更する

③インスペクターのスイッチタブからスイッチ変数を選択する

![スイッチ変数の設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576800/285f0687-3770-bca2-663f-0ad76100f61a.png)

セッションウィンドウでは、あらかじめAtom Craftで用意したゲーム変数の値を変化させながらキューのプレビュー再生ができます。

![セッションウィンドウのゲーム変数.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19010/24be00f8-55f8-6200-d2a3-399d75c517ef.png)

### AISACの確認

AISACは、音声を再生しながらパラメーターをリアルタイムに変化させるシステムです。ピッチやフィルタなどの変化量をグラフで設計できます。

AISACの動作確認はAtom Craftのメインウィンドウでも可能ですが、セッションウィンドウでは2種類のパラメーターをXYにアサインした2値同時操作のインタフェースがあります。

AISACの詳細な設定方法は「[Unityでインタラクティブミュージックを実装 with ADX 基礎編](https://qiita.com/Takaaki_Ichijo/items/8a18f72d4cb6a10f77e1)」をご参照ください。

![セッションウィンドウによるAISACのプレビュー再生.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19010/01d74080-ce02-bcd9-1cf2-5e0b395eec8c.png)

## 3Dポジショニングキューのプレビュー再生

Atom Craftのメインウィンドウでは、3Dポジショニング設定をしたキューの距離減衰はプレビューできません。プレビューはセッションウィンドウで行います。

![パンタイプの設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576800/6c2f5769-b44d-2053-2b27-bf8ea6405869.png)

事前準備としてまずキューのパンのタイプを3Dポジショニングに変更します。その後「プレイヤーリスト」で3Dフラグをオンにするか、「プレイヤーに3Dオブジェクトをアタッチ」のオプションをオンにすれば準備完了です。

セッションウィンドウ左上にある座標操作ビューをマウスでドラッグすることで、リスナーからの距離・角度に応じてどのように音が変化するかプレビューできます。

![セッションウィンドウの3Dポジショニング設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19010/eba1457e-3635-58c5-6c81-356aceb8f7d1.png)

## フェーダーのテスト
Atom Craftのツール上で設定せず、プログラム側から利用する機能のプレビュー再生もできます。ADXにはフェードを簡単に実装する「フェーダー」というオブジェクトがあるのですが、この挙動テストが可能です。

セッションウィンドウでBGMデータを再生する前に、プレイヤーの「フェードアウト時間」のチェックを入れ、イン・アウトそれぞれのフェード時間を指定するだけです。単位はmsです。

![セッションウィンドウでのフェーダーのテスト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19010/33ce05a7-78a8-e492-5197-b7119e8523a0.png)

# まとめ

ADXは数多くの音の設定が可能ですが、それらの設定が掛け合わされたときに、クリエイターが意図した挙動になっているかは都度確かめることをお勧めします。

実際のゲームでテストしてみることが一番確実ですが、セッションウィンドウを使うことで、ゲームに組み込む前により多彩なテストが可能になります。

新しい設定を取り入れたり、キューに一括指定の操作をしたときは、セッションウィンドウを利用しましょう。