AudioMixerを導入してみる
Unity5ではAudioMixerという機能が追加されました。
音源に応じて複数のSEが鳴ったときのNormalizeや、Voice再生時にBGMをダッキングするなど、色々な機能を提供しています。
過去に開発したゲームに導入してみて検証した時のメモです。
EditInPlayモードでプレイ中にAudioMixerを編集できるのが便利です。
AudioMixerの概要
Unity のオーディオミキサー(Audio Mixer)では、いろいろな音源をミックスしたり、それにエフェクトをかけたり、マスタリングを行ったりすることができます。
Unity5から追加された機能です。この機能で複数のAudioSourceのボリュームを一括制御/Offにしたり、オーディオグループにエフェクトを付与するといった事が可能になりました。
Audioコンポーネントについて
基本的なオーディオ関係のコンポーネントは4つあります。
- AudioClip → 音データ
- AudioSource → スピーカー
- AudioListener → 耳 (シーン内に1つのみ。通常はCameraに付いている。)
- AudioMixer → 音の調整
早速AudioMixerを作りましょう
Window->AudioMixer
Mixersの+をクリックして新規で作ります。
ゲームを想定してBgm、SE、Voiceの3つのグループを作成します。Groupsの+をクリックして追加します。ここではMasterの子にしておきます。
SoundManager等を用意してInspectorへMixerとGroupをアタッチします。
public class SoundManager : SingletonMonoBehaviour <SoundManager> { public AudioMixer Mixer; public AudioMixerGroup MixerBgmGroup; public AudioMixerGroup MixerSeGroup; public AudioMixerGroup MixerVoiceGroup; //**省略**// }
まだSoundManager等を作られてない方は以下を参考にしてください。
Unity オレオレサウンドマネージャー · GitHub
先ほどアタッチしたAudioMixerGroupを各AudioSourceに設定します。これでソースコードの追加は以上です。
void Awake() { //**省略**// audioSourceBGMs.ForEach(asb => asb.outputAudioMixerGroup = MixerBgmGroup); audioSourceSEs.ForEach(ass => ass.outputAudioMixerGroup = MixerSeGroup); audioSourceVoices.ForEach(asv => asv.outputAudioMixerGroup = MixerVoiceGroup); }
※今回は検証用ということで参考にされる場合、ソースコードは各自でお直しください。
Voiceグループはダッキング再生を行う
ダッキングはSEやセリフの音が鳴るときにBGMを自動的に下げるというようなものです。
Bgmグループに「Duck Volume」を追加します。
Voiceグループに「Send」を追加します。
Receiveを「Bgm/Duck Volume」を選択した後、Send Levelを-80dB(無音にいして送信)から0dB(音量そのまま送信)へ変更します。
Duck Volumeエフェクトのパラメーターを調整しましょう。Thresholdを-40.00dBに変更します。今回だとBGMとVoiceが同時再生されている時にThresholdの閾値を超えている間BGMが小さくなるという仕組みです。SEにも適用しています。
いろいろ設定してみた結果
AudioMixerは今日初めて触ったので間違っているかもしれませんが、いい感じで動いてます。ここまで30分程度で導入できました。
Voice再生時にBGMが小さくなってそれっぽくなってこんな簡単にできるんだなと思いました。
SEグループにNormalizeを設定したらSEのvolumeが大きくなったのでmixerで下げ調節しているのと、自分のゲームではVoiceがそれぞれ音量に差があったり、台詞の都合上で音量に波がある言い方あったりとかでダッキングが少し変になったりしているので少しmixerで上げ調整しています。
それぞれのゲームによって調整は変わってくると思うので少しでも参考になればと思います。何かご指摘があれば言ってください。修正させていただきます。