【Unity】オーディオミキサーでサウンドをクロスフェードさせる

投稿者: | 2021-04-20

オーディオミキサーを使って、BGMや足音をまとめてクロスフェードさせてみました。

オーディオミキサーを作る

まず、Window > Audio > Audio Mixerでオーディオミキサーウィンドウを開きます。

オーディオミキサーウィンドウでは、Mixersに今あるオーディオミキサーが表示されています。+ボタンから新しいオーディオミキサーを作れます。

作った直後や、ダブルクリックから名前を変えられます。

グループを作る

オーディオミキサーを選択すると、それに含まれるスナップショットやグループ、ビューのリストが表示されます。Groupsの+ボタンからグループを新規作成すると、マスターの子グループが作られます。

新しいグループを選択した状態で再度+ボタンを押すと、このグループの子グループが新規作成されます。

このグループをマスターにドラッグアンドドロップすると、マスターの子グループになります。

これで、新しい2つのグループは互いに独立しますが、マスターの音量を変えると、2つの子グループの音量を同時に変えられます。

オーディオミキサーを通して音を鳴らす

シーンにあるオーディオソースからの音をオーディオミキサーに出力するには、オーディオソースのOutputで出力先のグループを選択します。

まずFPSキャラの足音をグループ1に設定しました。

グループ1には、もう一つBGM用のオーディオソースからも出力します。

さらにもう一つBGM用のオブジェクトを作って、グループ2に出力します。

これで、グループ1の音量を変えると、足音と1つ目のBGMの音量だけが変わり、グループ2の音量を変えると2つ目のBGMの音量だけが変わります。

スナップショットを作成

オーディオソースの状態はスナップショットに保存できます。オーディオミキサーやグループと同様に、スナップショットも+ボタンから新規作成できます。

名前を変えたら、スナップショット1を選択した状態で、グループ2の音量を一番下まで下げます。

スナップショット2を選択すると、はじめの状態に戻ります。

スナップショット2ではグループ2の音量は変えずに、グループ1の音量を下げてみます。

再度スナップショット1を選択すると、スナップショット2を選択する前の状態に切り替わりました。このように簡単にオーディオミキサーの状態をスナップショットに保存できます。

クロスフェードさせる

クロスフェードさせるには、片方のスナップショットの状態からもう片方の状態へとスムーズに遷移させます。それは、AudioMixer.TransitionToSnapshotsメソッドを使うと、スクリプトで簡単に行なえます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;

public class CrossFadeTest : MonoBehaviour
{
    [SerializeField] AudioMixer mixer;
    [SerializeField] AudioMixerSnapshot[] snapshots;
    float[] weights = new float[2];

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Alpha1))
        {
            weights[0] = 1f;
            weights[1] = 0f;
            mixer.TransitionToSnapshots(snapshots, weights, 3f);
        }
        else if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            weights[0] = 0f;
            weights[1] = 1f;
            mixer.TransitionToSnapshots(snapshots, weights, 3f);
        }
    }
}

第一引数にはスナップショットの配列、第二引数には、各スナップショットのウェイトの配列、第三引数にはそのウェイトに達する時間を渡します。

ウェイトに0と1を使って、どちらか一方のスナップショットの状態にしていますが、中間の値を使ってブレンドさせることもできます。

オーディオミキサー等をスクリプトにアタッチするときは、欄の横のマークから選択します。

これで簡単にクロスフェードさせられました。

複数の音をまとめて音量を変えられるので便利です。

コメントを残す

メールアドレスが公開されることはありません。