【Unity】ADXまとめ
ADX
- CRIWAREのサウンドシステム、Unity用プラグインあり
- 販売権が自分および年商/年収1000万円以下の場合、ADX LEをフリーで利用可
- 使い方は公式チュートリアルを参照
- この記事は ADX LE / AtomCraftLE ver 3.46.02 時の情報
使用条件
- ADX LEはPC、MacOS、Android、iPhone向け。詳細はこちら
UnityPC限定で年収1000万オーバーの場合は10000円程のUnity用ADXを購入でOK - コンソールでリリースしたい場合は製品版 ADX を利用すること。
価格はDLのみなら売上0.95%~1%をCRIWAREに支払う。
※買い切り条件もあるが日本では1機種12万本基準、2000円なら240万円??
仕様まとめ
- CriAtom コンポーネントは実行中のシーンにひとつしか配置できない。
マルチシーンで複数配置すると、最後にロードした CriAtom に上書きされる - Timeline に対応させるには、ProjectSettings→Player→Scripting Define Symbols にCRIWARE_TIMELINE_1_OR_NEWER を追加
使い方
- CriAtom.AddCueSheet、AddCueSheetAsync でキューシートを追加
CriAtom.RemoveCueSheet でキューシートを削除 - キューシートのロード状態の確認は CueSheetsAreLoading で確認可
- CriAtom.SetCateoryVolume でカテゴリの音量を変更
- CriAtomExPlayer に Play、Stop、Pause、Resume など一通りの機能がある
フェード諸々もここから実行 - CriAtomExPlayer インスタンスの UpdateAll メソッドで、弄った値を反映
インタラクティブ再生
ブロック再生
キューのブロック設定をコード側で指定するとそこから再生できる機能。詳細
- ADX2のブロック再生機能のチュートリアルでブロック機能を学ぶ
- 同人サークルreverse snareさんの記事で実際の使い方を参照
- コードでは再生時に CriAtomExPlayback 取得後、SetBlockIndex(index)
スイッチ
キュー「スイッチ」はプロジェクトツリー「ゲーム変数」を参照する機能。詳細
- 複数トラックを仕込んだキューで変数値毎に再生するトラックを変える
- ただしスイッチでは再生途中で切り替えるということはできない(らしい)
- コード上では CriAtom.SetGameVariable(id, value)、GetGameVariable
セレクタ
セレクタを切り替えるとキュー内で再生されるトラックが切り替わる機能。詳細
- プロジェクトツリーのセレクタフォルダからラベルを作成
- キューシートで右クリック、「セレクタによるトラック遷移の作成」
- トラックにセレクタ登録
- 詳細はこちら
- CriAtomSource で使う場合は CriAtomExPlayer.SetSelecterLabal
便利機能
カテゴリ
- カテゴリグループの下にカテゴリを最大16個まで設定可
- キュー上ではグループ毎にカテゴリ登録可
- 例えばマスターボリューム用グループと、内部制御用グループでわける、など
アクショントラック
アクショントラックは他のキューのパラメータを調整できたりする便利機能。詳細
- 再生パラメータアクションでボリュームやピッチ等を変更できる
- これはキューの他、カテゴリグループの調整にも使える
Timeline拡張
- TimelineでCriAtomSourceコンポーネントが使える!
- ピッチ、ボリューム、AISAC等が利用できるので、SE作りで活躍しそう
- DAWでパラメータを調整するイメージでMAできるのでは?(まだ試してない)
REACTでダッキング
- こちらのチュートリアルを参照のこと
3Dポジショニング
- AtomListener がシーンにない状態で3Dポジションのキュー再生で鳴ってしまう問題。
これは事前に disable 状態にした AtomListener コンポーネントを配置しておくと解決。 - 複数のリスナーを配置して、特定のリスナーを手っ取り早く有効化する方法は、
まず全リスナーの ActivateListenerOnEnable を true にしておく。
その後、聞かせたいリスナーを enable にしてやればよい。
若干乱暴だが、最後に enable になったリスナーが有効化される。 - 距離は 1m = 1unity 単位。
内部的には再生状態が続くが、距離減衰の最大をカメラ範囲距離に設定すれば、
カメラ範囲から離れたら音が聞こえなくなる。
コールバック
- CriAtomExSequencer.OnCallback += Callback といった感じで書く
Start() あたりで登録しておくと良さそう - private void Callback(ref CriAtomExSequencer.CriAtomExSequenceEventInfo info)
といった形のメソッドを作って、シーケンスイベント情報を取得 - CriAtomExSequenceEventInfo はIDやタグなどの情報がまとまっている
- あとは勝手にコールバックが発火するので好きに中身をつくるとよい
- ビート同期も同じような感じ。詳細はこちら
コードからクロスフェード
AtomCraft上でもある程度設定できるが、コードから設定した方が使いやすいか?
- クロスフェードを使用したいカテゴリは発音数を2音にしておく
- CriAtomExPlayer.AttachFader() でフェーダーをプレイヤーに必ずセット
フェーダーをセットするとクロスフェードに対応(擬似的に発音数1音化) - CriAtomExPlayer.SetFadeInTime(時間ms) でフェードイン時間のセット
- CriAtomExPlayer.SetFadeOutTime(時間ms) でフェードアウト時間のセット
- CriAtomExPlayer.SetFadeOutEndDelay(時間ms) で再生終了後の破棄時間のセット
- 上記をセットした状態で CriAtomExPlayer.Play() か Stop() を実行
AttachFader() は ExPlayer を作成した後、いちど実行するだけでOK。
その後は Stop() 実行前に SetFadeOutTime() を実行すると次の Stop() 実行時に反映。
ただし、変更状態が維持されるので必要毎にセット必須。
ちなみに DetachFader() でフェーダー状態を解除可。
UniTaskでCriAtomCueSheetをawaitさせる
- UniTask に対応させる方法はこちら(まだ UniRx 時代の解説だけど)
一條さんのコードは古いバージョン用のコード。
該当コンストラクタは削除された(neueccさん談)らしく、下記のように修正されたし
気になった点
- Unity2021.2.7f1 + ver2.37.13LEでは AtomBrowser でエラーしまくる
- 原因は CriAtomWindowPrefs.cs の36行目で絶対パスを取得しているため。
解決するにはプロジェクトフォルダ以下の Assets/... に直す必要あり
補足
- CriAtomExPlayer.SetCue(acbファイル名, キュー名) のacbファイルは null でもOK
- ゼロレイテンシーストリームとストリームのブロック再生についてはこちら
参考