あんスタ！！MusicにおけるCRI ADX2活用事例（前編）


# はじめに

Happy Elements株式会社 カカリアスタジオ Advent Calendar 2020 の 9日目 の記事です。

この記事では「あんさんぶるスターズ！！Music」におけるCRI ADX2の活用事例についてご紹介します。
本日は前編として、CRI ADX2の各種機能の活用例についてご紹介します。

# CRI ADX2とは

<img title='criware_logo_seminar.png' alt='criware_logo_seminar' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97014/9c67b650-1028-b5b2-629c-a6b7eaee85ee.png' width="200" data-meta='{"width":1000,"height":1000}'>

CRI ADX2は、株式会社CRIミドルウェアさんが提供しているミドルウェア群の中の一つである**統合型サウンドミドルウェア**です。

公式サイト：https://game.criware.jp/products/adx2/

## CRI ADX2の特徴

ただサウンドを再生するだけであれば、Unity単体でも実装は可能です。しかし、CRI ADX2には以下のような特徴があります。

- **専用オーサリングソフト**（CRI Atom Craft）による充実した設定機能
- 専用コーデックによる**高品質な圧縮**、ループ再生やストリーミング再生などの対応
- **低遅延**な音声再生機能

独自でこれらを実現しようと思うとかなりの工数が掛かることが予想されます。そこをまるごと全て外部のミドルウェアに任せることができるのは大きな魅力だと言えます。

また、**モバイルゲームにおける採用実績が豊富**な事もあり、安定性・サポートの品質にも一定以上の信頼があると言えます。
これらの利点を理由に「あんスタ！！Music」でも採用する事になりました。


# あんスタ！！Musicにおける活用事例

「あんスタ！！Music」において、CRI ADX2の機能をどのように活用しているかの事例をご紹介します。

## ノーツSEの低遅延再生

<img title='image.png' alt='image' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97014/a53e8617-92f8-1e6d-a085-833c4f33097a.png' width="600" data-meta='{"width":1024,"height":580}'>

リズムゲームではノーツをタップしたタイミングで効果音が再生されますが、音声の再生処理には一定の遅延を伴います。また、実装方法によっては遅延の幅は大きくなってしまいます。

音声遅延の幅が大きいほどBGMとのズレが大きくなり、**リズムゲームの爽快感が損なわれてしまいます**。特にAndroid端末は機種によって特性の違いが大きく、それら全てに適切な対応を行うことは難しいです。

そこで、「あんスタ！！Music」ではノーツSEの再生にCRI ADX2の[**Android低遅延再生機能**](https://game.criware.jp/manual/unity_plugin/latest/contents/cri4u_tgtspc_android_atom_law_latency_play.html)を用いています。
端末に応じた最適化の部分を全てミドルウェアに任せることができるため、他の部分の開発に集中することができました。

## BGMのストリーム再生

「あんスタ！！Music」では特定の楽曲においてプレイヤーが選択したキャラクター達が歌唱を行う「**歌い分け機能**」が存在します。
この機能では**BGMに加えて歌い分け用のキャラクター歌唱音源×5人分の音声を同時に再生**しています。
これらの音声データを全てメモリ上に乗せてしまうとそれだけで30MBほどメモリを消費してしまうことになります。
そこで、BGMについてはストリーム再生を用いることでメモリ消費量を抑えています。

- オンメモリ再生を用いた場合

<img title='image.png' alt='image' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97014/159ba067-fef8-d09e-596e-adac5ab70a27.png' width="500" data-meta='{"width":836,"height":588}'>

- ストリーム再生を用いた場合

<img title='image.png' alt='image' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97014/eaf9d234-eecc-bae3-d174-3bad9d16542d.png' width="500" data-meta='{"width":834,"height":590}'>

このように、ストリーム再生の場合にメモリ使用量が抑えられていることが分かります。

## 楽曲選択画面でのプレビュー再生

楽曲選択画面では、選択した楽曲のサビ付近がプレビューとして再生されるようになっています。

<img title='image.png' alt='image' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97014/96665262-b3fe-21aa-c5a1-98e8b88aa2c9.png' width="600" data-meta='{"width":1560,"height":866}'>

このプレビュー再生の位置の指定は[シーケンスマーカー](https://game.criware.jp/manual/adx2_tool/latest/criatom_tools_atomcraft_sequence_marker.html)を用いています。
また、フェードアウトは[トラックオートメーション](https://game.criware.jp/manual/adx2_tool/latest/criatom_tools_atomcraft_track_automation.html)によって制御しています。

<img title='image.png' alt='image' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97014/c284ddc4-c950-75c8-a151-47e4775595d2.png' width="1382" data-meta='{"width":1382,"height":652}'>

このようにプレビュー範囲の切り出しを付属の**専用オーサリングソフト上で直感的に設定**でき、設定は音源データに埋め込まれ再生時に自動で適用されるためプログラム側での制御も必要無く、手軽にプレビュー再生が実現可能です。
また、プレビュー再生用の音源を別に用意する必要が無いため、データ量も削減できます。

# その他良かった点など

## 試用段階から製品版と同等の物が無期限で使える

「あんスタ！！Music」の開発には最初期から数えるとおおよそ2年以上掛かったのですが、開発の早い段階から試用を申し込み、**製品版と同等の物**でアプリへの組み込み検証を行うことができました。
使用料金はアプリがリリースしてからの発生[^1]となるので、**料金を気にせず検証を行うことができた**のはとても良かった点でした。

[^1]: 参考：[CRI ADX2の導入フロー・料金](https://game.criware.jp/products/adx2/#flow)

## オーサリングソフトがMac対応

付属の専用オーサリングソフト「CRI AtomCraft」が以前はWindows専用だったのですが、V3からはWindows・Mac両対応となりました。
弊スタジオでは標準開発機としてMacを採用しているため、Macに対応したのはとても助かりました。

# 困った点など

## 運用の自動化が難しい

オーサリングソフトを用いて設定が行えるのは便利なのですが、一方で**設定の自動化を行うのはやや複雑で難しい**です。

個々に細かい設定の必要が無く大量に数が存在するボイスデータなどは、設定とビルドを自動化したい所です。
自動化のための方法は用意されていて、設定をCSVからインポートし、コマンドライン実行でデータ追加とビルドが可能[^2]になっています。

[^2]: 参考：[CRI ADX2 Tools マニュアル: ガイド：CSVインポートとビルドの同時実行](https://game.criware.jp/manual/adx2_tool/latest/criatom_tools_criatomcraftc_import.html)

ただ、このCSVの仕様[^3]がなかなかに難解で、思い通りに自動化を行うのは少々しんどい物があります…。実際、「あんスタ！！Music」では未だ自動化ができておらず、追加の度にエンジニアがAtomCraftを起動し手動で設定〜ビルドまでを行っています。

[^3]: 参考：[CRI ADX2 Tools マニュアル: CSVのフォーマットについて](https://game.criware.jp/manual/adx2_tool/latest/criatom_tools_atomcraft_file_import_export_cuesheet_csv_format.html)

…と思っていたのですが、つい先日（2020/12/01）に自動化のための新機能「[Atom Craft ロボット](https://game.criware.jp/learn/tips/atomcraftrobot/)」という物が追加されていました！
こちらの導入は追々検証してみたいと思います。

# 前編まとめ

リズムゲームにおいて音声処理はとても大事かつ大変な部分ですが、CRI ADX2を用いることでこのように様々な問題を解決することができました。
ここで紹介した他にもたくさんの機能があり、ゲーム開発に大いに役立ってくれると思われます。

無償版の[CRI ADX2 LE](https://game.criware.jp/products/adx2-le/)もあり、導入のハードルはかなり低いので、音声処理の実装で困っているなら一度試してみると良いのでは無いでしょうか。

後編では、CRI ADX2をアプリに組み込むにあたって実装上工夫した点などをご紹介する予定です。

# メンバー募集

Happy Elements株式会社 カカリアスタジオでは、
いっしょに【熱狂的に愛されるコンテンツ】をつくっていただけるメンバーを大募集中です！

もし弊社にご興味持っていただけましたら、是非一度
下記採用サイトをご覧ください。
[Happy Elements株式会社 採用特設サイト](https://recruit.happyelements.co.jp/)