見出し画像

第11回/カテゴリを設定してみる

こんにちは。
G2 Studios サウンドチームのサキサキです。
今回は「カテゴリの設定」についてご紹介いたします。
CRI Atom Craftにはカテゴリの設定を前提とした数多くの機能が存在します。
本記事では、その入口とも言うべき「カテゴリを設定してボリュームの調整を行う」ところに焦点を当てたいと思います。それでは進めていきましょう。


※本記事内には、本来同意義として扱われる「音量」「ボリューム」「ボリューム値」といった言葉が多く使用されています。
混乱を避けるために、それぞれを次のように定義しようと思います。

<本記事内における言葉の定義>
 ・「音量」 ⇒実際に音を鳴らした時に耳で捉える音の大きさ
 ・「ボリューム」 ⇒CRI Atom Craftまたは開発ツール(※ここでは「Unity」)に
   おいて、音の大きさを数値化して表すために用意された属性
 ・「ボリューム値」 ⇒上記「ボリューム」に設定される値

■作業環境

本記事は以下の環境下での作業内容を記載いたします。
-----
<作業環境>
 Windows :Windows 10 Pro
 CRI SDK :criware_sdk_unity_v3_09_01_smartphone_ja
 Unity:2022.3.1f1
-----

■カテゴリとは

「カテゴリ」はCRI Atom Craft における全体設定項目の1つです(※公式では「オブジェクト」として定義されています)。
カテゴリを用いることでプロジェクト内に作成されたキューを任意のグループに分類することができます。

※ワンポイント豆知識
カテゴリの設定は任意であり、必須ではありません。
何らかの理由により、「あえて設定しない」こともサウンドデザインを行う上での選択肢の1つと言えます。

■カテゴリグループ

カテゴリをさらにグループ化させたものを「カテゴリグループ」と言います。
オブジェクトの作成順位は「カテゴリグループ >カテゴリ」となるため、カテゴリは必ず何かしらのカテゴリグループに属する形になります。

■カテゴリの重複設定

1つのキューに対して設定できるカテゴリの数は同一カテゴリグループ内では1つだけに限定されますが、カテゴリグループを複数作成すれば、各カテゴリグループから1つずつ最大で16個まで設定ができます。
そしてこの場合、キュー再生時の音量には設定している全てのカテゴリのボリューム値が反映される形になります。

※ワンポイント豆知識
キューに設定可能なカテゴリの最大数はデフォルトの設定では4個までに制限されています。
プロジェクトツリー上の「全体設定」オブジェクトにある「最大カテゴリ数」の項目から値の変更ができますので、必要に応じて調整を行いましょう。

■CRI Atom Craftでカテゴリを設定してみる

それでは、CRI Atom Craftでカテゴリを設定してみましょう。

作業用に2つのサンプル音源「Se_Battle_Gunshot.wav(バトル /銃声)」「Se_System_Decision.wav(システム /決定)」を用意しました。

※こちらは私が作成したものなので、商用でも何でも自由にご利用いただいて大丈夫です。

 ゴール条件は以下の通りとします。
-----
<ゴール条件>

-----
<ゴール条件>

  • カテゴリグループ「Main(メイン)」を作成し、その中にカテゴリ「Se(効果音)」を作成する

  • カテゴリグループ「Sub(サブ)」を作成し、その中に2つのカテゴリ「Battle(バトル)」「System(システム)」を作成する

  • サンプル音源「Se_Battle_Gunshot.wav」から音声データ「Se_Battle_Gunshot(※キューシート、キューは同名)」を作成し、2つのカテゴリ「Se」「Battle」を設定する

  • サンプル音源「Se_System_Decision.wav」から音声データ「Se_System_Decision(※キューシート、キューは同名)」を作成し、2つのカテゴリ「Se」「System」を設定する

  • 全3つのカテゴリについて各ボリューム値を変化させ、意図通りの音量で音声データが再生されるかを確認する(※詳細は下記)

⇒カテゴリ「Se」のボリューム値の変化に合わせて「Se_Battle_Gunshot」「Se_System_Decision」の音量が変化する

⇒カテゴリ「Battle」のボリューム値の変化に合わせて「Se_Battle_Gunshot」の音量は変化するが、「Se_System_Decision」の音量は変化しない

⇒カテゴリ「System」のボリューム値の変化に合わせて「Se_System_Decision」の音量は変化するが、「Se_Battle_Gunshot」の音量は変化しない

 -----
CRI Atom Craftを起動し、作業を始めるための準備を行います。
※キューシートやキューの作成など、基本的なサウンドデータの作成方法についてはこちら

<手順①>
・カテゴリグループ「Main(メイン)」を作成し、その中にカテゴリ「Se(効果音)」を作成する

全体設定にカテゴリグループとカテゴリを作成していきます。
プロジェクトツリー上の「全体設定/カテゴリ」の中を見ると、最初からカテゴリグループとカテゴリが各1つずつ用意され、それぞれに「CategoryGroup_0」「Category_0」と名称が付けられているのがわかります。
「CategoryGroup_0」を「Main」に名称変更、さらに「Category_0」を「Se」に名称変更します。
これで、1つ目のカテゴリグループとカテゴリの登録は完了です。

<手順②>
・カテゴリグループ「Sub(サブ)」を作成し、その中に2つのカテゴリ「Battle(バトル)」「System(システム)」を作成する

「全体設定/カテゴリ」を選択し、プロジェクトツリー上の左上に表示されたアイコン「カテゴリグループの作成」を押下します。
新たにカテゴリグループが作成されますので、名称を「Sub」とします。

<手順③>

カテゴリグループ「Sub」を選択し、プロジェクトツリー上の左上に表示されたアイコン「カテゴリの作成」を押下します。
新たにカテゴリが作成されますので、名称を「Battle」とします。

同様にしてカテゴリをもう一つ作成し、名称を「System」とします。これで、2つ目のカテゴリグループとカテゴリの登録は完了です。

<手順④>
・サンプル音源「Se_Battle_Gunshot.wav」から音声データ「Se_Battle_Gunshot(※キューシート、キューは同名)」を作成し、2つのカテゴリ「Se」「Battle」を設定する
・サンプル音源「Se_System_Decision.wav」から音声データ「Se_System_Decision(※キューシート、キューは同名)」を作成し、2つのカテゴリ「Se」「System」を設定する

マテリアルツリーにある該当マテリアル x2 をワークユニットツリーにドラッグ&ドロップし、キューシートとキューを作成します。

<手順⑤>

作成されたキューにカテゴリを設定していきます。

該当キューを選択してインスペクター上の「カテゴリ」項目を見ると、このタイミングでは値が空欄になっているのがわかります。
空欄箇所を押下すると「カテゴリの編集」ダイアログが開きますので、要件を満たす値にチェックを入れて「OK」ボタンを押下します。

これにより、各キューのインスペクター上の該当項目に、先ほどの値が反映されているのを確認できるかと思います。

<手順⑥>
・全3つのカテゴリについて、各ボリューム値を変化させて意図通りの音量で音声データが再生されるかを確認する(※詳細は下記)
 ⇒カテゴリ「Se」のボリューム値の変化に合わせて
 「Se_Battle_Gunshot」「Se_System_Decision」の音量が変化する

各カテゴリのボリューム値を変更して、再生音量の確認を行います。

プロジェクトツリー上の「全体設定/カテゴリ/Main/SE」を選択し、「ボリューム」項目の値を変更(※ここでは「0.50000」)します。
カテゴリのボリューム値は「0.00000 ~ 5.00000(※初期値&基準値は「1.00000」)」の浮動小数点型の数値で設定できます。

設定後、要件通りに音量が変化していれば、正しく設定されています。

<手順⑦>
⇒カテゴリ「Battle」のボリューム値の変化に合わせて「Se_Battle_Gunshot」の音量は変化するが、「Se_System_Decision」は変化しない

プロジェクトツリー上の「全体設定/カテゴリ/Sub/Battle」を選択し、「ボリューム」項目の値を変更(※ここでは「0.50000」)します。
設定後、要件通りに音量が変化していれば、正しく設定されています。
この時、音声データ「Se_Battle_Gunshot」については、手順⑥と⑦によるW効果、つまりボリューム値の変更が2重に掛かっています(※ボリューム値算出:0.50000 x 0.50000 = 0.25000)ので、注意しましょう。

<手順⑧>
⇒カテゴリ「System」のボリューム値の変化に合わせて「Se_System_Decision」の音量は変化するが、「Se_Battle_Gunshot」は変化しない

プロジェクトツリー上の「全体設定/カテゴリ/Sub/SE」を選択し、「ボリューム」項目の値を変更(※ここでは「0.50000」)します。
設定後、上記の要件通りに音量が変化していれば、正しく設定されています。
この時、対象の音声データ「Se_System_Decision」については、手順⑥と⑧によるW効果(※ボリューム値算出:0.50000 x 0.50000 = 0.25000)が掛かっていますので、注意しましょう。

ここまでで問題がなければ、CRI Atom Craftにおける作業は完了となります。

■実装における注意点

カテゴリ設定における注意点をいくつか挙げておきたいと思います。
-----

  • ACBファイルとACFファイルの関係性
    カテゴリを設定をすると、ビルド後に書き出されるACBファイルは、同ACFファイルに依存する関係性になります。
    ACBファイル内にあるカテゴリ(キューに設定されたカテゴリ)がACFファイル内(「全体設定/カテゴリ」)に存在しない場合、不整合となり正しく音が再生されないことがあります。
    登録するカテゴリに変更が入った際には再ビルドを行い、ACBとACFの両ファイルを更新するようにしましょう。

  • 必要最小限のカテゴリ設定
    リリース後の運用を必要とするゲームの場合、行き過ぎたカテゴリの重複設定はその複雑さから運用コストを引き上げる要因となりかねません。
    用意するカテゴリはゲーム要件を満たす最小限のものに留めるようにしましょう。

-----

■プログラム(Unity /C#)によるボリューム調整

ゲームアプリ内にあるオプション設定において、音量の調整機能が実装されているのをよく見かけます。
同様のものを実装する場合、CRI Atom Craftで登録したカテゴリのボリューム値をプログラム側で取得し、それらをオプション設定側の任意のプロパティに紐づけるのが最適です。
以下に簡単なサンプルコードを貼っておきます。

using UnityEngine;
using UnityEngine.UI;
using CriWare;

// サウンドオプションの管理クラス
public class SoundOptions : MonoBehaviour
{
// CRI Atom Craftで設定したカテゴリを定数として定義(※カテゴリグループの指定は不要)
// カテゴリ「Bgm」
private const string bgmCategoryName = "Bgm";
// カテゴリ「Se」
private const string seCategoryName = "Se";

// UIスライダー
[SerializeField]
private Slider bgmSlider, seSlider;

// 初回ロード時にカテゴリのボリューム値を取得するメソッド
private void Awake()
{
// 各カテゴリのボリューム値をUIスライダーの値に反映
bgmSlider.value = CriAtom.GetCategoryVolume(bgmCategoryName);
seSlider.value = CriAtom.GetCategoryVolume(seCategoryName);
}

// カテゴリのボリューム値を更新するメソッド
public void updateCategoryVolume()
{
// 各UIスライダーの値をカテゴリのボリューム値に反映
bgmSlider.onValueChanged.AddListener((value) => { CriAtom.SetCategoryVolume(bgmCategoryName, value); });
seSlider.onValueChanged.AddListener((value) => { CriAtom.SetCategoryVolume(seCategoryName, value); });
}
}

ここで大事なのは、静的なメンバ関数である「static float GetCategoryVolume (string name)」と「static void SetCategoryVolume ( string name ,float volume )」です。
これらをUIのスライダー機能に紐づけて、スライダーの位置変更時にプログラムでメソッドを呼び出すといった要領になります。

※ワンポイント豆知識
本記事内にて指定のCRI SDKを利用した場合、プログラム(Unity /C#)側ではCRI Atom Craft上で設定した値がそのまま取得されることを確認しています(※「浮動小数点型:float」で出力指定)。

■まとめ

「カテゴリの設定」は使用頻度が非常に高く、CRI Atom Craftにおける主力機能の1つと言えます。
あるとないとでは受ける恩恵に大きく差が出てきますので、確実に押さえるようにしましょう。
次回以降、冒頭にて触れた「カテゴリの設定を前提とした数多くの機能」について、数回の記事に分けて紹介をしていく予定です。
皆さんが知っている、サウンド実装に欠かせない「あの技法」に繋がる内容になりますので、ご期待ください(笑)

今回のnoteは以上となります。

▼サウンド関連のnoteをまとめたマガジンがあります!

▼G2 Studiosについてはこちら

▼最新情報はX(Twitter)でご確認ください!



X(Twitter)にて最新のお知らせを配信しております。ぜひフォローしてください!