はじめに
イケメンテックラボで 「王子様のささやき朗読VR」の メインエンジニアを務めている、茨田と申します。
第4回目になる今回は、現実世界と同じ様に音がなっている方向がわかる技術、立体音響を実現するResonanceAudioをご紹介させていただきたいと思います。
▼以前の記事はこちらから
「王子様のささやき朗読VR」で、最初にプランナーから貰ったオーダーは、「2人きり」で、「雰囲気ある」場所で、「囁かれたい」というものでした。
今回も「囁かれたい」というポイントを実現するには、どの様な要素が必要か考えました。
まず、囁かれるといことは、耳元に相手が来ると言うことです。これには、相手との距離感が伝わらなければいけません。
また、耳元で囁かれると言うことは、囁かれている耳と、囁かれていない耳では、聞こえ方が違うはずです。これには、相手が自分に対してどの位置で囁いているかが分からなければいけません。
今回は、これらの問題を解決してくれる、ResonanceAudioの使い方をご紹介したいと思います。
立体音響とは?
現実世界で言うと、横断歩道を渡るときに、「右から車が来ている」又は「左から車が来ている」、「音が小さいから遠い」、「音が大きいから近い」など、様々な音を聞き分けていると思います。
これは、音の方向や、音の大きさ、距離による減衰など、様々な要素で組み上がっています。
このような様々な要素をシミュレーションして、現実世界の様な音の聞こえ方にするのが立体音響です。
王子様のささやき朗読VRでの利用方法

王子様のささやき朗読VRでは、上の画像の様に複数の音を用意していました。環境音の暖炉の音や、ビッキーの登場を知らせる扉の音、ビッキーの足音や喋る声が設定されています。
王子様のささやき朗読VRではまず部屋に入ると、暖炉の方向からスマホの音が鳴っており、スマホに視線を合わせることで、暖炉を見つめるとビッキーが登場することを教えてくれます。暖炉からビッキーが登場する扉へと視線を誘導するために、扉から音がなる様に設定し、自然と音のした方向を向くようにしました。
次に、ビッキーとの距離感を掴むために利用したのが、足音です。足音があることで、ビッキーがどっちの方向に居て、近づいてくる、離れていくなど、距離感を最大限に伝えることができます。
また、環境音の暖炉の音は、ビッキーの声に集中していると、さほど気になっていないかもしれませんが、ちゃんと暖炉のある方向から音が聞こえることによって、意識しておらずとも、空間に立体感が生まれます。
そして最重要が、ビッキーの声です。三木が書いた記事でもある通り、ビッキーはだんだん近づいてきてくれます。もちろん、ビッキーの位置で音の大きさも変わってきます。前回紹介したLipSyncも合わさり、終盤にはビッキーがすぐそばで囁いてくれているかの様な表現を実現できました。
王子様のささやき朗読VRの導入部分ではこの様になっています。
PCの場合、左上のコントローラを操作するか、画面をクリックしながら動かすことで、視点をVRの様に動かすことができます。
視線を最初から動かした状態でも再生可能なので、いくつかの方向で固定して、聴き比べてみると違いがよくわかるかと思います。
ResonanceAudioの使い方
ダウンロードとインポート
まずは、下記のResonanceAudioをサイトからResonanceAudioForUnity_x.x.x.unitypackageをDLします。
※x.x.xはバージョンです。今回使用したのは1.2.1で、「王子様のささやき朗読VR」では1.2.0を使用していました。

Assets > Import Package > Custom packageから、先ほどDLしてきた、ResonanceAudioForUnity_x.x.x.unitypackageを選択してインポートします。

プロジェクトの設定
Edit > Project Settings > Audio を選択すると、InspectorにAudioManagerが開かれます。
AudioManagerのSpatializerPluginをResonance Audioにします。
AudioManagerのAmbisonicDecoderPluginをResonance Audioにしてプロジェクトの設定は完了です。

音源の設定
音は以前の記事でも紹介したユニティちゃん(© UTJ/UCL)を使用したいと思います。
※DL方法やインポートなどは以前の記事の「ユニティちゃんの準備」を参照してください
音源の位置がわかりやすい様に、Sphereを設置して、そこに音源を設定します。
生成したSphereのInspectorの下の方にある、AddComponentを選択し、ResonanceAudioと検索して、ResonanceAudioSourceを選択してアタッチします。

ResonanceAudioSourceを設定すると、同時にAudioSourceが自動で設定されるため、AudioSourceに以下の設定を行います。
- AudioClipに立体にしたい音を設定する。
- OutputにMasterを選択する。
- SpatialBlendを3Dにスライドする。
- SpatializeのチェックボックスにチェックしてONにする。
- SpatializePostEffectのチェックボックスにチェックしてONにする。

これで位置や距離によって音の聞こえ方が変わる様になりました。
音源を動かしながらどの様に聞こえるか試してみる
音を設定したSphereが自動で動く様にスクリプトを書きます。
今回は、カメラの周りを自動で回って音がどの様に聞こえるか試してみたいと思います。
まずは、上記で設定していた音源のAudioSourceにLoopの設定があるのでチェックをいれます。
これで同じ言葉を繰り返してくれる様になりました。
次にAssetの中に新規スクリプトを作成します。
Assetで右クリックしてCreate > C# Scriptを選択します。
スクリプトの名前はMovingSphereとしておきます。

ソースコードを入力する
using UnityEngine;
public class MovingSphere : MonoBehaviour
{
private readonly float RADIUS = 20.0f; // 円運動の半径
// 毎フレーム実行される処理
void Update ()
{
// x,y,zの座標を計算する
Vector3 pos = new Vector3
(
Mathf.Sin(Time.time) * RADIUS, // X軸の移動量計算(-20~20)
0, // Y軸は移動なし
Mathf.Cos(Time.time) * RADIUS // Z軸の移動量計算(-20~20)
);
// x,y,zの座標を設定する
transform.position = pos;
}
}
作成したMovingSphereをダブルクリックし、上記のソースコードと同じになる様に編集します。
ソースコードの説明
上記のソースコードは、アタッチしたオブジェクトをX軸とZ軸上で円運動させるソースコードです。
RADIUSはオブジェクトが動く半径でこれを小さくすると、オブジェクトの移動範囲も狭くなります。
Time.timeは開始ボタンを押してからの経過時間なので、どんどん増加しています。
これにより、SinとCosの値はそれぞれの周期に対応した、-1から1の幅で常に変化する様になります。
SinとCosはそれぞれの周期で、-1から1の値になるので、半径が20の場合、XとZは-20から20の間の値になります。
ソースコードが完成したら、音を設定したSphereのInspectorの下の方にある、AddComponentを選択し、MovingSphereと検索して、MovingSphereのスクリプトを選択してアタッチします。
これで再生すると、カメラの周りをSphereが自動で回転しながら音を再生する様になります。
サンプル動画
サンプル動画では上記までの設定を行って、確認がしやすい様に、カメラの代わりに赤いキューブにAudioListener(音の受信機)を設定して、その周りを青いスフィアが回る様にし、上空からカメラで撮影しています。
あえてキューブを円運動の中心に配置しなかったので、スフィアとキューブの位置関係で、音の強弱や方向などが動画で確認できるかと思います。
以上で、ResonanceAudioの導入紹介は終了です。
ResonanceAudioとUnityのバージョンによる不具合
「王子様のささやき朗読VR」の開発当時、Unity2017.3.xとResonanceAudioSdk(ver1.2.0)の組み合わせで 、Androidの実機でシーン遷移すると音が聞こえなくなる問題がありました。
Unity2017.2.1で新たに入ったAndroid固有のビルドに問題があるらしいのでUnity2017.2.0f3以前なら動作するらしいです。
Unity2017.4.0f1以降でも動作することを確認したので、新しいUnityを使っている場合は気にしなくても大丈夫なはずです。
参考URL
https://github.com/resonance-audio/resonance-audio-unity-sdk/issues/15
おわりに
今回は、現実の様な音響を再現するResonanceAudioの導入方法と、開発時に実際に起きた問題や解決方法を説明させていただきました。
今回説明した機能の他にも、ResonanceAudioには、壁の材質を選んで反響させるなど、様々な機能があります。
興味がある方は是非、検索などして試してみてください。
次回以降も、「王子様のささやき朗読VR」で使った技術やTipsなどを紹介させていただきますので、よろしくお願いいたします。