
Graffity ARエンタメ ハッカソン vol.3 - サーバーエンジニアがサウンドオーサリングツールADX LEを触ってみた
みなさんこんにちは、Graffityのサーバーサイドエンジニアの松本です。
この度、社内でハッカソンを実施しよう、となりました。
その名も、Graffity Hack Challenge!
社内メンバーが開発、そして執筆してくれた内容を順番に発表していきます。
チーム3つ目は、cova, 自分によるSamplarです!
・・・
テーマとその深堀り
今回我々はAR Samplerにチャレンジしました。
機能要件としては以下になります。
- あらかじめARオブジェクトとして認識した物体をカメラ越しにタップすると、その物体にアサインされている音が鳴らせる
- 置いてある鈴をタップすると動物の鳴き声が鳴るみたいなイメージ
今回はその中で得られた知見を書いていきます。
学び
サウンドオーサリングツールであるCRI Atom Craftをじっくり触れたのがとても良かったです。

サウンドオーサリングツールを使うことによって、ゲーム開発において主に以下のようなことが便利になります。
・膨大な音声データの効率的な管理・調整
・フェード処理や再生制限、その他オートメーションの増減など、サウンド再生において必要となる処理がビルトイン済み
・実端末を触りながらリアルタイムにパラメータ変更可能
さらに、導入するだけで内部的にはこんな嬉しいことも
・独自の圧縮技術によるファイル容量の削減(高圧縮率なのに高音質、更にCPU負荷を低減)
・Android端末におけるサウンドの再生遅延を低減
・音声データを暗号化し、セキュリティを高めることができる
今まで自分がSE, BGMなどを内製してはいましたが、ゲーム内での再生はUnityエンジニアに一任していたのもあり、その部分を携わったことでかなりサウンドの理解が進みました。
今回は、自分のようにDTMや曲制作はやったことはあるけど、オーサリングツールの経験はないよって人のために、簡単に概念の解説していきます。
CRI Atom Craftの簡単な解説
音源はマテリアルルートフォルダに置く

Cue(画像オレンジの丸)がSEを司っていて、それらをまとめているのがCueSheet

Queを作成、選択し、出現するタイムラインにマテリアルルートフォルダから音源をドラッグ&ドロップすると、ポリフォニックというトラックに音源が当てはまる。

- Blockを使うことによりSEの横の遷移(時間軸)を効率化することができる。
- ブロック単位で再生順序を入れ替え、ループの設定などなど。。。
- ブロックはタイムラインに現れるので、そこでまとめるポリフォニックを確認、選択する。

ブロックはキューから作れて、インスペクタで詳細の確認ができる。

- トリガー(実際にUnityの入力値)に応じて、イベント(パラメタなどの細かい値)操作をするのはアイザックというもの。
- キューの中の各トラックに仕込めて、横がプログラムからもらった値を判定する閾値、縦が各々が設定したパラメタとなっている。
- これを使うことによりフェードイン、フェードアウト、音源の追加などといったインタラクティブなサウンド調整が可能となっている(これを利用することでインタラクティブミュージックができる)。

ここまでが今回開発した中で学んだ内容です!まだまだ最低限のことしかできていないので、とても研究のしがいがあります。
チーム開発での利用方法
本当に一人っきりの開発なら特に問題はないのですが、チームで開発、特に複数人でAtomCraftのプロジェクトを管理する場合はひと工夫必要です.
エンジニアさん曰く、昔はノウハウが少なくてGoogleDrive にプロジェクト丸っとアップして必要なファイルを落として〜という感じだったのですが、最近ではちゃんとGitを使って管理ができるそうです.
AtomCraft とGit
基本的にバイナリデータ等、重いデータはGitでの管理は苦手な部類です。
そこでGitで重いデータを扱えるようにするため GitLFS (Git Large File System) の導入が必要です.
Gitリポジトリを作った後
$ git lfs install
とすることでGitLFSが導入できます.
その後、AtomCraft で生じるバイナリファイルで
git lfs track "**.wav"
とすることでAtomCraft上で利用する音源をGit上で管理することができます
また、Gitで全部のファイルを管理すると複数ユーザー間でコンフリクト祭りになってしまうため、予め .gitignoreファイルを作り
Gitの管理対象外にするファイルの設定が必要です
具体的には
*.user_settings
*.atmuser
PROJECT_NAME_Cache/
PROJECT_NAME_Backup/
を追記しておきましょう。
つまり PROJECT_NAME.atmcglobal, PROJECT_NAME.atmcproject, WorkUnits/ はGitで共有必須なファイルであるため、これらはGit上で管理すると複数人で同一プロジェクトの編集が行えます
Git 管理の注意点
AtomCraft をGit管理する準備ができましたが、いざ実際に行う時にはいくつか注意事項があります。
1. AtomCraft はちゃんと保存して終了する
2. 終了した後Git上で差分がないかチェックする
基本的なことだろとツッコミもあるかもしれませんが、特にインタラクティブミュージックを行う時に設定ファイルのコミット漏れのせいでpullしたらプロジェクトファイルが壊れているなんて問題が発生します。
例えば先ほどのAisacパラメータなどは PROJECT_NAME.atmcglobal というXMLファイル上に設定が保存されますが、AtomCraft起動中にちゃんと保存しないとGit上で差分が出てこないため、容易にコミット漏れが発生します。
よって、基本的な話ではありますが、コミットすべきファイルがちゃんと足りているかの確認はチーム開発では非常に大事になります。
・・・
Graffityでは「最短3か月で“心を動かす”ARエンタメ」をコンセプトに、AR技術に特化したエンタメの企画・開発と、DX化を支援するスタジオ「Graffity AR Studio」を運営しております。
これまで累計23万ダウンロードを突破したARシューティングバトル「ペチャバト」や、グローバルに展開しているARシューティングバトル「Leap Trigger」など、ARゲームを開発・運営しており、これらの知見を活かし、スピード感を持ってARを活用した“心動かす”エンタメの企画から運用までを、ワンストップでサポートいたします。
スピード感を持って仮説検証を通してAR体験をブラッシュアップしたい企業様はぜひ「Graffity AR Studio」へお問い合わせください。
一緒にARエンタメで世界を目指していく仲間も募集中!