AVAudioEnvironmentNode
AVAudioEnvironmentNode(環境ノード)は3Dオーディオ環境をシミュレートするミキサーノードで、AVAudioPlayerNode などの AVAudioMixing プロトコルに準拠するノードをソースとして接続することができる。AVAudio3DMixing プロトコルに準拠しているが、これは現在は AVAudioEnvironmentNode のみで実装されている。

環境ノードは暗黙の「リスナー」を持っていて、リスナーの位置と方向を制御することにより、ユーザーは仮想世界にいるような体験をすることができる。また環境を特徴づける補助的な距離減衰(障害物など)や残響(リバーブ)のプロパティを定義することもできる。
環境ノードは現在は2チャンネル以上のフォーマットの合成をサポートしていない。ある入力がステレオの場合はそのオーディオは空間化されずにそのまま通される(ステレオには何も効果がない)。なのでモノラルの入力を接続して空間化しなければならない。

有効なレンダリングアルゴリズムは AVAudioEnvironmentNode のapplicableRenderingAlgorithms
メソッドで取得可能。
AVAudio3DMixingRenderingAlgorithm
定義されているオーディオレンダリングアルゴリズムの種類。入力ノードに対して renderingAlgorithm
を設定する。
.EqualPowerPanning
デフォルトのレンダリングアルゴリズム。
最も単純なパンニング(左右に動かす)アルゴリズムで、ステレオフィールドにミキサーバスのデータをパンする。
.StereoPassThrough
モノラル/ステレオ入力を直接ミキサーに渡す。3D レンダリングを無効にする。
.SoundField
マルチチャンネル(サラウンド)へレンダリングするためのアルゴリズム。
.SphericalHead
シンプルなバイノーラル合成アルゴリズム。HRTF よりも CPU を使わない。
.HRTF
頭部伝達関数 (Head Related Transfer Function) を利用した高品質なバイノーラル合成アルゴリズム。ヘッドホンで3次元空間をエミュレートする。SphericalHead よりも CPU を消費する。
オーディオの空間化
空間化のためにソースオーディオの位置を設定する。position では AVAudioMake3DPoint
で3次元空間内の位置を指定できる。障害物の設定には obstruction, occlusion を使用する。




環境ノードのリスナーの位置と方向を設定して、オーディオの聞こえ方を制御する。
listenerPosition は AVAudioMake3DPoint
で3次元空間内の位置を、listenerAngularOrientation
は、yaw, pitch, roll の3要素で角度を指定する。

補足:yaw, pitch, roll

yaw … 船体の左右の向き
pitch … 船体の上下の向き
roll … 船体の前後を軸とした回転
資料
リファレンス
AVAudio3DMixing
https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAudio3DMixing_Protocol/
AVAudioEnvironmentNode
https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAudioEnvironmentNode_Class/index.html
参考になる WWDC セッション
- WWDC2016 Delivering an Exceptional Audio Experience
- WWDC2015 What's New in Core Audio
- WWDC2015 Audio Unit Extensions
- WWDC2014 What's New in Core Audio
- WWDC2014 AVAudioEngine in Practice
実装例など
AVAudioEngine 3D Audio Example
https://developer.apple.com/library/mac/samplecode/AVAEGamingExample/Introduction/Intro.html
Details on using the AVAudioEngine
http://stackoverflow.com/questions/33155925/details-on-using-the-avaudioengine
iOS 3D Audio Test
https://github.com/lazerwalker/ios-3d-audio-test
How to set an AVAudio3DMixingRenderingAlgorithm for binaural mixing
http://stackoverflow.com/questions/33941606/how-to-set-an-avaudio3dmixingrenderingalgorithm-for-binaural-mixing