【Unity】今から始めるサウンド管理！CRI Addressablesとファイル形式の基礎知識

# 最初に

本記事の内容は、ゲーム開発プロジェクトでよく使用されるCRIミドルウェアのCRI Addressablesについて、最新情報をキャッチアップした内容をまとめたものです。この記事が、CRIの使用を考えている開発者の方にとって参考となれば幸いです。

本記事の対象読者は以下の通りです。

- UnityでCRI（ADX2, Sofdec2）を利用、または検討中
- Addressablesでサウンドアセットを柔軟に配信・メモリ管理したい
- ACB/AWB/USMなどCRI独自のファイル形式を把握したい

### 環境

本記事の環境は以下の通りとなります。

- Unity：6000.0.27f1
- OS：Windows
- CRI ADX SDK：ADX LE Unity SDK（3.11.00）
- CRIツール：Windows用（3.54.02）

<br>

# CRIってそもそも何？

CRI（CRI Middleware）は、**サウンドや画像を扱うミドルウェア製品を提供している日本企業**です。特に、この企業から提供されている「CRI ADX2」は主要なゲームエンジンに向けたサポートがされており、様々なゲームプロジェクトでの導入実績があります。

私も実務で使用経験がありますが、ツールもUnity向けプラグインどちらも品質が高く、尚且つゲームプロジェクト向けにかなり最適化されていて扱いやすかった記憶があります。

CRI社から提供されている製品の中で、ゲーム開発プロジェクトに使用できるものをピックアップして簡単にご紹介します。

### [CRI ADX2](https://game.criware.jp/products/adx2-old/)

ゲーム開発向けの高機能なサウンドミドルウェアで、ADX2を使用することで多様なサウンド演出を手軽に実装できます。

主要な家庭用ゲーム機やスマートフォン、PC、HTML5など、多様なプラットフォームでの展開をサポートしていて、48kHzのステレオ音楽を最大1/16まで圧縮したり、複数音の同時再生でも低いCPU負荷を保つことができたりします。

特に、ボイスのクオリティを高く保ったまま、ファイルを圧縮することができるので、ボイスが重要になるゲームではかなり助かります。

本当に色々なゲームプロジェクトで導入されていて実績も確かですし、インディー開発者向けに無償版のサウンドミドルウェア「CRI ADX2 LE」も提供されています。

この無償版でも、インタラクティブ・ミュージックなど多彩なサウンド表現が可能で、個人や小規模チームの開発者でも高品質なサウンド演出を手軽に実現できるため、おすすめです。
<br>

### **CriAuthorizationTool**

CRIWARE製品のライセンス認証を行うツールです。

初回起動時にメールアドレスを登録し、ライセンス認証を完了させ、PC登録を行うことで、各種ツールの利用が可能となります。

詳細な手順については、[公式マニュアル](https://game.criware.jp/manual/native/adx2/latest/criatom_tools_license_about.html)をご参照ください。

<br>

### [Sofdec](https://game.criware.jp/products/sofdec/)

CRI社が提供する、ゲーム向けの高品質な動画再生システムです。

`.usm`形式のファイルを扱い、ゲーム内での高解像度かつスムーズな動画再生を実現します。

:::note

**.usmとは？**

Sofdecが採用している独自の動画フォーマットです。この形式は、映像と音声を高圧縮で組み合わせつつ、再生時のパフォーマンスを最適化するよう設計されています。ファイル自体が軽量でありながらも、高品質な動画再生が可能なため、容量が限られたスマートフォン向けゲームアプリなどで、よく利用されています。

（私もお世話になりました）

:::

Sofdecを使うことで、シームレスなカットシーンやムービーを簡単に実装可能です。

また、SofdecはUnityやUnreal Engineなど主要なゲームエンジンとスムーズに連携し、複数言語対応の音声や字幕切り替えなど、グローバル展開にも適した機能を提供しています。

<br>

### [**CRI Clovis**](https://game.criware.jp/products/clovis/)

2024年9月末に登場したネットワーク動画再生ミドルウェアのことで、PC、スマートフォン、ゲーム機などの主要なプラットフォームでの動画ストリーミング再生を可能にします。

公式での紹介によると、

> サーバーからリアルタイムで動画を読み込みながら再生することで、アプリ容量を削減しつつ、最新の動画コンテンツを瞬時に提供します。

4K解像度の高画質動画やライブ配信にも対応しており、マルチプラットフォームでコンテンツをユーザーに直接届けることができます。
> 

らしいです。

是非一度触ってみたいものです…。

<br>

### [AtomCraft](https://game.criware.jp/learn/tutorial/atomcraft/?utm_source=chatgpt.com)

CRI ADX2専用のサウンドオーサリングツールです。

DTMソフトっぽい直感的なGUIを備え、サウンドデザイナーが効果音やBGMの作成、編集、管理を効率的に行うことができます。また、ゲームエンジンとの連携やデバッグ機能も充実しており、ゲーム内での高品質なサウンド演出をサポートしてくれます。

[チュートリアル](https://game.criware.jp/learn/tutorial/atomcraft/?utm_source=chatgpt.com)も充実していますし、[AtomCraftロボット](https://game.criware.jp/learn/tutorial/atomcraftrobot/)というサウンドデータの作業フローを自動化できる仕組みも提供しています。

AtomCraftロボットは慣れるまで少し癖がありますが、扱えるようになると手作業分がかなり削減されるので、大規模プロジェクトであれば使用必須です。

<br>

### [ADX LipSync](https://game.criware.jp/products/lipsync/)

音声データから自然な口の動きを自動生成する音声解析ミドルウェアです。

リアルタイム解析と事前解析の2つの方法で口パターンの制作が可能で、2D/3Dキャラクターのリップシンクを高精度に実現してくれる優れものです。

Lipsyncツールと言えば他にもありますが、「日本語における解析力と品質の高さ」で言えば、ADX Lipsyncがトップクラスだと、私は思っています。

:::note

結構前にはなってしまうのですが、Oculus LipsyncとADX Lipsyncを比較した記事も書いておりますので、興味ある方はそちらも見て頂けると嬉しいです。

[**Oculus LipsyncとADX Lipsyncを比較してみた**](https://qiita.com/4_mio_11/items/ccfeba726b7996a4204a)

:::

<br>

# CRI Addressablesとは？

**CRI Addressables**は、**CRIWAREの音声や動画データをUnityのAddressable Asset System（AAS）で効率的に管理・ロードするためのアドオン機能**です。

このアドオンを使えば、CRIの独自ファイル（例：.acf、.acb、.awb、.usmなど（後述））をUnityアセットとして認識させ、AASを通じて柔軟に取り扱うことが可能となります。

:::note warn

この機能をUnityで使うためには、`Assembly Definition`を使って構築されたプロジェクトが必要となります！

あわせて、環境は最低でも以下のバージョン以上である必要があります。

- Unity：2019.4.0f1以降
- Addressable Asset System：1.15.1以降

:::

<br>

## 特徴

- **Unityアセット化**：
CRIの各種ファイルをUnityアセットとしてプロジェクト内の任意のフォルダに配置できます。これにより、アセットの管理が従来の手法と比較して楽になります。
- **Addressablesとの連携**：
CRIアセットをAASで管理し、タグをつけたりグループにまとめることで、必要なCRIアセットも自動的にロードされるため、うまく使えばメモリ効率の向上が見込めます。
- **デプロイタイプの設定**：
各CRIアセットのインスペクターで「Deploy Type」を設定し、ビルド時にアセットの実データをどこに配置するかを指定できます。

<br>

CRI社が提供しているサンプルプロジェクトからAddressableに対応した状態のアセットがこちらです。`CustomDeploySample`は今回のサンプルプロジェクト独自のものなので、一旦それ以外のDeploy Typeについて見ていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/08a34bb9-5051-207e-85cd-fbaa75ffd30d.png)

<br>

## **Deploy Typeの種類について**

###  **Addressables**
AASのビルド時に、各CRIアセットに対応するNon-Asset CRIデータ（CRI独自形式のままのツール出力ファイル）が各グループごとのBuildPathに配置されます。動的にデータをロード・管理できるので、設定と管理をしっかり行えば、ゲームの初回ロード時間を短縮したり、メモリ使用量を最適化できます。ただし、適切なキャッシュ機構を用意しないと、多重ロードになる危険性もあります。


###  **OnMemory**
データはUnityアセットとしてアプリ内部に含まれ、ロードタイミングでメモリ上に展開されます。初回読み込みが高速で、小さなデータに向いている設定です。Addressablesとも併用できます。ACFやACB（後述）に対しては、この設定が推奨されています。バイナリ内部にデータが埋め込まれるため、セキュリティ面としてはStreamingAssetsより優位だと思います。

###  **StreamingAssets**
CRIアセットに対応するNon-Asset CRIデータが**StreamingAssetsフォルダ**にコピー・保存されます。アプリがインストールされると、端末ストレージ内にStreamingAssetsのデータもそのまま保存されます。必要になったタイミングでストレージからロードできますが、初回ロード時にディスクI/Oが発生するため、遅延が発生する可能性があります。そこを解消するために、サウンドデータの最初の部分だけをオンメモリにする設定もAtom Craft上で可能です。サーバーが必要ないアプリでは、CRIアセット全てにこのDeploy Typeを設定しておくと、ファイル種別に応じてオンメモリロード/ストリーミング再生が行われるので便利です。

<br>

:::note

**Non-Asset CRIデータ？CRI Assets？？**

**Non-Asset CRIデータ**は、以降で説明するACF, ACB, AWB, USMなどの、CRI AtomCraftなどで生成したファイルを指します。

**CRI Assets**は、今回取り上げているCRI Addressablesが含まれたプラグイン、Asset Support Add-onを導入することで利用できるようになる、「**Non-Asset CRIデータをUnityアセットとして扱えるようになる機能」**のことです。

両者の違いは公式の表をご確認頂くことで、更に理解が深まると思います。

[CRIWARE Unity Plugin Manual: CRI Assets](https://game.criware.jp/manual/unity_plugin/latest/contents/addon4u_assetsupport_assets_overview.html#addon4u_assetsupport_assets_about)

:::



<br>

# CRI Addressables対応のファイル形式

CRI Addressablesがサポートする主なファイル形式は以下のとおりです。

<br>

- [**ACF（Atomコンフィグ）ファイル**](https://game.criware.jp/manual/adx2_tool/latest/criatom_tools_atomcraft_acf_file.html)：
すべてのキューシートで共通の情報を持つ全体設定ファイルで、音声再生に関する各種パラメータ（カテゴリ情報、ボイスリミットグループ情報など）を定義します。１プロジェクトに対し１ファイルです。ACBファイル群はACFを参照するため、このファイルが更新された場合はACBファイルも出力し直す必要があります。
- [**ACB（Atomキューシートバイナリ）ファイル**](https://game.criware.jp/manual/adx2_tool/latest/criatom_tools_atomcraft_acb_file.html)：
キューシート単位でパッキングされたキュー情報ファイルで、個々のキューの音量やピッチなどの設定情報や、OnMemoryで再生するサウンドデータを含んでいます。
- [**AWB（Atomウェーブバンク）ファイル**](https://game.criware.jp/manual/adx2_tool/latest/criatom_tools_atomcraft_awb_file.html)：
AtomCraftでエンコードされた波形情報をキューシート単位でパッキングしたファイルです。StreamingAssetsフォルダから読み込むサウンドデータはこちらに含まれます。再生用に必要なパラメータはACBファイルを参照しています。
AtomCraft上で、AAS経由やStreamingAssetsフォルダから長尺のサウンドデータを読み込むために、初回ロード時遅延を防ぐためのデータの冒頭部分と、残りのデータ部分を分割できます。その場合、冒頭部分がACB側に組み込まれ、残りの部分がAWB側に含まれます。
- **USMファイル**：
Sofdecの動画ファイルで、高品質な映像データを提供します。CRIWAREが提供するムービー再生用のコンポーネント（例: `CriManaMovieController`）を使って、Unity内で再生などの制御が行えます。

<br>

:::note

**キューシート？**

CRI Atom（総合的な音声ミドルウェアの名称）において、複数の音声再生単位（キュー）をまとめて管理するための単位です。

各キューは、音声データや再生設定を持ち、効果音やBGMなどの再生を制御します。

キューシートは、これらのキューをグループ化し、1つのファイル（.acbファイル）として出力されるものです。

例えば、ゲーム内の特定のマップやキャラクターに関連する音声を1つのキューシートにまとめることで、必要な音声データを一括してロード・アンロードすることが可能となり、メモリ管理や再生制御が容易になります。
:::

<br>

# 導入手順

今回はCRI ADX LEを使用して導入していきます（とはいっても、CRI ADX2と導入はほぼ同じです）。

まずは以下の公式サイトにアクセスして、ページ下部にある「ダウンロード」からご自身の環境に合わせたSDK＆ツールをダウンロードしてください。

本記事ではUnityを使用して確認するため、「ADX LE Unity SDK」と、ツールの「Windows用」を使用します。

[無償版サウンドミドルウェアCRI ADX LE - CRIWARE for Games](https://game.criware.jp/products/adx-le/)

ダウンロードしたものを解凍し、ご自身のUnityプロジェクトに以下のプラグインをインポートしてください（以下のファイルをUnityのProjectタブへD&Dでいけます）。

- `“criadx2le_sdk_unity_vx_xx_xx_smartphone_j/cri/unity/plugin/criware_unity_plugin_vx_xx_xx_le_ja.unitypackage”`

これでSofdecのファイルも含め、CRIの基本的な形式のファイルは扱えるようになりました。

では続いてCRI Addressablesを含むアドオンプラグインをインポートしましょう。

- `"criadx2le_sdk_unity_vx_xx_xx_smartphone_j/cri/addons/asset_support/plugin/cri_asset_support_addon_v1_x_xx+x_x_xx_ja.unitypackage”`

次に、ツールである「CRI Atom Craft」の方を開いてみます。

まずは、以下の公式マニュアルに沿ってツールユーザーライセンス認証を行ってください。

[CRI ADX: ツールユーザーライセンス認証について](https://game.criware.jp/manual/native/adx2/latest/criatom_tools_license_about.html)

その後、

- `"cri_adxle_tools_ver_3_xx_xx\cri\tools\ADX2LE\ver.3\CriAtomCraft.exe”`

を起動して、問題なく立ち上がればOKです。

これでCRI ADXを使う準備はできました。とっても簡単ですね！

<br>

# 公式サンプルのチェック

実は先ほどダウンロードしたSDKのフォルダ内にはCRI社が提供しているサンプルプロジェクトも同梱されています。

- `"criadx2le_sdk_unity_vx_xx_xx_smartphone_j\cri\unity\samples\UnityProject”`

私はUnity2022.3.52f1で開いて確認してみましたが、問題なく実行ができました。

収録されているサンプルは公式ドキュメントから一覧確認が可能です。

[CRIWARE Unity Plugin Manual: サンプル](https://game.criware.jp/manual/unity_plugin/latest/contents/cri4u_samples.html)

<br>

今回は[CRIWARE Addon サンプル](https://game.criware.jp/manual/unity_plugin/latest/contents/cri4u_samples_addon.html)のひとつ、[「**[Asset Support] Addressables**」](https://game.criware.jp/manual/unity_plugin/latest/contents/cri4u_samples_addon_asset_scene02.html)のページをチェックしていきます。


以下の場所にあるSceneファイルを開いてください。

- `Assets/CriAssetSamples/Scenes/Scene_02_Addressables.unity`

<br>
実行して、画面上にある画面右側のボタンを押下すると音楽が流れ始めます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/79d802ba-6961-c356-78e7-54817aad82fa.png)

<br>

内部の処理としては、特別な何かをしているわけではなく、AASを使った更新、ロード、キャッシュクリアなどを行っているだけです。

ボタンを押下すると、以下のAASが設定されているPrefab（`music0, music1`）を生成する処理が走ります。これらのPrefabには`Cri Atom Source For Asset`がアタッチされており、生成された瞬間に設定されているキューが再生されます。このキューは、Deloy Typeが「Addressable」に設定されている`CueSheet_0.acb`というキューシートに含まれているものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/110a2fb1-8219-ae34-cc1f-300b90a6d309.png)

<br>

:::note

**`Cri Atom Source For Asset`ってなに？**

**Asset Support Add-on**の利用に合わせて使用するコンポーネントです。
従来の**CriAtomSource**と同様に、ADXによるサウンド再生を行いますが、再生するキューの指定方法が異なります。具体的には、**ACBアセット**と**キューID**を直接指定して音声再生を行います。

:::


<br>

サンプルはこの他にも、CRI ADXが兼ね備えている機能について紹介しているものが多くあります。時間があるときや、必要になった時、覗きにいくのが良いでしょう。

<br>

# まとめ

本記事では、CRIWAREの**CRI Addressables**を中心に、他のシステムや、扱うファイル形式の特徴などを確認しました。ゲーム開発において、サウンドの管理は非常に重要ですが、慣れていないと大変てこずる部分となります。CRI社は、少しでもゲーム開発におけるサウンドや映像などのリソース管理にかかる工数を簡略化して、使う側が本当に注力したいところに時間をかけられるような製品を提供してくれています。

是非この機会にCRI触ったことがある方もない方もプロジェクトでCRI Addressablesを組み合わせて開発を進めてみてください！ちなみにCRI社からは別にお金などは頂いていません！ただの布教記事でした！