++bibouroku

自分の知ったことは他の人の知りたいことかもしれない。Unityを中心とした備忘録。

Audio ToolkitのAudioControllerに指定されているオーディオクリップのデータをロードする

今日、Audio ToolkitというUnityでのサウンド管理アセットを触っていました。

Audio Toolkitで再生するオーディオクリップはAudioControllerというコンポーネントに関連付けられているのですが、AudioControlerに関連付けられているクリップのLoadAudioDataを呼び出すメソッドが用意されていなかったので作成しました。

/// <summary>
/// Audio ToolkitのAudioControllerに指定されているオーディオクリップのデータをロードする
/// </summary>
/// <param name="controller"></param>
static void LoadAudioData(AudioController controller)
{
    foreach (var category in controller.AudioCategories)
    {
        foreach (var item in category.AudioItems)
        {
            foreach (var subitem in item.subItems)
            {
                subitem.Clip.LoadAudioData();
            }
        }
    }
}

(...ただAPIを呼び出しただけ)

LoadAudioDataの必要性

AudioClipのPreload Audio Dataにチェックを入れない運用を想定しているためです。
チェックを入れるとゲーム起動時にサウンドデータを読み込みが行われます。また、確認したところUnloadAudioDataを実行しても破棄されない挙動となっていました。
なるべく必要ある時だけメモリにデータを乗せるようにするためPreload Audio Dataにチェックを入れない運用を考えています。

Preload Audio Dataにチェックを入れない場合、どこかでデータをロードする必要があります。
データロードはPlay系メソッドを呼び出すかLoadAudioDataを呼び出すと行われるのですが、再生遅延を考慮し事前にLoadAudioDataを呼び出す方針を取りました。

ただ、どちらも一長一短あるのでどちらが良いかはプロジェクト要件しだいかなという感じです。
前者の場合、本当に使用されるデータだけがメモリに乗るというメリットがありますが最初のSE再生時にロードが挟まるため再生遅延を招く可能性があるというデメリットがあります。
後者の場合、ロードされている状態でPlayを行うのですぐに再生できるメリットが、使用しないSEもメモリに乗ってしまうデメリットがあります。