はじめに
Unityで音量設定機能を用意する場合、
基本はAudioMixerとuGUIのSliderを使うことになると思います。
やり方はこちらの記事が分かりやすくオススメです。
http://tsubakit1.hateblo.jp/entry/2015/05/23/234053
しかし、いざその通りに実装してみると、
(機能としては問題ないものの)どこか使いにくく感じます。
具体的にはすぐに音量が下がってしまって細かい調整がしにくいです。
今回はその点を解消する方法をご紹介したいと思います。
デシベルと音圧
なぜそのように感じるかの推測ですが、
AudioMixerから抜き出せる「Volume」がデシベルだからということになるでしょうか。1
デシベルは利便性のために音圧を常用対数で変換したものです。
すなわち、上がり幅が線形ではありません。(20デシベル上がるごとに音圧は10倍になる)
そのため、値が大きい領域では急激に変化し、小さい領域ではほとんど変わらないということになります。
ただデシベル自体が人間の感覚に近いらしいので、音量調整をデシベルでやるのは何もおかしくない気もするのですが…。
スライダーなどで調整するとなると、スライダーを動かす量と音圧の変化量が大きく異なるため何となく扱いづらいと感じるということなんでしょうか。
結論
ともかく、Unityのスライダー(0~1)で音量を調整するにはデシベルではなく音圧で行う(下記の変換を行う)ことを推奨します。
- スライダー値(s [0.0001, 1]) → AudioMixerのVolume(v [-80, 0])
v = 20 \times \log_{10} {s}
- AudioMixerのVolume(v [-80, 0]) → スライダー値(s [0.0001, 1])
s = 10^{\frac v {20}}
ソースコード
ということで、最初から音量調整用を想定したスライダーのコンポーネントを作りました。
人間の感覚に合わなくなった…のかもしれませんが、調整するにはいい感じでできます。
よろしければ使ってみてください。
unity-volume-slider
参考
正確にはUnityのVolumeの単位は一般的なデシベルとは違うようです。一般的には0デシベルを最小可聴値とするのに対し、Unityでは0デシベルがデフォルト値的な何かになっているようです。なので範囲は-80~20。まあ基準値からの比という意味では同じです、多分…。 ↩