【Oculus】虚拟现实音频处理VR Audio - Part 1
本文是Oculus Audio SDK文档的阅读笔记,作者只对感兴趣的内容进行了简单的翻译。
原文链接:https://developer.oculus.com/documentation/audiosdk/latest/concepts/audio-intro-overview/
一、简介
从投币游戏开始,音频就是计算机和视频游戏体验的重要一部分。相较于传统行业,虚拟现实采用头戴设备(HMD)和耳机,可以追踪用户的头部的方向和位置,这些信息可以为音频技术带来许多新的机遇。目前,虚拟现实仅仅关注视觉信息,例如分辨率、延迟和追踪,但是音频也必须跟上来提供最好的现场体验。
本文关注于虚拟现实音频相关的挑战、机遇和解决方法,以及传统游戏开发相关技术需要针对VR做哪些改变。本文不对音频、听觉和人的听觉系统进行深入的研究,如果感兴趣的话,可以谷歌以下关键词:Head-Related Impulse Response,Head-Related Transfer Function,Sound Localization。
二、定位和人体听觉系统
人有两只耳朵,但是可以在三维空间中定位声音,根据时间、相位、强度和频谱的变化,依靠于心理声学和推理去定位。本节总结了人类定位声音的方法,并应用这些知识来解决空间定位问题,让开发者可以把耳机的声音信号进行转化,让这个声音听起来像是来自于空间中的某个具体位置。
人类定位声音的两个关键因素是方向和距离。
2.1 方向定位
2.1.1 侧面(Lateral)
侧面的定位是最简单的,当一个声音更靠近左边时,左耳会比右耳更早听到,并且听到的声音更大。通常来说,两只耳朵听到的声音越接近,那这个声音就越靠近中间。
然后,还有一些有趣的细节。首先,我们主要依靠到达两耳的延迟来定位声音,也就是“耳间时间差别”(ITD: interaural time difference);或者依靠两耳的音量差别,也就是“耳间强度差别”(ILD: interaural level difference)。我们使用的定位技术极大的依赖了信号的频率内容。
当声音低于一定频率时(500到800HZ之间,取决于源),会很难分辨出强度的差别。但是,在这个频率范围的声音,比人脑袋的规模还要大半个波长(have half wavelengths greater than the dimensions of a typical human head),让我们可以依靠两耳之间的时间信息(phase相位)区别。
另一个极端,当声音的频率高于1500HZ时,比脑袋小半个波长,用相位信息来定位声音就不再可靠了。对于这些频率,我们需要根据由脑袋引起的强度差别,叫做head shadowing,这是由于脑袋的阻挡,导致较远的那只耳朵听到的声音强度有所衰减,如下图所示。
我们也根据信号的起始时间差来判断,当声音播放时,哪个耳朵先听到会有很大影响,但是这个仅能帮我们定位突变的声音,而不是连续的声音。
对于频率在800HZ到1500HZ的声音,我们需要依靠时间差别和强度差别来同时判断。
2.1.2 前后(Front/Back/Elevation)
前后的判断会比侧面的判断难很多,因为我们无法依靠时间差和强度差,因为它们的差为0,如下图所示。
人体依靠由人体和脑袋引起的光谱差别(spectral modifications)来解决混淆。这些光谱的差别是因为脑袋、脖子、肩膀、躯干、尤其是外耳(或耳廓)引起的过滤和反射。由于来自不同方向的声音与人体的交互会不一样,我们的大脑通过光谱的差别来推测源的方向。从前方过来的声音会与耳廓的内部产生共振,而从后侧传来的声音被为耳廓削弱(shadowed)。类似的,从上方传来的声音会在肩膀处反射,而来自下方的声音会被躯干和肩膀阻挡(shadowed)。
以上这些反射和阻挡被结合起来,创造了一个方向选择滤波器(direction selective filter)。
问题:如何考虑人的高度和姿势?
2.1.3 脑袋相关的转换方程组 (HRTFs: Heade-Related Transfer Functions)
一个方向选择滤波器可以被编码为一个脑袋相关的转换方程(HRTF),这个HRTF方程是当今3D声音空间关键技术的基石,具体怎么样来构造这个方程,将来另外一个文档中进行详细的说明。
2.1.3.1 脑袋模型
仅仅依靠HRTF方程组还不足以准确定位声音,因此我们需要一个脑袋模型来辅助定位。通过旋转脑袋,就可以把一个前后定位的问题转换为侧面定位的问题,让我们可以更好去解决。
例如下图中的A和B无法通过强度和时间的差别来区分,因此它们是一样的。通过轻微的旋转脑袋,听着就改变了两只耳朵的时间和强度差别,来帮助定位声音。D1比D2要近,因此可以判断出声音在用户的左侧(后侧)。
类似的,扭动脑袋,可以帮助定位垂直的物体。在下图中,D1变短D2变长,因此可以判断物体在脑袋的上面。
2.2 距离定位
ILD,ITD和HRTFs可以帮助我们定位声音源头的方向,但是对于声音的距离只能给出一个宽泛的参考。为了定位距离,我们需要考虑一系列的因素,包括起始时间的延迟,声音和混音的比例,以及运动视差。
2.2.1 声音大小
声音大小是距离最明显的线索,但是有时候会误导。如果我们缺少参照,我们就无法判断声音从源头的削弱来衡量距离。幸运的是,我们对生活中的声源很熟悉,例如乐器、人声、动物、汽车等,因此我们很好的判断这些距离。
对于合成的和不熟悉的声源,我们没有参照,那就只能依靠其他的信息或者是相对音量的改变来判断一个声音是接近还是远离。
2.2.2 起始时间延迟(Initial Time Delay)
起始时间延迟描述了声音和回声的区间,这个区间越长,我们就离声源越近。无回声或者空旷的环境中,例如沙漠,不会产生可感知的回声,这会导致距离的估计更加困难。
2.2.3 声音和混音(Reverberation)的比例
在一个有回声的环境中,声音之间会有很长的、散开的音尾融合,在不同平面上反射,最终消失。如果我们听到的原声比混声要多,那我们就离声源越近。
音频工程师在人工混音时,常常需要考虑这个因素,来调整乐器和歌手的位置。
2.2.4 运动视差
声音的运动视差可以体现距离,例如比较近的昆虫可以从左边很快的飞到右边,但是远处的飞机可能需要好多秒来达到同样的效果。因此,如果一个声源运动的比一个固定的视角要快,那我们就猜测这个声源来自附近。