ゼニガネブログ

ゲーム開発のための小ネタなど。現在はUnityメインでやってます

【Unity】AudioMixerで遊んでみよう!(1/3)

f:id:zenigane138:20180220211937p:plain

今回は使ってみると便利&面白いAudioMixerで遊んでみたいと思います。
AudioSourceだけでもゲームは作れちゃいますし、AudioMixerが実装されたのがUnity5からなので実装時点で既にオレオレSoundManagerが完成していたり、オーディオミドルウェアを採用済みであったりと使用経験のない方もいるのではないでしょうか。
今回はそんな方向けに導入方法とちょっとしたサンプルをご紹介したいと思います。
※オレオレSoundManagerやオレオレAudioManagerを作成する記事ではないです

AudioMixerとは


公式より

Unityオーディオミキサーを使用すると、さまざまなオーディオソースをミキシングし、エフェクトを適用し、マスタリングを実行できます。

「音をいい感じに聞こえるように調整するための機能」=「AudioMixer」ぐらいの認識でいいと思います。

 

AudioMixerを使うとこんな事が簡単に出来る!


・サウンドをグループ化したり、親子関係をもたせて扱える
SEグループだけミュートにしたいとか全てフェードアウトしたいとか。

・サウンドにリアルタイムでエフェクトを掛けられる
1つの音声ファイルだけで電話越し、洞窟内での鳴り方を表現できたり。

・エフェクト設定を保存しておいていつでも切り替えができる
通常設定、メニューを開いている時用設定(メニューSE以外音量を下げる)のスナップショットを用意しておいて状態に合わせて切り替えたり。

・ある音を再生中は一時的に別の音量を下げる
いわゆるダッキングというやつです。キャラの音声再生中は一時的にBGMの音量を下げるとか。

・音量の見える化
現在の音量(dB)が表示されて直感的に。

プログラマ以外にもさわりやすくなる
餅は餅屋、音は音屋

 

余談ですが、AudioMixer実装前からLPFやリバーブなどのエフェクト用コンポーネント(昔はProOnly機能)は存在していました。
このコンポーネントはAudioSourceやAudioListenerに対して設定するものですが、AudioMixerのエフェクトはグループに設定します。

ちなみにLPFはローパスフィルタの略で、特定周波数より低い成分を通して、高い方は減衰遮断するフィルタです。つまり高域カットです。
HPF(ハイパスフィルタ)はそれの逆で低域カットです。
BPF(バンドパスフィルタ)は指定域外カットです。UnityにBPFは用意されていないので再現したいときにはLPFとHPFを組み合わせて使います。


サウンド系のスライドを見に行くとちょくちょく出てくるので覚えておくと便利です!

よし、何か作ってみよう!


ゲームっぽいシチュエーションの方が作っていて楽しいと思いますのでRPGをイメージした物を作ってみましょう。
・近くに小さな滝がある草原フィールド画面でエンカウントするパターン
・近くに小さな滝がある洞窟フィールド画面でエンカウントするパターン
・フィールド画面からメニュー画面を開くパターン
UIを操作すると上記をイメージしたサウンド制御が出来るようにします。

最終的にこんな感じの物を作ります。

www.youtube.com

見た目はちょっと残念ですが音源のクオリティが高いので音だけ聴くといい感じ!

音源の用意

まず今回使用する音源を用意しましょう。各サイトからそれぞれダウンロードをお願いします。
ファイル名は変更せずそのままご使用いただいた方がスムーズに読み進められると思います。

BGM:MusicMaterial

http://musicmaterial.jpn.org/loop_top.htm
このページから『LOOP 007』
http://musicmaterial.jpn.org/rock.htm
このページから『LASTRUN』

 

ME:魔王魂

https://maoudamashii.jokersounds.com/list/game17.html
このページから『ジングル09』

 

SE:効果音ラボ
https://soundeffect-lab.info/sound/button/
このページから『決定、ボタン押下12』と『メニューを開く1』
https://soundeffect-lab.info/sound/environment/
このページから『滝2』

 

声:効果音ラボ
https://soundeffect-lab.info/sound/voice/game.html
このページから『主人公の熱血剣士の「さあ、いくぞ!」』と『僧侶見習いの女の子の「心の準備をしないと…!」』と
『主人公の熱血剣士の「やった!」』と『僧侶見習いの女の子の「やりました!」』

 

実際に作っていこう

では、素材も揃ったところで新しいプロジェクトを作成しましょう。
プロジェクト名はなんでもOKです。私はBlogAudioMixerとして作成しました。
先程ダウンロードしてきたファイルを全てインポートしておきます。
Audioフォルダを作ってそこに移動しておきましょう。

f:id:zenigane138:20180220213801p:plain

AudioMixerを使用するには、オーディオミキサーファイル(拡張子.mixer)が必要になります。
ProjectビューからCreate→AudioMixerを選択してSample01AMという名前で作成します。
このミキサーファイルはAudioフォルダ内にMixersを作ってそこに移動しておきます。

f:id:zenigane138:20180220213818p:plain

AudioMixer編集ウィンドウを開きます。
メニューバーのWindow→AudioMixerを選択するか、生成したSample01AMをダブルクリックやCtrl+8でも開けます。

f:id:zenigane138:20180220213835p:plain

Masterグループしか存在しない状態なので、グループの追加を行います。
Groupsにある+をクリックしてBGM、SE、Voice、Male、Female、Otherグループを追加します。

f:id:zenigane138:20180220213901p:plain

グループ名をドラッグや右クリックで親子関係を変更したりリネームなどが行なえます。なおMasterグループはリネームが行なえません。
画像の通りにMasterの子にBGM、SE、Voiceを設定、Voiceの子にMale、Femaleを設定します。

f:id:zenigane138:20180220213916p:plain

このグループ分けは作りたいゲーム・表現によって大きく変わってくるので作品毎にあわせて設計するのがベストです。
グループを細かく分けすぎると管理が複雑になりすぎて泣きたくなりますのでほどほどに…。

余談

一例としてギャルゲービジュアルノベルをイメージしたAudioMixerグループの画像を挙げておきます。
キャラ単位でオンオフ出来たり音量調整できたり、モブキャラは全部オフにしちゃえみたいなイメージです。

f:id:zenigane138:20180220213957p:plain

本筋に戻って

では次にシーンを作成しましょう。ファイル名はSample01としてシーンを作成しました。
Assets直下にファイルを直接置くのが気になるので、Scenesフォルダを作ってその中にSample01シーンを入れおきます。

f:id:zenigane138:20180220214014p:plain


そしてAudioSourceコンポーネントを持ったGameObjectを追加していきます。
Hierarchyウィンドウで何も選択されていない状態で右クリック→Audio→Audio Sourceで作成します。
AudioSourceコンポーネントの設定は後ほど行います。
併せて親になる空のゲームオブジェクトを追加していきます。
Hierarchyウィンドウで何も選択されていない状態で右クリック→Create Emptyで作成します。

これを画像のような親子関係にして配置して下さい。

f:id:zenigane138:20180220214136p:plain

Rootとなっているものが空のゲームオブジェクトでそれ以外はAudioSourceコンポーネント持ちです。
一応コピペ用にテキストもはっておきます。
BGMRoot
    Field
    Battle
SERoot
    Water
VoiceRoot
    Boy
    Girl
OtherRoot
    Encounter
    ResultWin
    OpenMenu

AudioSourceコンポーネントのAudioClipに設定を行います。
先程インポートした各オーディオファイルを設定していきます。
あわせてPlayOnAwakeとLoopの設定も行います。

Field : loop007
PlayOnAwakeオン、Loopオン

f:id:zenigane138:20180220214056p:plain

Battle : lastrun
PlayOnAwakeオフ、Loopオン

f:id:zenigane138:20180220214347p:plain

Water : waterfall-small2
PlayOnAwakeオン、Loopオフ

f:id:zenigane138:20180220214359p:plain

残りは全てPlayOnAwakeオフ、Loopオフ
Boy : game_swordman-start1
Girl : game_healer-start1
Encounter : decision12
ResultWin : game_maoudamashii_9_jingle09
OpenMenu : menu1

f:id:zenigane138:20180220214426p:plain

ここまで出来たら一旦実行してみましょう。
序盤のフィールドっぽいBGMと水の音が流れていればOKです。

ここで実行中のAudioMixerウィンドウに注目して欲しいのですが、この画像のようにはなっていないと思います。

f:id:zenigane138:20180220214454p:plain

実はまだ、AudioMixerを作成しただけで使うようには設定していなかったのです!
ここが冒頭で書いた「AudioSourceだけでもゲームは作れちゃう」という部分になります。
※正確にはAudioSource、AudioClip、AudioListenerが必要です

ここからAudioMixerを使うように設定していきましょう。
AudioSourceコンポーネントのOutputという項目へ設定をしていきます。
Outputで選択できるものはAudioMixerのグループになります。
予め作っておいたSample01AMを設定していきましょう。

BGMRootの子供はBGMグループへと言った具合に、SERoot、OtherRootの子供たちも全て設定していきます。

f:id:zenigane138:20180220214610p:plain

VoiceRootの子のBoyとGirlはVoiceではなくそれぞれMaleグループ、Femaleグループに設定しましょう。

f:id:zenigane138:20180220214626p:plain

ここでもう一回実行してみましょう。
音は全く変わっていませんが、画像のようにVUレベルメーターが動いていると思います。
f:id:zenigane138:20180220214454p:plain

これでAudioMixer経由で音が出力されました!

続いてBGMが気持ち大きいかなと思うので少し音量を下げます。
AudioSourceのVolumeで調整する方法もあるのですが、今回はBGMグループのAttenuationエフェクトで調整してみましょう。

AudioMixerウィンドウのBGMグループをクリックすると、Inspectorにそのグループへ追加されたエフェクトが表示されます。
Attenuationというエフェクトがデフォルトで追加されているので、そのVolumeに -5.00dB を設定します。
Attenuationは減衰という意味で、その名の通り入力された信号(音)を減衰させます。

f:id:zenigane138:20180220214800p:plain


こんな感じで設定してみましょう。

ちなみにゲームの実行中は、Attenuationの設定などのAudioMixerの編集が出来ないようになっています。
実行中に音を聞きながら調整したい場合は、AudioMixerウィンドウのEdit in Playmodeをクリックすると編集出来るようになります。

f:id:zenigane138:20180220214825p:plain

今回のまとめ

先に向けての準備もあって長くなってしまいましたが、AudioMixerを使うために一番重要な部分はこれだけです。

オーディオミキサーファイルを作成し、AudioSourceコンポーネントのOutputにAudioMixerのグループを設定する。

まあなんて簡単!

次回はAttenuation以外のエフェクトやスナップショットを使用してみたり、もう少し踏み込んだ使い方をしていきます。