三、3D音频的空间化
前文讨论了人类如何在三维空间中定位声音,现在,我们反过来问,“我们能不能应用这些信息来让人们认为一个声音来自于空间中的某个具体位置?”
答案是YES,否者的话,这篇文章就会非常短了。VR音频很重要的一部分就是空间化:能够让一个声音听起来来自于三维空间中的某个位置。空间化给用户提供了在一个真实3D环境中的感觉,可以加深immersion。
和定位一样,空间化有两个重要部分:方向和距离。
3.1 使用HRTF的方向空间化
我们知道不同方向的声音,在身体和耳朵里的传播是不同的。这些不同的影响构成了HRTF的基础,让我们来定位声音。
3.1.1 得到HRTFs
最准确的方法是把话筒放在人的耳朵里,然后放在一个无回声的环境里,然后在房间里从各个重要的方向播放声音,并记录下话筒里的声音,通过比较原始声音和话筒的声音就可以计算出HRTF。(Oculus的音频工程师在一次演讲中提到,这种方法不是很实际,对于被测者是个torture)
两只耳朵都必须这样做,并且需要从足够多的离散的方向来建立模型。但是这些模型只是针对一个人的,在现实世界中,我们无法得到每个人的模型,因此生成一个通用的模型一般也够用了。
大多数基于HRTF的空间化方法,都采用一些现有的公开数据集,例如下面的4个。
IRCAM Listen Database
MIT KEMAR
CIPIC HRTF Database
ARI(Acoustics Research Institute) HRTF Database
大多数HRTF的数据集中不包含各个方向的HRTF,例如头下区域。有些HRTF数据集只进行了稀疏采样,只有5-15个自由度。
大多数方法,或者采用最近的HRTF,或者进行插值。在这个领域有许多研究,但是对于基于桌面的VR应用,通常情况下都能够找到足够的数据集。
3.1.2 应用HRTFs
给定一个HRTF数据集,如果我们知道了声源的方向,我们就可以选择一个HRTF然后把它应用到该声源。这常通过一个时域的卷积或者一个FFT/IFFT对实现。
如果你不知道这些事什么东西,也不用着急,这些细节只有当你自己实现HRTF时才用得到。本文讨论的是应用的细节,例如怎么存储一个HRTF,当处理音频时如何调用。我们关注的是高层的逻辑,“将音频进行进行过滤让它听起来来自于一个特定的方向”。
由于HRTFs会考虑到听众的头部位置,因此在进行空间化时,需要带耳机。如果没有耳机,就需要应用两个HRTF方程组:模拟的一个,和真实通过身体得到的。
3.1.3 头部追踪
听众本能的会通过头部的运动来分辨空间中的声音,如果一个听众的脑袋向一侧转了45度,那我们就必须在他们的听觉环境中体现出来,否则音响就会出错。
VR头部设备(例如Rift)可以追踪听者的头部方向(或者位置),根据这些信息,我们就可以投射声音信息到听者的空间中。这些的前提是听者戴了耳机,否则难度系数对于大多数VR应用是无法接受的。
3.2 距离模型
HRTFs帮助我们定位声音的方向,但是不能对距离进行建模。人们通过一些因素来估计声音的距离,这些可以通过在软件中调整参数和精度来进行模拟。
声音大小:最重要的因素,很容易通过听者和声源的距离进行建模。
起始时间延迟(Initial Time Delay):很难建模,需要根据空间进行计算反射,但是依然有几个数据集尝试对此进行建模,从简单的 shoebox models到完整的空间几何建模。
声音和混音(Reverberation)的比例:通过对反射和回声进行建模可以得到,有一些现有模型,但计算复杂度很高。
运动视差:根据声源的速度可以直接计算得到。
高频衰变:通过低通滤波器可以很容易的建模,实际应用中,该因素并不是很重要。