見出し画像

第6回/ランダム再生させてみる

こんにちは。
G2 Studios サウンドチームのサキサキです。
今回は、皆さんお待ちかね「ランダム再生」についてご紹介します。
単にランダム再生と言えど、CRI Atom Craftにはいくつかのランダム再生機構があります。
本記事は、その中の一つである「シーケンスタイプ」に分類されるものについて焦点を当てたいと思います。


■作業環境

本記事は以下の環境下での作業内容を記載します。

CRI SDK :criware_sdk_unity_v3_07_01_smartphone_ja

■シーケンスタイプとは

「シーケンスタイプ」はキューに内包されたトラックの再生方式を指しており、サウンド再生時にちょっとした演出を追加する目的で用いられます。

再生方式には「ポリフォニック」「シーケンシャル」「シャッフル」「ランダム」「ランダムノーリピート」「スイッチ」「コンボシーケンシャル」と呼ばれるものがあります。

「ポリフォニック」「スイッチ」については過去記事(スイッチタイプキューを作ってみる(セレクター編)/第4回)で触れてきました。

今回で3つ目の紹介となりますが、その他のものについても後日記事にて紹介していきますので、楽しみに待っていてください。


■ランダム(シーケンスタイプ「ランダム」)とは

シーケンスタイプの「ランダム」は、キューリクエスト時にそのキューに内包されたトラックから1つをランダムに抽選し再生させる方式です。

内蔵するトラックが1つでもエラーにはならずに再生されます。


■もう1つのランダム

シーケンスタイプには「ランダムノーリピート」と呼ばれるもう一つのランダム方式があります。

こちらのランダムは少しだけ特殊で、「前回再生したトラックとは別のトラックを再生する」といった内容になります。

では、両者の違いを図で見てみましょう。

<2種のランダム比較> 

キューアイコンの絵柄が若干変わりますが、構造上は特に何も変わらないことが見て取れます。

実のところ、Atom Craftでデータ作成を行う場合には、キューに対し「ランダム」「ランダムノーリピート」のいずれかを設定するだけで基本的なランダム設定は完了となります。

ここではあまり難しく考えず、「シーケンスタイプのランダムは2種類あり、用途に応じて使い分けることができる」という点だけ押さえておきましょう。


■ランダム再生の用途と意図

ランダム再生の用途は「音の再生内容を単調な(1つに固定した)形にしない」というところにほぼ集約されてきます。

しかし、「何故そうする必要があるのか」という意図については、ユーザー視点や開発視点において様々なものが考えられます。

<ランダム再生を行う意図の一例>
・単調な再生による「飽き」の回避
・確率再生による「期待値」の向上
・バリエーション数保持によるキャラクターのレア度(価値)との関連付け
 

ランダム再生に限らずですが、あらゆる実装において「意図」はコンテンツの売り上げを伸ばす上で非常に重要なものになってきます。

小さなものからコツコツと!

作業の一つ一つにこういった意図を持たせるようにしましょう。


■Atom Craftでランダム再生させてみる

それでは、実際にAtom Craft上でシーケンスタイプ「ランダム」の設定をしてみましょう。

<手順①>

3つのサンプル音源「Se_Bubble_01.wav」「Se_Bubble_02.wav」「Se_Bubble_03.wav」を予め Atom Craft内にインポートしておきます(※こちらは私が作成したものなので、商用でも何でも自由にご利用いただいて大丈夫です)。

 マテリアルツリーから任意のマテリアル(いずれか1つ)をワークユニット上にDrag&Dropし、キューシートとキューを作成します。

(※キューシートとキューの作成など、基本的なサウンドデータの作成方法についてはこちら ⇒CRI Atom Craft でサウンドデータを作ってみる/第1回

<手順① キューシート、キューの作成>

 

<手順②>

同様に、残り2つのマテリアルをマテリアルツリーからDrag&Drop、今度は先ほど作成されたキューに向けて行います。

ワークユニット上のキュー内に3つのトラックが表示され、併せてタイムライン上にも3つの波形が表示されました。

<手順② 全マテリアルの格納>

<手順③>

キューにシーケンスタイプを設定します。

キューを選択しインスペクターを見ると、このタイミングでは「ポリフォニック」が設定されているのがわかります。

該当項目を押下し、開いたプルダウンの中から「ランダム」または「ランダムノーリピート」を選択します。

これでキューはランダム再生するようになりました。

<手順③ シーケンスタイプの設定>


<手順④>

あとは、キューシートとキューの名称がちょっとだけ気になるので修正しておきます。

3種の「泡の音」なので… キューシート&キュー名ともに「Se_Bubble」としておきましょう。

<手順④ キューシートとキューの名称変更>

これで完成です。
簡単ですね!

再生させると、意図通りの形に鳴っていることが確認できます。

 

■ランダムの異なる設定方法

シーケンスタイプの設定はタイムラインやリストエディター上からも行うことができます。

<ランダム設定(タイムライン)> 
<ランダム設定(リストエディター)>

また、ワークユニットツリー上部のアイコン「キュー『ランダム』の作成」を押下することで、最初からシーケンスタイプの設定されたキューを作成するといった方法もあります。

この方法ですと後からシーケンスタイプの設定を行う必要がなく、また、設定そのものの失念を防止することにもなりますのでお勧めです。

<キュー「ランダム」作成(ワークユニットツリー上部アイコン)>

ここで紹介した以外にもやり方はありますので、AtomCraftをいじり倒してご自身にあったやり方を模索してみてはいかがでしょうか。

 

■再生確率の調整

実は、「ランダム」「ランダムノーリピート」には、キューリクエスト時の各トラックの再生確率を任意で調整できる機能があります。

使用頻度は少ないかもしれませんが、折角ですのでこの部分について少しだけ掘り下げておこうと思います。

キューのシーケンスタイプに「ランダム」「ランダムノーリピート」が設定されると、インスペクター上にあるメニュー「ランダム」から値設定ができるようになります。

<インスペクター メニュー「ランダム」>

調整可能なプロパティは「乱数重み」と「再生確率」の2つあり、各トラックごとに設定する形になります。

  

<ランダム再生における調整可能なプロパティ>

 ・乱数重み

シーケンスタイプ「ランダム」「ランダムノーリピート」固有のプロパティで、ランダム抽選時の各トラックの当選比率(※「0」から「200」までの整数値で設定)を操作します。
キュー内に格納されたトラック全てが比較対象となります。
初期設定では全てのトラックについて等しく「100」が設定されています。

・再生確率

全てのシーケンスタイプで調整可能なプロパティで、トラックそのものの発音有無の比率(※100⦅%⦆を上限とした整数値で設定)を操作します。
99(%)以下が設定される場合、サウンド再生時に確率にあわせて発音しなくなります。
初期設定では必ず再生されるように「100」が設定されています。

これらをどういったものに利用するかはさておき、設計の段階でやれることの選択肢が有ると無いでは大きく異なってきますので、個人的には非常にありがたい機能だと思っています。

値の変更はインスペクターの他にリストエディター上でも行えます。

数値入力が苦手な人は、インスペクター右側にある各トラックの割り当て箇所(青く着色された箇所)を押下した状態でカーソルを上下に動かすことでも値変更できますので、是非試してみてください。

<ランダム再生確率の値変更(インスペクター)>


■実装における注意点

最後に、実際にサウンドデータを作成する前に注意すべき点をいくつか挙げておきたいと思います。

・運用時における音声ファイルの追加

ランダム対象となる音声ファイルがゲーム運用過程で頻繁に追加されていくことが想定される場合、Atom Craftでランダムデータを作成することが本当に最適な手段なのかどうかを考える必要があります。
Atom Craftで作成されたサウンドデータに更新が発生するということは、ダウンロードによるキューシート単位でのデータ更新をユーザー側に強いることを意味します。
ここで着目すべきは、その更新データが「更新の不要なものまで含めた形になる」というところです。
データ更新時に発生する「データサイズ」「待ち時間」の増大はユーザー離れに繋がる可能性がありますので、十分に注意しましょう。

・ゲーム内における他機能との連動

テキスト表示やリップシンクなど他機能と連動したサウンド再生を必要とする場合、ランダム抽選そのものをAtom Craftで行うべきかどうかを考える必要があります。
もちろん、Atom Craft側で抽選を行い、その結果をもとに制作ツール側で他機能を発動させることは可能です。
ただやはり、ゲーム制作における各機能制御は制作ツール側を主体に行うことが管理や再生パフォーマンスの面で望ましいと考えられるため、あくまで1つのリソースであるサウンドデータにどこまでの制御を任せるべきか、というのが問題となってきます。

・メモリ負荷

Atom Craftで作成したサウンドデータはキューシート単位(ACBファイル)で書き出しされ、実機及び制作ツール側でのキューの再生時には、該当キューを含むキューシートをシーン上に展開させる仕組みになってます。
つまり、オンメモリ再生における音の呼び出し時には、例え呼び出す音が1つであったとしても該当キューシート内に含まれるもの全てが一度メモリにのる(ワークメモリを使用する)形になります。
そのため、大量の音声ファイルや尺の長い音声ファイルなどをキューシート内に格納する場合には、キュー再生時のメモリ負荷について注意する必要が出てきます。

どうでしょう。
想像以上に奥深いものだと感じたのではないでしょうか。

これらはゲーム全体の実装に影響してきますので、他セクションの担当者とよくすり合わせを行った上で実装するようにしましょう。


■まとめ

シーケンスタイプ「ランダム」「ランダムノーリピート」は非常にシンプルで使い勝手の良い機能ですが、意図なく乱用するのではただのリソースの無駄遣いになりかねません。

ランダム再生の難しさは機能実装そのものよりそこに至るまでの経緯を鑑みるところにあります。

「たかだかランダム再生」と侮らず、使用の意図を明確にしてより効果的な実装を目指しましょう!

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


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

▼G2 Studiosの採用情報はこちら

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


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