アンビソニックに関するあれこれ

最近アンビソニックに関していろいろ聞かれることが多くなってきたので、調べてみました。

## アンビソニックとは

アンビソニックは3次元空間の360度全ての音声を記録、ミキシング、再生できる録音技術です。1970年代に発明されましたが、近年VRで360度音声が必要とされるまで商業的に活用されることはほとんどありませんでした。
アンビソニックの特徴は再生する時のスピーカーレイアウトと独立した方式で音声を記録して、再生環境に合わせたスピーカーレイアウトにデコードできることす。たとえば2chでも5.1chでも11.2chでも、アンビソニックの録音データを一つ用意すればそこから全てのスピーカー配置に対応する音声を作り出すことができます。

アンビソニックの大きな特徴は、再生前に信号処理により自由に音場を回転できることです(しかも無劣化で)。
これは特にVRデバイスを使って360動画を視聴するのと相性がよく、360動画の音声トラックにアンビソニックを使うことでヘッドマウントディスプレイのセンサーデータを使ってリアルタイムに定位が変化する音場を再現することができます。

なお、VRでアンビソニックを使う場合はヘッドホンで再生することが多いのですが、ヘッドホンで3Dの空間音響を再現するためにもう一つ重要なバイノーラルという技術がありますが、本記事ではバイノーラルについての説明は割愛します。


## A-FormatとB-Format

歴史的にみて、アンビソニックにはA-FormatとB-Formatという種類に大別されます。

現在**一般的に「アンビソニック」という語が意味するのはB-Format**の方ですが、アンビソニックマイクで録音をする機会があるならA-Formatというものも知っておいたほうが良いでしょう。

A-Formatとはアンビソニックマイク(たとえば[AMBEO等](https://en-us.sennheiser.com/microphone-3d-audio-ambeo-vr-mic))に組み込まれた4個のマイクが集音する音そのもののデータです。この音声データに変換処理をかけることでB-Formatのデータが得られます(変換するためのソフトやプラグインは大抵マイクに付属しています)。

B-Formatのデータは4個の音声トラックから構成される4ch音声データで、それぞれのチャンネルにはW,X,Y,Zという名前が付いています(ステレオ2chにおいて各チャンネルを「L」「R」と呼ぶのと似たようなもの)。このW,X,Y,Zのチャンネルには、以下のようなデータが記録されます。

* W: 無指向成分
* X: 前後の広がり成分
* Y: 左右の広がり成分
* Z: 上下の広がり成分

※L/Rステレオの音声をMid/Side(センターと左右)の2chに分ける信号処理がありますが、B-Formatはこれを三次元に拡張したものといえます。


## 高次アンビソニック

4chのB-Formatは全方向から来る音を記録できるのですが、L/Rステレオがざっくりと左・右しか記録できないのと同様に、4ch B-Formatでもざっくりと前・後ろや左・右や上・下といった感じでしか記録できません。より詳細に「斜めのこの辺」とかいう感じを記録するために考え出されたのが高次アンビソニックです。高次アンビソニックは4chのB-Formatに追加のチャンネルを入れることでより詳細な音場を記録することができるものです(高度な数学の話になるので詳細は割愛しますが、気になる方は球面調和関数とかで調べてください)。

4chのB-Formatを1次アンビソニックとし、2次、3次、4次、……と次数を増やすごとに詳細な音場が再現できるようになります。次数が増えると記録に必要なチャンネル数が増えます。2次アンビソニックでは9チャンネル、3次アンビソニックでは16チャンネル必要です。

手軽に使えるアンビソニックプラグインとして[AmbiX](http://www.matthiaskronlachner.com/?p=2015)がありますが、これは7次アンビソニックまで対応しています。ただし7次アンビソニックのデータは64チャンネル必要なので、1トラックで64チャンネル扱えるDAWでないと使えません([REAPER](https://www.reaper.fm)とか)。


## FuMaとAmbiX

高次アンビソニックのことも考え始めると、従来のB-Formatの記録方式では無理が出てくるようになりました。そこで高次アンビソニックのことまで考えてより発展させられるようにした**AmbiX**というフォーマットが登場しました。それに伴いAmbiXではない従来のB-Formatのことを**FuMa**と呼ぶようになりました。

FuMaとAmbiXでは W,X,Y,Z の各チャンネルがどう並ぶか？という点が異なります。

* FuMa: WXYZ
* AmbiX: WYZX

なので、**FuMaのアンビソニックデータをAmbiXのプレイヤーに渡してしまうと、音の聞こえてくる向き(定位)がおかしなことになります。**

また、FuMaとAmbiXではデータのノーマライズ方式も異なります。FuMaはMaxNという方式でノーマライズし、AmbiXはSN3Dという方式でノーマライズします。またさらに**FuMaはWチャンネルにの音量を3db下げます。**(MaxNとSN3Dの細かい話はまだ理解できていないので割愛します)

まとめると

* FuMa はチャンネル順が WXYZ で、WチャンネルはAmbiXと比べて -3db 弱くなります。
* AmbiX はチャンネル順が WYZX です。SN3D正規化を行います。
* AmbiXのチャンネル順 WYZX のことを ACN channel ordering と呼んだりします。
    * それに対して WXYZ のチャンネル順のことを FuMa と呼んだりしますが、この文脈における FuMa はチャンネル順のことだけを指しているので注意。

最近のほとんどのアンビソニック再生環境はAmbiXに対応しています。

* YouTubeはAmbiXをサポートしています。
* [GoogleのResonance Audio SDK](https://developers.google.com/resonance-audio/develop/overview)もAmbiXのアンビソニック音声を再生できます。
* [Unityがサポートしているアンビソニックフォーマット](https://docs.unity3d.com/ja/current/Manual/AmbisonicAudio.html)もAmbiXです。
* [Oculus Ambisonics Starter Pack](https://developer.oculus.com/downloads/package/oculus-ambisonics-starter-pack/)もAmbiXです。

…というわけで、今からアンビソニックを始めるなら**アンビソニックといえば、AmbiX！！**という認識で良いと思います。新しめなソフトは大抵AmbiXをサポートしているでしょう。
しかしちょっと古めなソフトはFuMaしかサポートしていなかったりしますし、古いアンビソニック録音データはFuMa形式になっていることもあります。そういうFuMa形式のデータに出会ったら、**AmbiXに変換してからじゃないと正しく再生できないよ！**っていうのは頭に入れておいてください。

有名所だと[Ambisonic Toolkit](http://www.ambisonictoolkit.net)はFuMa形式を使っています(AmbiX未対応)。

気の利いたシステムだと、出力時にFuMaかAmbiXを選べたりします。たとえば[360pan suite](https://www.audioease.com/360/)はFuMa、AmbiXのどちらにも対応しています。


## 高次アンビソニックの変換

高次アンビソニックのデータの次数を落とす変換は簡単にできます。たとえば3次アンビソニック(16ch)から2次アンビソニック(9ch)への変換を行いたい場合は、**先頭から数えて9chを取り出せば良いだけ**です。同じように先頭から4chだけを取り出せば1次アンビソニック(4ch)になります。これはFuMaでもAmbiXでも同様です。

## 参考

* [Facebook Audio 360 - Introduction](https://facebookincubator.github.io/facebook-360-spatial-workstation/Documentation/SpatialWorkstation/SpatialWorkstation.html)
* [Blue Ripple Sound - Technical Notes](http://www.blueripplesound.com/HOA)
* [Conversion from Ambisonics to TBE format](http://pcfarina.eng.unipr.it/TBE-conversion.htm)