困った時の自分用メモ

読んだ本を考察してメモったり、自分でいじった物の感想をメモったりする場。週1更新を目指します。

Unityの話~AudioMixerの使い方メモ~

BGMのクロスフェードを実装しようとして、そういえばAudioMixerを使ったことがあったなーと思ったが、
いざ触ってみると意外とハマるので、メモ。

自分用のメモの為、読んで使えるようにはならない記事。

○仕組み
AudioMixerを構成する要素として

・Mixer(正式名称不明)
・SnapShot

がある。

Mixerは、AudioSourceとひも付き、そのAudioSourceの音を調整する補助マシンのような物だ。
AudioSourceのOutputという項目に設定ができる。

例えば、AudioSourceは単体で勝手に音もなるし、ボリュームも設定できるが、
Mixerを設定すれば、そのMixerを設定している全てのAudioSourceに、そのMixerの設定を一括設定できる。

SnapShotは、各Mixerのサウンド状態を保存しておき、その状態を復元するための設定だ。
例えば、BGMを再生するMixerを2つ用意しておき、

  1. Snapshot1:Mixer1=Vol80、Mixer2=Vol0
  2. Snapshot1:Mixer1=Vol0、Mixer2=Vol80

として、SnapShotを切り替えれば、Bgmのクロスフェードが簡単に実装できる。

ソースコード

public class SoundManager : BestPracticeSingleton<SoundManager> {
    
    [SerializeField]
    private AudioSource[] BgmAudioSource = null;

    [SerializeField]
    private AudioClip[] BgmAudioClipList = null;
    
    // ここの設定が、MixerのAとBの音量が異なる設定がされている
    [SerializeField]
    private AudioMixerSnapshot[] AudioMixerSnapshot_BgmCrossFade = null;
    
    // とりあえず、一個しか使わないのであれば、これ使っておけば良いと思われ
    [SerializeField]
    private AudioMixer SoundAudioMixer = null;

    public void PlayBgm(Enum.Bgm bgm, float fadeTime = 0f) {
        AudioSource source = AnyAudioSource;
        source.clip = AnyAudioClip;
        source.Play();
        source.loop = true;
        
        if (BgmAudioUseIndex == 0) {
            weights = new float[2] { 1.0f, 0.0f };
        } else {
            weights = new float[2] { 0.0f, 1.0f };
        }
        SoundAudioMixer.TransitionToSnapshots(AudioMixerSnapshot_BgmCrossFade, weights, fadeTime);
    }
    
}