tetu式

ゲームと音楽・作曲の自己満足と悩みどころの多いプログラムのブログ。

Unity いまさら気付いたオーディオ系のこと

今作ってる2DゲームのBGM担当も自分なのですが、いつもはエディター上でBGMやSEがちゃんと鳴っているかどうかの確認をしてました。

しかし、今回Android端末側でイヤホンつけて操作してたら鳴っている音に違和感が感じられました。
なんていうか・・・モノラル音声みたいな感じで全ての音が中心にギュッと詰まったような音になってました。

これだと音を出す位置がBGMとSEで全く同じになってしまうので干渉し合ってSEが鳴るたびにBGMがかき消されるみたいな現象が起こってしまいます。
BGM自体もむりやり詰め込んだ音になるのでかなりノイズが発生しやすい音源になります。

音楽のプロではないですが、聞いててやはり気持ち悪いので今回何とか直してみようといろいろ調べてみたわけです。


ファイル自体はちゃんと2ch出力にしてるのでファイルの問題ではないはず。
使ってるファイルがそのまま使われてると考えていたので今までUnityでオーディオファイルの設定をしたことがなかったな、と思い、Unityのエディター上でオーディオファイルをクリック。

目を引いたのが3D Soundのチェック。

デフォルトで3D Soundにチェックが入っていたし、意味的にサラウンド効果みたいなものと思ってたので今までずーっとスルーしてたのですがどうやらこいつが原因のようです。

もともとUnityが3Dゲームに強い開発エンジンだったのでこれがデフォルトだったのでしょう。

音を鳴らすのも本来オブジェクトにAudio Sourceというコンポーネントをつけて鳴らし、AudioListenerコンポーネントを持っているオブジェクト(通常Main Cameraにデフォルトでついてる)がその音を聞く役目だったようです。
FPSのゲームを考えればMain CameraにListenerがついてるのは確かに納得。

3D Soundにチェックが入ったオーディオファイルを持つAudio SourceコンポーネントのオブジェクトはAudioListenerコンポーネントのオブジェクトに向かって音を出し、その位置状況で音量やパンを計算してスピーカーを通して聞こえる、と。


なのでSEはまだ良いのですがBGMだとこれが良くない。
イメージ的にはステレオスピーカーで出している音を全方位モノラルマイクで拾って聞いてるようなもの。
これじゃイヤホンで聞いた通りの音になるはずがないです。


今開発してるゲームの場合、Main CameraについていたAudioListenerを消して、別にAudioManagerというオブジェクトを作り、そこでBGMとSEを全て管理するような状態にしていました。
AudioSourceとAudioListenerもどっちも保有しているオブジェクトです。

なので音を出す位置と音を取る位置が全く同じなので全ての音が中心に集まったように聞こえていた、というわけです。


Unityで2Dゲームを作る方、サラウンドにこだわらないなら全てのオーディオファイルの3D Soundチェックを外しましょう。