旋转Ambisonics
正如我们在 Ambisonics作为空间音频的中介表示法(针对VR)中所见, Ambisonics是一种多声道音频格式,可以很好地表达音频混音的空间特性。Ambisonic音频文件/混音/信号可以被看做整个声场,也就是来自不同方向、到达听者双耳的不同声源的混合,各有不同的入射角。
通过矩阵实现旋转
Ambisonic 表示法的一个实用特点就是可以很简单地进行旋转,只要通过巧妙操作混音增益矩阵即可*。在资源方面(CPU和内存),这就相当于计算声像摆位增益;而且由于计算是在每个音频帧(~10-20 ms)而不是每次音频采样(~2 µs)进行,所以它的开销量级远远小于滤波甚至混合(叠加)音频信号。
在旋转一个Ambisonic信号之后,你会得到新的Ambisonic信号,其所有组成元素的入射角都进行了相应的旋转。
Wwise中的Ambisonics旋转
Wwise会自动实现Ambisonic声场的旋转,使其符合相关游戏对象和听者的相对朝向。为了使用这种魔力,你只需要将Ambisonic声音定位设置为3D Game-Defined并将其连通到一条Ambisonic总线,如以下截图所示。游戏对象和听者的朝向是通过Wwise API由游戏驱动的。
(图1-a)
(图1-b)
(图1-c)
(图1-d)
图1 - 在Wwise中启用Ambisonics 旋转需要的定位和总线设置。请注意在(a)中选中的3D和Game-Defined选项。素材会连通到一条Ambisonic声道设置的总线。(b)展示了如何将总线设置为Ambisonics。在Profiler视图(c)中可以观察到该通路。实际的旋转是相关游戏对象和听者朝向决定的,在Unity(d)中由游戏引擎驱动。
以下的音频示例展示了Ambisonic旋转,你需要用耳机来听。音频示例1中,播放了一个Ambisonic文件, 并使用Wwise中的Auro Headphone插件将其转化为双耳立体声。为了产生音频示例2的效果,我们只需要改变听者的朝向(使用游戏引擎)就可以指向左方,而声场对象朝向前方。听者会逆时针旋转(向左),这就是你听到声场顺时针旋转的原因。
音频示例1
音频示例 2
使用Ambisonics素材的环境声
对于Ambisonics信号/背景/流文件的各声道,通过很简单的操作就能旋转它们所表示的声场,这使得在游戏中实现动态环境声变得简单了。你需要使用朝向不变并指向特定参照物的游戏对象来回放它们。比如,在一段录音中,如果有一个指向性清晰的听觉元素,它对应于游戏中的一个视觉元素,那么你会希望游戏对象的朝向让它们两者一致。当Listener(听者)在空间中移动并改变朝向时,Ambisonics声场在总线中混音时会自动旋转,结果就是,声场与视觉保持一致。
使用录好的材料
在Wwise中,你可以导入使用合适的Coincident microphone(比如http://www.core-sound.com/TetraMic/TetraMic-small3.jpg)捕获的Ambisonics录音,只要你先将它们转码为B-format(常见的一阶Ambisonics)即可。大部分麦克风都带有自己的软件,用来转换原始麦克风信号,一般是从A-format转为B-format**。
这里有一个实地录音在Wwise中进行旋转的示例。示例音频3 (原始音频)是使用SPS-200麦克风录下的,之后被转码为B-Format并导入Wwise。最值得注意的声音事件是汽车喇叭声,它位于原始示例中的偏左位置。在音频示例4中,我们将听者向左旋转了90度(就像我们在上个示例中做的),接下来进行回放并录下输出。汽车喇叭声基本移到了右边,其它声源也相应地旋转了。
音频示例3
音频示例4
“并轨输出”环境声
在Wwise的互动捕获会话过程中,我们可以使用Wwise Recorder 插件生成声音文件。比如,你可以将多个单声道声源放置在空间中,混音成单一Ambisonics信号,即可在Wwise设计工具中创建一个复杂的环境声。然后使用Wwise Recorder 插件对该Ambisonics信号进行混音。下一步就是将录好的Ambisonics 素材重新导入你的Wwise工程,并将其作为可旋转的3D环境声在游戏中使用,就像它是录好的素材一样。
这个工作流程比较类似一般在线性DAW(如Nuendo、Reaper、ProTools)中的“bouncing”或“freezing”选项。将环境声并轨输出到硬盘上而非将其各组成元素全部保留并同时回放,其目的之一就是节约运行时的资源(CPU和内存)。这可以通过节省磁盘空间,只播放一个多声道文件(而不是同时播放很多单声道文件)来实现。
在Wwise中Bounce环境声
- 创建一条总线并将其声道设置为Ambisonics (阶数任意)。
- 在该总线上插入一个Wwise Recorder插件。因为它是Ambisonics总线,所以音频会以Ambisonics格式被写入文件。
- 将所有的单声道声源(或它们的共同父级)连通到该总线。
- 使用3D User-Defined Position Editor为每个声源进行空间定位。
- 在合适的时候使用Soundcaster Session、Event、Random Container,或它们的组合项来触发声音。当所有声音停止播放时(自然结束或者是被停止),所有音频就会被“bounce”到磁盘上。通过在Recorder插件中直接点击Import in Wwise... ,你就可以在工程中直接导入并轨之后的声音。
- 检查这个新素材,并将其定位类型设置为3D。在游戏中播放时,它会按照前文所述方式进行旋转。
(图2-a)
(图2-b)
(图2-c)
图2 - Wwise Sample Project 的Ambisonics City Ambience Blend Container正被录制到一个Ambisonics文件中。截图(图2-a)中左侧的Project Explorer视图 展示了上述录音(示例1——Ambisonic City 3D Ambiance)组成的环境声,其上叠加了很多独立的声音,并通过Random Container中指定的各种行为进行混音和回放。截图(图2-b)的例子展示了素材(或一组素材)如何使用3D User-Defined Position Editor来放入空间中。截图(Fig 2-c)展示了Wwise Recorder插件的设置。请查看该插件的更多详情。
正如在之前的博客 Ambisonics作为空间音频的中介表示法(针对VR)中所述,你最多可以录制三阶Ambisonics来追求空间化精度,但是,这样做所带来的所需声道数(二阶9声道,三阶16声道)以及内存需求可能导致得不偿失。而且,录好的Ambisonics文件会保留各个组成元素的位置方向,而事后是不能单独更改它们的属性的——比如其各自的音量和滤波***。
注脚
* 只要Ambisonics格式是“full-sphere(完整球体)”
** Wwise接受符合FuMa协议的AMB文件,这些文件可以通过其header中的相应GUID被识别。参见详情
***有的信号处理技术允许这样做。但是,在我们的情况中它们并不很适用,因为我们已经在混音前获取了各个组件。
Credits
-截图图1(d):Unity 3D
-录下的3D环境声示例,以及修改版本:
由A-Format SPS200麦克风录制的Ambisonic B-Format环境声
Audiokinetic Inc. All rights reserved.
Audio content provided by Studio Lab SONORUM
(c) 2016. www.sonorum.ca
这个文件中包含的Audio Content(音频内容)产权归Studio Lab SONORUM所有。对于此Audio Content,您的唯一权利就是将该Audio Content作为这个Sample Project(示例工程)的一部分进行试听。该Audio Content不能为商业用途或公众展示进行使用或改动。
评论
rixin chen
July 07, 2018 at 10:52 pm
我觉得很有用您讲的这些,也看了你在youtub的视频,我很喜欢。希望能出一些更细致一些的教程,在Unreal4和unity3D上。