448 Views
March 17, 25
スライド概要
ADX/ADX LEを用いたインタラクティブミュージックの実装において、一見コーディングが必要そうに見える実装内容も、オーサリングツールであるAtom Craftの中で実現できることがあります。
このスライドでは、セレクターラベル および アクショントラックを活用したAtom Craft内での演出の実現について説明します。
ADX/ADX LE勉強会 Vol.2 パズルゲームもグルーヴィーにしよう! Drop 'n' Fill!のオーディオの実装解剖 株式会社CRI・ミドルウェア <東証グロース市場:3698> 開発本部 第1開発部 有働 篤人 2025年3月12日 © CRI Middleware Co., Ltd. ※文中の社名、商品名などは各社の商標または登録商標である場合があります。
自己紹介 • 有働 篤人 ([email protected]) • CRIWAREツール(CraftやProfiler)担当 • C/C++/C#/Python/PHP • 趣味でインディーゲーム制作もしている • Exploding Cable Productions • 今回は制作したゲームでの音楽演出におけるADX LEの使い方を紹介 Steam Store Page QR code
「ゲーム内容に合わせて音楽を変化させたい!」 最近のゲームではよくある要望
セレクターラベル & アクショントラック活用術 ゲームコードからAtomCraftへ。AtomCraft中級~上級者への道
実装できるようになること • ゲームが進んだ時・有利な時にBGMの楽器が増える • ポーズ時にBGMを止める・レジューム時にBGMが戻ってくる • プレイヤーがアクションを起こしたときだけ鳴る 裏メロを実装する • BGM変化に裏メロが追従する
実装できるようになること • ゲームが進んだ時・有利な時にBGMの楽器が増える • ポーズ時にBGMを止める・レジューム時にBGMが戻ってくる • プレイヤーがアクションを起こしたときだけ鳴る 裏メロを実装する • BGM変化に裏メロが追従する
セレクターによるトラック遷移 デモを見たことのある方もいらっしゃるかも?
縦遷移を実現する機能 • セレクターによるトラック遷移キューを用意 • ビート同期トラックを用意、ラベルは指定しない • あとはゲームからセレクターを設定する
実装できるようになること • ゲームが進んだ時・有利な時にBGMの楽器が増える • ポーズ時にBGMを止める・レジューム時にBGMが戻ってくる • プレイヤーがアクションを起こしたときだけ鳴る 裏メロを実装する • BGM変化に裏メロが追従する
とりあえずAISACを使ってみる • ピッチとボリュームを一度に下げて、レコードを止めたような音にできる
どうやってAISACをコントロールする? 演出を数値に落とし込んだプログラマがまず考えそうなこととは?
このようにゲーム側のコードで管理できなくもないが… …これだと演出がゲームのコードに埋め込まれてしまった つまり、サウンドデザイナーが調整しづらい場所ができた 倍速にしたいだけで、ゲームのコード全体がビルドし直しに……
アクショントラックの活用
キュー ≠ 音を鳴らす指示
キュー = 音に対する操作全般
「単体では音が鳴らないキューがあっても良い」 これを覚えるとADXの活用幅が広がります。
他のキューに影響するキューを作れる!! →アクショントラック&リージョン
アクショントラックの作り方
他のキューに影響するキューの作り方。 AISAC 2の目標値を1.0とし、2/秒の速度で動かす設定の一例。 例えば、アクショントラックのリージョンが実行されたとき、0.5 秒で 0→1になる指示を出せる!
キューを「再生」すると「音が変化する」一例 アクショントラックだけの:キュー一覧 • PauseBGMStop • MainBGMがテープストップ • Pauseキューの音量UP • ResumeBGMResume • MainBGMがテープレジューム • Pauseキューの音量DOWN、キューのストップ • GameOverBGMStop • MainBGMがPause時より遅くテープストップ • 目標値まで遅くなったら、MainBGMキューを自動で停止
実装できるようになること • ゲームが進んだ時・有利な時にBGMの楽器が増える • ポーズ時にBGMを止める・レジューム時にBGMが戻ってくる • プレイヤーがアクションを起こしたときだけ鳴る 裏メロを実装する • BGM変化に裏メロが追従する
ひとまず裏メロトラックを追加 メインのBGMはセレクターによるトラック遷移をしているため、 単純にBGMキューに裏メロトラックを配置できない。(アクショントラックもダメ…) そのため、別キューとして実装し、同時にPrepare → Resumeを実行する。 (マテリアルのストリーミングタイプの不一致に注意!)
裏メロキューにビート同期トラックを設定 ビート同期トラックに、ラベルとして「MovementBeatSyncLabel」を指定したトラックを作り、このコールバックを受ける。 コールバック発火回数 = 裏メロの音の回数となるように組んだので、 これをゲーム側で数えて、アクションキューでボリュームによってON/OFF制御する ONのアクションキューはできるだけ早く OFFのアクションキューは遅めにして突然音が切れた印象を避ける
注意: 同じビート同期ラベルを指定せよ! これら2つのキューをタイミングを合わせて止めたいとき、 両方のキューに同じビート同期ラベルのトラックを用意した上で、 そのラベルをアクショントラックのターゲットビート同期ラベルに指定しないと、 アクショントラックの実行がズレる恐れがあるので注意!! (理由: この設定がない場合、一番上のビート同期トラックに同期してアクションが発生するから。) 各アクショントラックが同じラベルを指し、かつそのラベルがターゲットキューそれぞれに存在することを確認!!
完成品デモ • MainBGM • セレクターによるトラック遷移キュー • BGM_Accompaniment • 裏メロキュー • Accomp_On / Accomp_Off • BGM_Accompanimentの音量操作 • ゲームはこのキューでON/OFF操作する • GameOverBGMStop • MainBGM/BGM_Accompaniment 両方を巻き込んで止まってくれる • MainBGMのセレクター遷移も問題なく行えている
まとめ • アクショントラックを使用すると強力な演出をプログラム外から構築可能 • ただし、ビート同期トラックを使用する場合はその仕様に注意 • キューは必ずしも音を鳴らすだけのものではない