Asobu Talks 3
インディーゲームクリエイター向け
ゲームのサウンドの重要性
The importance of audio in indie games
Takaaki Ichijo
Head-High Co., Ltd.
2021/3/25
自己紹介:一條貴彰 Takaaki Ichijo
代表作: 「Back in 1995」 PS4 / Switch / Xbox One等
開発中:「デモリッション ロボッツ K.K.」
趣味:国産クラフトビールを飲みまくる
ゲーム作家 / 株式会社ヘッドハイ 代表取締役
株式会社ヘッドハイ
• ゲーム開発者向けツール・サービス向けのDevRel
• Google Indie Games Festival (Japan) のサポート
• iGi indie Game incubator 運営
• インディーゲーム開発者向けメディア
• https://indiegamesjp.dev/
• Twitter @indiegamesjpdev
 
きょうの話
• 対象者
• 個人・小規模ゲーム開発者
• サウンド実装はなぜ重要なのか
• デジタルサウンドの基礎知識
• ゲームにおけるサウンド処理実装で考慮すべきこと
• ゲーム開発者が作らなくてはならないサウンド機能とは
• サウンドツールを活用する
• 「CRI ADX2」の紹介
• 機能と特徴、利用例
海外で使われているツールの事例:RT Game Audioのプレゼン
https://www.youtube.com/watch?v=gUGS3z05_Fk
サウンド実装はなぜ重要なのか
“ ”
サウンド処理は
「鳴らす」「止める」ができればヨシ!
最後に実装します!
危険!!!
サウンドを適当にやって起きてしまうマズいこと
• えもいわれぬ不快感
• 耳に引っかかる効果音
• セリフが聞こえない
• 突然でかい音が鳴る・連続で鳴る
• モバイルゲームを囲む厳しい状況
• サウンドドライバが変なAndroid端末が多い
• 性能がバラバラ
• 画面をタップしてから音が鳴るまでの性能(レイテンシ)
• メモリ容量
なぜ早期のサウンド実装が重要なのか
• (前述の理由により)トラブルになりやすい
• 端末実機でしっかりチェックしておきたい
• データ量が多い
• 楽曲が多かったりフルボイスだと、テクスチャよりサイズが大きいことも
• アクション要素があるゲームでは、同時に鳴らす数も多い
• 実装にさまざまなコツがある
• ちょっとしたミスで不快な音につながってしまう
サウンドの開発で目指したいこと
• ボイス:声優さんの声の魅力をつぶさない
• BGM:場面に合った、作曲家の意図どおりの鳴り方を目指したい
• 効果音:耳に心地よい演出 / ゲームプレイを阻害しない
• 持論:サウンドは、ビジュアル以上に「プレイヤーの無意識」に働く
• 気持ちのいい音が鳴っているとプレイヤーは「気が付かない」
• しかし気持ち悪い音は「めっちゃ気になる」
デジタルサウンドの基礎知識
デジタルサウンドとは?
• 自然界の音(アナログ)→データ化(デジタル)へ
• アナログ信号をデジタルに変換
• 0と1で表現できる世界にする
自然界のアナログ波形をデジタルデータに変換
3つの観点からデジタル変換処理されている
• 標本化(サンプリングレート)
• 「44.1kHz (44,100Hz)」は、1秒に44,100回アナログ信号を計測したということ
• 量子化(ビットレート)
• 「16bit」は、1回の計測結果を65,536段階で表現したということ
• チャンネル数
• 2ch (ステレオ)
• 5.1ch
デジタル変換における設定の指針
• サンプリングレート
• 48,000Hz: 映像業界で使われている
• 44,100Hz: CD音質。ほとんどはこれ。曲やカットシーンボイス等。音楽業界由来
• 22,050Hz:雑にしても気にならない効果音向け 効果音、環境音など重要でない音
• 11,025Hz:ほぼ使わない
• ビットレート
• 16bit: 通常設定(人間の耳の解像度としては十分)
• 24bit: ハイクラスな音源、立体音響向け
ゲームの現場では PCM 44.1kHz/16-bit or 48kHz/16-bit 形式
デシベル(dB)について
• 「音の強さ」を示す単位
• もとは空気圧、その単位はPa(パスカル)
• Paだと最小値と最大値で100万倍ぐらい数値が違うので、対数でプロットしたのがdB
• 10dB:呼吸や服のこすれ
• 40dB:図書館や住宅街
• 60dB:会話音
• 80dB:電車内、電話のベル
• 100dB:パチンコ店
• 130dB:飛行機の轟音
デジタル信号処理(DSP)
• Digital Signal Processing
• 音声データをデジタル的に加工して変化させる
• 音量を加工すると距離を表現できる
• エコーをかけると広い空間で鳴ってるように聞こえる
• 事前処理
• その波形データを再生するだけ
• 加工した分のデータが必要
• リアルタイム処理
• 1種類のデータだけで済む
• 再生時にCPUを使う
ゲームにおけるサウンド処理実装で考慮すべきこと
考慮すべき3大要素
再生レイテンシー:音をならす命令を出してから鳴るまでのタイムラグ
CPU
負荷
再生
レイテンシー
メモリ使
用量
端末リソースは限られている
• CPU負荷を抑える
 →メモリや再生レイテンシーが犠牲になる
• 再生レイテンシーを低く抑える
 →CPU負荷やメモリ使用量が犠牲になる
音の特性を把握して、シチュエーションごとに調整を行う
CPU
ゲーム内にある音をざっくり分類して考える
• SE (SFX)
• メニュー内SE: ボタンの音とか
• ゲーム内SE: 足音、発砲音
• ジングル:ちょっと長めの効果音
• 環境音:森の鳥のさえずり、町のがやがや
• BGM
• ボイス
ゲーム内に存在する音の種類の例
音の長さ 再生
優先度
同時
再生数
データの
数
圧縮
品質
レイテンシ 読込と破棄
GameSE 短い 低い 多い 多い 低い 高い 本編ゲーム開始時
に読込
MenuSE 超短い 高い 1音 少ない 低い 最高 ゲーム起動時に読
込
BGM 長い 最高 2音(フェード) 多い 高い 低い ステージごとに 読
込・破棄
環境音 長い 高い 1音 中程度 中程度 低い ステージごとに 読
込・破棄
ジングル 中程度 高い 1音 中程度 中程度 低い ステージごとに 読
込・破棄
ボイス 中程度 高い 2-3音 中程度 中~高 低い 必要なタイミングで
読込・破棄
ゲームの特性によって大事にしたい音は変わる
•格闘ゲーム
• ヒット音の再生レイテンシが大事
•恋愛アドベンチャーゲーム
• ボイスの品質が大事
ケース:フェードの実装
クロスフェードの実装を考える
• 「フェードイン」と「フェードアウト」を組み合わせて曲を切り替える
• 音を鳴らすインスタンスが2つ必要
• 片方は音量をだんだん下げて、もう片方は上げる
• はたして、それだけか?
クロスフェードの難しさ①
• フェード処理を直線的に行うと、一時的に全体の音量が下がる
• 三角関数をフェードカーブに用いると音量が下がらない
音量 音量
トータルの音量
BGM1
BGM2
BGM1
BGM2
• https://speakerdeck.com/cova8bitdots/unity-volumeeffect より引用
クロスフェードの難しさ②
• 処理の中断を考慮しなくてはならない
• ゲームのポーズ
• シーンの切り替わり
• BGMが変わる境界をプレイヤーが行ったり来たり
BGMが止まってしまう可能性がある!
ケース:大量ボイスデータ管理
よくありそうなボイス管理テーブル.xls
たぶん、こういうエクセルテーブルを作ると思います

理想
ボイス収録できたやで!
データ納品ドーン!
連番ファイルの中身はExcelで管理しつつ、プ
ログラマーに鳴らしてもらおう
なるほど!
このボイスの番号はこれか!
再生システムに入れたで!
(^)(^)ミ
ボイスリスト.xlsx
ファイル名変わりました
ボイス入ってるフォルダ変わります
( )( )ミ
ワイはどこからどれを鳴らせばい
いんや....
Excelの方が古くて指定を間違えてました
ボイスリスト(2)_最新版_20190129_高橋修正(再提出).xlsx
ボイスリスト_最終_201901マージ_佐藤作業分.xlsx
現実
他にも実装しないといけない機能は多数!
• 非同期なファイルロード
• 再生の優先度管理
• 物理挙動をトリガーにして音を鳴らす
• 物体が挟まったときなどに連続再生されないように制御する
• 近似フレーム内で二度再生リクエストが入らないように制御する(音量がすごいことになる)
• ランダム再生
• 再生開始位置のランダム
• ピッチ(音程)のランダム
• 複数音ファイルからランダム(同じ音を繰り返さない処理も)
• 再生完了コールバック
• 音が最後まで再生し終わったらプログラムへ通知する
ツールを活用しよう
CRI ADX2について
サウンドミドルウェアCRI ADX2とは
• 音にまつわる演出が組み込まれたライブラリ&ツール
• DAWツールではない
• 音に制御情報を埋め込んで、ゲーム実行中に処理
• イントロ付きループ再生
• ランダマイズやカテゴリ分けなど、多彩なサウンド再生制御
• 独自の音声圧縮「HCA」
• 大量に音が鳴る場面でCPU負荷を軽減
• Androidで音声再生の遅延を低減
• インディー向け無償エディション「ADX2 LE」
• https://game.criware.jp/products/adx2-le
日本のインディータイトルでの利用実績例
朝はどこ モン娘ぐらでぃえーた
魔砲少女のメイガスフィア 星樹の機神 ユニティユニオンズ
ADX2が提供できること①
• サウンド演出実装の省力化
• ゲームで頻出の演出がライブラリに内蔵されている
• 専用ツールで「音に制御情報を埋め込む」
• フェード ダッキング カテゴライズ 各種エフェクト
• サウンド演出実装の効率化
• 専用ツールで様々な音の組み合わせをテストできる
• BGMを鳴らし、ボイスを2本鳴らしつつ、効果音を入れてちゃんと聞こえるか?
オーサリングツール「CRI Atom Craft」
音に制御情報を埋め込むツール
mac / windowsで動作
サーバー
これまでのサウンド実装フロー
固めたファイル
コーディングやノード
・音素材を指定して再生
・さまざまなサウンド制御実装
・再生数制御
・フェード
・ダッキング
ゲーム開発環境
AudioClip
(Wav, Ogg)
AudioClip
(Wav, Ogg)
音素材
(Wav, Ogg)
AudioClip
(Wav, Ogg)
AudioClip
(Wav, Ogg)
WAV インポート
ビルド
40
実行ファイル
サーバー
ADX2の
パックファイル
ADX2を加えたワークフロー
ゲーム開発環境
+ ADX2 plugin
g)
av, Ogg)
WAV
ビルド
実行ファイル
CRI Atom Craft
ツール操作:
再生単位「キュー」を作り、
鳴り方をパラメータで指定。
・タグ付け
・フェードイン
・再生数の制限
ADX2の
パックファイル
ADX2の
パックファイル
インポート ビルド
端末
スクリプト:
・キューを指定して再生
・サウンド制御を指定して再
生
ADX2が提供できること②
• ハードウェアやOSへの最適化
• Androidの遅延対策モード
• VR機器・ゲーム機対応
• 強力なオーディオプロファイラーによるチェック
• 音が意図通りに鳴っているか目で確認できる
専用のオーディオプロファイラーによる分析
ADX2が提供できること③
• 配信データの総量を減らせる
• 独自圧縮でボイスデータを小さく
• 効果音のリアルタイム加工で、バリエーションを増やしつつ容量削減
• 短い効果音の時系列制御+ランダマイズ
• ゲームエンジンと別のサウンドツールで作業できる
• サウンド担当に任せられる部分が増える
• ボリューム調整等がエンジンを触らない人も作業できる
• ゲームエンジンが変わっても設定を引き継ぐことができる
足音の演出例:タイムライン
同じ素材を
時系列で鳴らす
音量をだんだん下げる
普通は「効果音の再生時間分」のデータが必要
ADX2では「短い効果音を時系列で制御」ができる=データ容量がとても小さい!
例「ボリューム調整」等の作業を専用ツールで設定
• セリフデータ一覧を出して、
 プレビュー再生しながらボリューム調整、 
 その後プログラマーが実装
• BGMとの組み合わせ再生テストも
 ツール上で可能
・ 楽曲・効果音のボリューム調整込みで
 サウンド担当に任せられる
ADX2の学び方
• Qiita: ADX2の導入
• Unityのサウンド機能をADX2で強化する
• https://qiita.com/Takaaki_Ichijo/items/16e6501fc07f5b3b3377
• ADX2 for UE4の導入で、一歩上のサウンド表現を
• https://qiita.com/SigRem/items/4250925f6d66a4fd287a
• その他Qiitaでは、他アセットとの連動などを紹介
• 公式チュートリアル
• https://game.criware.jp/learn/tutorial/
公式チュートリアル
入門・初級・中級のステップアップ
更に詳しいデモと実装
書籍のデモアプリ
• モバイルゲーム想定
• カードをタップでモンスターを倒せ!
• タイトルの理由:「攻撃を受ける」の実装が面倒だった
会話シーンに含まれるサウンド演出
• BGMダッキング
• セリフが流れたとき、BGMのボリュームを自動的に落とす
処理
• 音声データへテキストデータ埋め込み
• テキストウィンドウに表示されているセリフ文字は、音声
データ側に埋め込んだ文字を表示
• 音声データへ表情変更タイミングの埋め込み
• キャラクターの表情切り替わりタイミングは音声データ側に
埋め込んだタグ付きタイミング情報を利用
ダンジョンシーンに含まれる演出①
• 攻撃セリフのランダマイズ
• 下部のカード絵柄をタップすると攻撃
攻撃時の掛け声は複数の音声データからランダムに選ば
れるデータを指定
• 攻撃セリフのキャラクターごとの切り替え
• 2キャラクターごとに掛け声は異なりますが、再生制御の
ソースコードは同一、データの差し替えのみで対応
• 攻撃ヒット音のランダムパンニング
• ステレオ再生環境では、「バシッ」という攻撃ヒット音が左右
方向からランダムに聞こえる
ダンジョンシーンに含まれる演出②
• 攻撃の威力に合わせて音色を変える
• ゲーム内のヒットポイントと連動して音色が変化
• 効果音のバリエーションを増やす
• 奥に進むときの「タッタッタ」という足音は、短い「タッ」という
音声データのみで構成。
データ容量を抑えつつ、バリエーションを増やす。
• ゲームの場面が変わった時のエフェクト適用
• ダンジョンが「洞窟」の時は、効果音やセリフに
リバーブとエコーがかかる
• ゲームの展開に合わせたBGM の展開
• 敵を倒したタイミングで、BGM の展開が変化
デモゲームの動画
https://www.youtube.com/watch?v=P06xnd8gyi8
インタラクティブミュージック
• 「ゲームの展開」に合わせて楽曲が変化する
• 楽曲のインタラクティブ性を高める
• 「縦の遷移(Vertical Remixing)」
• 複数トラックの同期再生で構成された楽曲
• 各トラックのボリュームを変化させることで音が変わる
• 「横の遷移(Horizontal Resequencing)」
• 数小節単位で別れた楽曲をなめらかにつないでいく
• ループ再生させておき、別の曲にタイミングよく変化させることで音が変わる
ツールデモ(インタラクティブミュージック)の動画
https://www.youtube.com/watch?v=pj2vVip44H4
まとめ

インディーゲームクリエイター向け サウンド実装の重要性