UnityでCRI ADXをそれとなく使えるようにするまでのメモ
お久しぶりです。TETRADOTOXINの都築テトラです。Unityで2DARPG「シトロンワールド」を個人制作してます。
オーディオ周りをUnity標準のものからCRIのADXに移行したくなった(した)ので、とりあえず試行錯誤の備忘録を残しておきます。
CRI ADXとは?
みなさんが普段ゲームで遊んでいる中でおそらく見たことがあるであろう「CRIWARE」のロゴ。このCRIWAREさんが提供してくれているサウンドミドルウェアが「CRI ADX」です。2021年8月にADX2からADXという名前に変更されたそうな。これをUnityで使おう、というのが今回やりたいこと。
他にも映像用のミドルウェアとかもありますが、今回はオーディオをひとまずいじれるようになりたいので、ADXのことだけ。
早速再生できる環境を作る
ADXは音声担当とプログラム担当が円滑に作業できるように設計されてるので、エンジニア側が環境を作る必要があります。まずはエンジニア用チュートリアルを見てSDKやツールを入手します。
具体的な手順は公式チュートリアルにあるので割愛します。
だいたい入門3までで基本的な環境が揃います。基礎は大事なので慢心せず全部のチュートリアルを見ましょう。見ます。
ADXの仕様ですが、StreamingAssets以下に配置したファイルを再生します。
……どうしよう、StreamingAssetsなんもわからん…。とりあえずこれを見てなんとなく理解しました…。
データの用意(ひとまず後でもいい)
Unityで再生するファイルは「CriAtomCraft」で制作します。
これまたチュートリアルの通りに入れて、ビルドするとファイルが出てきます。圧縮のためのツールなので、非圧縮のファイルしか使えないっぽいです。現段階の弊プロジェクトはmp3とかoggがほとんどなので、これを機に新しいwavを探すなどして気分転換でもしようかな。
キューシート、キューって何?
マニュアルを見ると、キューは「オーサリングを行った波形群」、キューシートはそれをデータファイルとして出力する単位と書いてあります。
AtomCraftでキューってのを見てみるとキュー直下に「トラック」というのがあって、トラックごとにボリュームとかパンとかをなんやかんやしてキューを形成していくイメージです。これをUnity側から変数いじるような形で制御することができるそうな。従来は組み込みで実現してたインタラクティブミュージックやランダム再生などを音声ファイル(キュー)側で設定して実現できるみたいです。便利。
とりあえず今はキュー以下の詳細は置いておき、コンポーネントにファイル名を記載します。
.acf、.acb、.awb…?なんのこっちゃ???って感じですが、多分「acf」がキューシートに相当するファイルなんでしょうか。
とりあえずそれぞれのファイルパスを記述。
ファイル拡張子がややこしいので、note執筆後にプロジェクトウィンドウに拡張子を表示するエディタ拡張を導入しました。
CRI Atomコンポーネントに記述するファイルのパスはStreamingAssetsの相対パスになります。Nameの部分はパスじゃなくて名前だけを書かないと参照できませんでした。よくわからん…。とりあえず音出てるのでよしとしましょう。
また、StreamingAssetsにファイルを配置して「AtomBrouserのReload info」を押下すると、チュートリアルで作成した「CRIWARE」オブジェクトの「CRI Atom」コンポーネントに自動的に記載されました。されてなかったりもしました。あれでもacfファイルパス違…え?鳴ってるからいい?はい……
環境が整ったので適当にBGMを流してみる。
チュートリアルを見た限りいまのところリスナーみたいなものは出てきてませんが、キューを再生すればいい感じに再生してくれる感じかな?
AtomBrouserからシーンに追加したオブジェクトには「CRI Atom Source」コンポーネントがついてるので、これを叩いて再生すればよさそう。
Play On Startにチェックを入れるとシーン開始時にインスペクタで指定したキューを自動で再生してくれるっぽい。
そしてC#スクリプトから再生するにはCRIAtomSourceのプロパティに.Play()や.Stop()を呼び出せばOK。括弧内に引数として同じキューシートのキューを文字列で指定して流すことも可能。ex)CriAtomSource.Play("cueName");
CriAtomSource atomSrc = gameObject.GetComponent<CriAtomSource>();
//再生
atomSrc.Play();
//キュー指定して再生
atomSrc.Play("cueName");
//停止
atomSrc.Stop();
以前はAudioManagerにAudioSourceを置いてそこにAudioClipを渡す形で再生していたので、移行する際はマネージャのソースをこちらに差し替えて、AudioClipを指定していた部分をStringに変えてあげれば同じような使い方ができそう。いろんな所からオーディオクリップ渡してるので、全部手動で入れ替えます…。
BGM用、SE用、ボイス用etc.でソースを用意して、ソースにキュー指定でPlayするのがいいかな?そうしよう。
CRIAtomSourceコンポーネントのVolumeが再生音量なので、コンフィグと紐づければボリューム設定も実装できそう。
複数ソースを置くことによるメリットとかデメリットとかはなんも知りません。
また、CriAtomSource.Playは戻り値としてCriAtomExPlayBackを取得できるので、キューを指定して処理を行うこともできるそう。
CriAtomSource atomSrc = gameObject.GetComponent<CriAtomSource>();
/* 3つのCueを連続再生 */
CriAtomExPlayback playback1 = atomSrc.Play("Cue1");
CriAtomExPlayback playback2 = atomSrc.Play("Cue2");
CriAtomExPlayback playback3 = atomSrc.Play("Cue3");
/* Cue2だけを止める */
playback2.Stop();
引用元:https://game.criware.jp/learn/tutorial/unity/unity_shokyu_02/
また、CriAtomSourceと別にCriAtomExPlayerというコンポーネントがあり、こちらはキューシートの指定やスクリプトで音声処理を完結させることもできるようです。開発環境によって使い分けたいところ。
ここまでほとんど触れてなかったのですが、ADXのメリットやできることなどはこちらの記事がとても参考になったので紹介します。
おわり
とりあえず基本的な再生や制御ができるようになったぞ、といった感じでした。現状必要なデータを用意してデモ用ビルドを完成させたいところ。
過去にAudioSourceで作成した、2D座標依存のオーディオやパンを制御するようなものもADXで作り直したかったり。しばらく細かな作業が続きそう。
最近あまり更新できてないですが、10月末の東京ゲームダンジョン6に向けて開発を加速していきたいです。Twitterで進捗投稿しているので、是非フォローお願いします。フォローお願いします!
https://x.com/tetra_citron
↓Steamのウィッシュリスト登録もよろしくね↓
この記事が気に入ったらサポートをしてみませんか?