【Unity】サウンドにエフェクトを追加・カテゴリ管理・ダッキング - Audio Mixerの使い方を総まとめ

Unityでサウンドにエフェクトを追加したりダッキングしたりカテゴリ管理したりできるAudio Mixerの使い方をまとめました。

概要

Unity の Audio Mixer を使うと以下のようなことが実現できます。

本記事ではこの Audio Mixer について、基本的な使い方をまとめます。

基本操作 - エフェクトをかけてみる

まず簡単なエフェクトを掛けて Audio Mixer の基本操作を学びます。

最初に Assets > Create > Audio Mixer から Audio Mixer アセットを作成し、作成したアセットをダブルクリックして下図のウィンドウを開きます。

Audio Mixer

上図を見ると Master という名前の Audio Mixer Group があることが確認できます。
この下部にある Add… ボタンを押下し、SFX Reverb からリバーブエフェクトを追加します。

バーブ

エフェクトが追加されたら、Master グループを選択した状態で Inspector から Room プロパティを 0.00mB に設定します。

Roomsを設定

これでAudio Mixerの設定は終わりです。
あとは適用したい Audio Source の Output プロパティにこの Audio Mixer Group をアサインします。

Audio Source

再生するとリバーブエフェクトが掛かることが確認できます。

グループ機能で「カテゴリ」を作る

前節の通り、Audio Mixer を作成すると Master という名前の Audio Group が一つだけ存在しています。

このグループは複数作成することが可能で、それぞれのグループごとに音量やエフェクトを調整することができます。
これを活用すると例えば、ボイスとSE、BGMといったサウンドのカテゴリごとにグループを分けて、カテゴリごとに音量調整できる機能を作成することができます。

カテゴリ

またグループは入れ子にすることが可能です。
これを使えば例えば、Voice グループの子として Player Voice グループと Enemy Voice グループを作成し、特定状況下では Enemy 敵のボイスのボリュームだけを下げるといったことができます。

特定グループだけを下げる

詳細な設定方法については以下の記事にまとめていますので、必要に応じて参照してください。

light11.hatenadiary.com

グループの可視状態の変更とViews機能

Audio Group が多くなってくるとGUIが見づらくなり、作業が煩雑になります。
このような場合には、各 Audio Group の左側にある目のマークを押下することでそのグループを非表示にすることができます。

非表示

また、現在のグループの可視状態の設定は View として保存しておくことができます。
Views の右側の + ボタンを押下することで新しい View を追加し、今行っている作業に応じてグループの可視状態設定を切り替えることができます。

切り替え

スナップショット機能

Audio Mixer では、グループの音量(Attenuation)や各種エフェクトのパラメータなど、現在の設定値をスナップショットとして保存できます。

スナップショット

保存したスナップショットは再生中に切り替えたり、ブレンドしたりすることができます。

詳しい使い方については以下の記事にまとめていますので、必要に応じて参照してください。

light11.hatenadiary.com

ダッキング(サイドチェイン)機能

ダッキングとは、ある音が鳴ったときに他の音の音量を下げて聞こえやすくする処理です。
例えばキャラクターのボイスが再生されたときに自動的にBGMを下げて、ボイスを聞こえやすくするときなどに使います。

Audio Mixer では、グループ間でダッキングの設定を行うことで、このような効果を得ることができます。

ダッキング

ダッキングの詳細な設定方法について詳細は以下の記事にまとめていますので、必要に応じて参照してください。

light11.hatenadiary.com

ミキサーに親子関係を持たせる

Audio Mixer はプロジェクト内に複数作成することができます。
新しい Audio Mixer を作成するには、Mixers の右側の + ボタンを押下します。

Mixerを追加

Audio Mixer をドラッグし、親の Audio Group を選択することで、子の Audio Mixer の出力を親の Audio Group にルーティングすることができます。

ルーティング

上記の例では、 Example2 を使用したサウンドは Example の BGM グループや Master グループの影響も受けるということになります。

なおスクリプトからは_audioMixer.outputAudioMixerGroupに値を設定することでルーティングの設定をすることができます。

エフェクト一覧

Audio Mixer で使用できるエフェクトの一覧と概要は以下の通りです。
マニュアルに詳細な説明が書いていないので、参考になりそうなサイトをリンクしています。

名前 概要
Lowpass 高い周波数の音をカットする
Highpass 低い周波数の音をカットする
Echo 設定した時間分だけ遅らせた音を重ねて再生するエフェクト
https://docs.unity3d.com/Manual/class-AudioEchoEffect.html
Flange わずかに遅延させた音を重ねることで「フランジング効果」を得るエフェクト
https://kensukeinage.com/effector_chorus_and_flanger
Distortion 音をクリッピングして歪み効果を加えるエフェクト
https://kensukeinage.com/effector_distortion_and_overdrive/
Normalize AudioSourceの音量にばらつきがある時に使うと均一化してくれるエフェクト
https://learn.unity.com/tutorial/audio-setup?projectId=5f4e4ee3edbc2a001f1211df#5f4f9de9edbc2a0021021be9
ParamEQ 低い音を大きくしたい場合など、特定の周波数を強調したい時に使うエフェクト
https://learn.unity.com/tutorial/audio-setup?projectId=5f4e4ee3edbc2a001f1211df#5f4f9de9edbc2a0021021be9
PitchShifter ピッチを制御するとこに使うエフェクト
https://docs.unity3d.com/Manual/class-AudioPitchShifterEffect.html
Chorus 遅延させた音を重ねることでダブリングしたような効果を得るエフェクト
https://kensukeinage.com/effector_chorus_and_flanger
Compressor ダイナミックレンジをコントロールして音が大きすぎる部分を抑えたり、小さすぎる部分を大きくしたりするエフェクト
https://kensukeinage.com/effector_compressor_and_limiter/
SFX Reverb 残響効果を得るエフェクト
Roomパラメータを大きい値に設定すると簡単に効果を確認できる
https://kensukeinage.com/effector_reverb/
Lowpass Simple 高い周波数の音をカットする
Highpass Simple 低い周波数の音をカットする

スクリプトから各パラメータを操作する

Audio Mixer では GUI ツールを使って各種パラメータを編集することができます。
これに対して、音量を動的に変更したい場合など、スクリプトからパラメータを制御する必要があるケースがあります。

このようなケースでは、Exposed Parameter という機能を使って対象のパラメータをスクリプトから操作する対象としてマーク(Expose)することで、スクリプトからの制御が可能になります。
Expose したパラメータは以下のようなコードで操作することができます。

using UnityEngine;
using UnityEngine.Audio;

public sealed class Example : MonoBehaviour
{
    [SerializeField] private AudioMixer _audioMixer;
    [SerializeField] private float _volume;

    private float _currentVolume = -1.0f;

    private void Update()
    {
        if (Mathf.Approximately(_currentVolume, _volume))
            return;
        
        // AudioMixer.SetFloat で Exposed Parameter を設定する
        _audioMixer.SetFloat("BGMVolume", _volume);
        _currentVolume = _volume;
    }
}

Exposed Parameter の詳細な使い方については以下の記事にまとめていますので必要に応じて参照してください。

light11.hatenadiary.com

関連

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com

参考

docs.unity3d.com