DEV Community

松本隆介
松本隆介

Posted on • Edited on

Unity AudioMixerで音量等のパラメータをスクリプトから操作する際のつまりポイントメモ

経緯

Unityのスクリプトリファレンスなどだと若干わかりづらかった & ググってもなかなか良い記事に巡り合わなかったためここにメモ

Unity5.6あたりからサウンド周りの管理用コンポーネントとして AudioMixerがある、これはGUIでのサウンドの調整やエフェクトの追加等々が行える便利な機能

↓詳しくは公式リファレンスを参照↓
マニュアル
スクリプトリファレンス

サウンドの音量を下げる方法( パラメータ出力から設定まで )

先ずProjectWindowにて適当なAudioMixerを作成する

ProjectWindow > ContextMenu( 右クリック ) > Create > AudioMixer
0.png

今回はTestAudioMixerを作成、初期状態の画像が以下の通り
1.png

今回は画像のMaster要素( グループという )の操作をメインに扱う
次はこのAudioMixerを編集するためにAudioMixerWindowを開く
メニューの Window > Audio > AudioMixer
又はショートカットの

Ctrl + 8

2.png

AudioMixerのデフォルト画面が下の通り
3.png

今回メインで扱うのは画像の内での Groups 要素
Groupsの右端にある + アイコンをクリックまたはGroups要素上で右クリック Add child groupを選択し新しいグループを作成する
この際新たに作成したGroupは必ずMasterの下に来るMasterの下であれば各種グループの親子構造は自由に編集できる

今回はSEというグループを新たに作成した、新たなグループを作成したウィンドウ↓
4.png

ただしこのままではスクリプトからのアクセスは出来ずUnityのGUIからのみ編集可能の状態、これをスクリプトからアクセスし編集できるようにするまでが今回の記事

次に見る箇所はAudioMixerからInspectroに移る、SEグループを選択したうえでInspectorを表示すると下図のようになる
5.png
6.png

図のAttenuation 要素の Volumeにカーソルを合わせ右クリック > Expose 'Volume (of SE)' to scriptを選択する、こうすることでスクリプトからアクセス可能になる、ただしこのままだとスクリプトからアクセスする際のKeyがわからない
ちなみにVolumeでアクセスを試みたところ駄目だった
ではどんなパラメータ名になっているのか、確認する方法は以下の通り( 個人的にこれは罠だと思ってる、すっげぇわかりづらい )

7.png
8.png

赤矢印の箇所をクリックして開く、すると先ほど作成したパラメータ名がわかる( MyExposeParam )となってるところ
右クリックでメニューを開き、Rename を選択、今回は SE という名前にした
9.png

これでスクリプト上からアクセスできる
スクリプト例( あらかじめInspector上からmixerパラメータにAudioMixerへの参照を設定しておく )


    void Hoge()
    {
            mixer.SetFloat("SE", -40f);
    }

Enter fullscreen mode Exit fullscreen mode

要注意な点はここで設定する値は 0 ~ 1 の値ではなくdB単位( -80 ~ 0 )なので直感的な0 ~ 1での制御をしたい場合は別途 0 ~ 1 をデシベルに変換する関数を作成する必要がある

↓参考ページ
http://www.proaudioinfo.com/shiryou/db/db.htm

関数にするとこんな感じ


    // 0 ~ 1の値をdB( デシベル )に変換.
    float ConvertVolume2dB(float volume) => 20f * Mathf.Log10(Mathf.Clamp(volume, 0f, 1f));

Enter fullscreen mode Exit fullscreen mode

あとがき

いろいろエフェクトを掛けられたりできるので便利なため今後この AudioMixer を活用していきたい
今回はここまで、地味にこのパラメータをスクリプト上から操作するの手順が見つからなかった( Unityにはもう少しわかりやす手順書を作ってもらいたいところ或いはたんに見つけられてないだけ? )

Top comments (0)