2016年5月9日月曜日

4chサラウンドをAmbisonicsに変換する

VR音響について調べていたらAmbisonics(アンビソニックス)というキーワードが出てきたので、調べてみました。

Ambisonicsとは

前後左右上下を含めた360度全周のサラウンドを4chの音声信号で表現する手法です。
通常のサラウンドでは4chなら4個、5.1chなら6個、7.1chなら8個のそれぞれのチャンネルの音声を記録して個々のスピーカーに送ります。

Ambisonicsではこのように単純にチャンネル数分の音声信号を記録するのではなく、ベースとなる音声信号サラウンド感を与える音声信号の成分を記録します。
これはちょうどステレオ2chをセンター(Mid)とサイド(Side)に分けて処理する方法をステレオからサラウンドに拡張したものだと言えます。

Mid/Sideの処理方法

Ambisonicsについて考える前に、Mid/Sideの処理方法について説明しておきます(知ってるよという方は読み飛ばしてください)。
ステレオ2chの音声をセンターの成分(Mid)と左右の広がりの成分(Side)に分けるには、次のような変換を行います。
M = L + R
S = L - R
逆にMidとSideからLeftとRightの信号を取り出すことも可能です。
L = (M + S) / 2
R = (M - S) / 2
これは最初にMとSを求める際の2つの式を足すか引くかすることで容易に求められます(2で割るのをLとRを求めるときではなくMとSを求めるときに行う場合もあります)。

単純な2chステレオで音声を記録する方法と比べてMid/Side方式で音声を記録することの利点は、ステレオ感を調整可能であることです。Sideの信号を強くするほどステレオ感が増し、逆にSideの信号を無音にすれば完全なモノラル音声になります。
これはテレビ放送やラジオなど、ステレオとモノラルを両方同時に対応させたい場合等に便利です。また、マスタリング等行う際にMidとSideに信号を分けて処理することで単純なステレオ2chに対する処理を行うよりもよりがっつり音圧を稼ぐことができたりします。

Ambisonicsの処理方法

MidとSideから2chのステレオ信号が取り出せるのと同じように、基準となる信号(W)前後の広がりの信号(X)左右の広がりの信号(Y)上下の広がりの信号(Z)の4つの信号を用いることで、360度全周の音場を再現することができるのです。しかもこの方法では、Mid/Sideの利点で挙げたのと同じように、後からサラウンド感を調整可能であるという利点があります。
例えば、VRデバイスのヘッドトラッキングの値によってリアルタイムにサラウンドの音場全体を回転させるといったようなことができるのです。

Ambisonicsでは以下の4つのチャンネルの音声信号を持ちます。
W = ベース信号
X = Front - Back
Y = Left - Right
Z = Up - Down
例えば4chのサラウンドソースをAmbisonicsの音声信号に変換するには、次のようにします。
front = (FrontL + FrontR) / 2;
right = (FrontR + BackR) / 2;
left  = (FrontL + BackR) / 2;
back  = (BackL + BackR) / 2; 
W = (FrontL + FrontR + BackL + BackR) / 4;
X = front - back;
Y = left - right;
Z = 0;
Wは全てのチャンネルの加算(ただしそのまま足すと音量のピークが4倍になるので、4で割る)。
4chサラウンドの場合、上下の定位が存在しないので、Z=0としています。
front, right, left, backの成分さえ求められれば4ch以上の多チャンネルサラウンドでもAmbisonics方式に変換できます。

Google Cardboard SDKに最近追加されたCardboardAudioEngineクラスではAmbisonicsの音声を再生することができるので、手軽に360度音響をVRに導入することができます。
ちなみにAmbisonicsの4チャンネルの音声信号を実際に音声ファイル上の何番のチャンネルに入れればいいのかがパッと調べてもわからなかったのですが、上記WXYZの各信号を次のチャンネル順で入れたらCardboard SDKでは正しく再生されました。

  1. X
  2. Y
  3. Z
  4. W
ちなみに、Ambisonics音源として360度全周の録音ができるマイクというのも開発されているようです。THETAみたいなカメラにAmbisonicsマイクが付いたらおもしろいだろうな!

0 件のコメント:

コメントを投稿