本文为「Dev for Dev 专栏」系列内容,作者为声网音频算法工程师 李嵩。
随着元宇宙概念的引入,空间音频这项技术缓缓映入大家的眼帘。对于空间音频的根底原理,咱们做过一期科普视频 —— 「空间音频背地的原理」,想要理解的敌人能够复制文末的链接查看。
本期文章,咱们将次要探讨基于对象(object-based)的实时空间音频渲染,也就是如耳机等利用场景中,渲染对象为一个音源时的渲染思路与计划。
01 虚构声的渲染
虚构声是指利用空间音频技术合成的一路虚构声源。
在现实生活中,人们能够利用双耳感知到实在声源的地位,所谓的虚构声渲染,便是模拟实在声源达到咱们耳朵的过程,使听者感触到虚构声源在空间中的地位等信息。
渲染过程中,咱们须要几个根底的信息来进行信号处理,比方:声源、房间的模型、声源和听者的地位、声源的朝向等等。在声源和听者之间没有妨碍物的状况下,声源收回的声音会间接达到听者的耳朵,咱们把这个听到的声音叫做直达声。
在直达声达到后,声源从墙壁、地板、天花板或其余障碍物反射产生的反射声也会陆续达到听者的耳朵。这些反射一开始很稠密,随着工夫的推移会越来越密集,能量也会呈指数降落。通常,咱们将一开始稠密的反射称作晚期反射,个别在 50ms 到 80ms 内;把该段时间后的密集反射叫做前期混响(具体的工夫和房间大小等环境因素无关)。
02 实时空间音频渲染的过程实现
前文形容的是声源在房间内通过空气流传达到人耳的过程,接下来咱们探讨这一过程如何实现。思考到声源通过空气到人耳的传递过程个别是线性的,如图一所示,因而对于渲染来说最简略的办法是卷积已知的单声道声源和一对双耳房间的脉冲响应 (Binaural room impulse response, BRIR)。
■图一:卷积BRIR取得双耳声
其中 BRIR 指的是在房间内从声源到人耳的双耳房间脉冲响应,包含了直达声和反射(这里的反射包含了晚期反射和前期混响)。咱们能够将其了解成当声源是一个脉冲信号(比方拍手,发令枪收回的声音等)的时候,你听到的声音。正如咱们前文所说,BRIR 与房间、声源和听者的地位无关。
图二所示是一对在某个房间内实在测量的 30° 水平角的 BRIR,其中蓝色和红色线别离代表左耳和右耳的 BRIR。咱们能够清晰的看到在时域中的直达声、晚期反射和前期混响局部。
■图二:一对实在测量的双耳房间脉冲响应 (起源: University of Surrey, IoSR-Surrey数据库)
那么 BRIR 如何获取呢?测量是一个实在并且精确的做法,尤其是对于事实加强(AR)的场景而言。但即便在不思考个性化的状况下,在每个房间借助人工头来实在测量所有可能地位的 BRIR 都是不事实的。
另外 BRIR 的长度和房间的混响大小有很大关系,且实时卷积很长的 BRIR 须要消耗很大的算力。因而通常会应用合成的办法来模仿实在的 BRIR。
1)直达声的合成
BRIR 的第一局部是直达声的脉冲响应。直达声的合成能够通过卷积声源和头部相干脉冲响应(Head-related impulse response, HRIR)来获取。HRIR 是头部相干函数 HRTF 的时域表白。
对于 HRTF 置信大家曾经有所理解,它示意的是声源到人耳的传递方程,但并不蕴含反射(晚期反射和前期混响)局部。也就是说,如果只是用 HRTF 去渲染的一个声源,咱们所在的虚构听音场景是无反射的场景,相似消声室,雪山顶等非凡场地。
■图三:直达声局部渲染
图三为直达声局部的渲染链路,包含声源朝向的渲染、随间隔扭转的声压、空气衰减的模仿,和一对指定方向的 HRTF 滤波。这里的每一个模块在之前的文章中都有介绍过 (历史文章详见文末拓展浏览)。
在实时音频解决中,思考到 HRIR 的长度,个别不会在时域上间接进行卷积,而是在频域上通过疾速傅里叶变动(FFT)进行。当声源的地位产生扭转时,就须要切换应用对应的 HRIR。为了避免切换 HRIR 时产生杂音,前一个和后一个的 HRIR 会进行相似淡入淡出操作。
如果 HRIR 对应的采样点不是很密集,则须要在渲染时进行实时插值来获取对应方位的 HRIR。当然也能够先进行离线插值直到足够密集为止(小于 Just noticeable difference),在实时渲染的时候就能够间接抉择离指标地位最近的 HRTF 来应用。
这样一来能够缩小实时插值带来的算力,但须要存储的 HRIR 的包体积会变大。因而须要在 HRIR 存储体积和实时插值的算力间进行取舍。
2)反射的合成
BRIR 的第二局部是晚期反射的脉冲响应。晚期反射对音色,声源定位等有着很大的影响。因为晚期反射比拟稠密,每个晚期反射会被当作一个虚构声源。这些虚构声源的地位能够通过镜面法、光线追踪法或者数值求解等办法失去。
镜面法是一种比拟省算力且绝对直观的办法,但个别只实用于墙面润滑的状况,其无奈模仿因为墙面不润滑引起的散射场景。光线追踪法能够模仿反射和散射场景,但声线方向以及数量的抉择须要做更为认真的思考。在模仿低阶晚期反射时,算力会比镜面反射要大。数值计算的精确度是最高的,然而其计算复杂度很高,实用于做线下模仿和仿真。
在实时计算晚期反射的时候,思考到算力问题,个别咱们会准确计算 1-2 阶晚期反射。这里的阶数是指和墙面通过几次碰撞,比方一阶反射是指声源和墙面通过一次碰撞达到人的耳朵。当这些晚期反射的地位计算出来后,须要对每一个反射做和直达声一样的解决,包含反射声源的朝向,和间隔无关的声压和空气衰减模仿,以及对应的 HRTF 滤波。
须要留神的是,因为每个反射达到人耳的工夫不同,须要计算反射达到人耳绝对于直达声的延迟时间。如果依照严格的物理意义,直达声也须要包含一段由声源达到人耳的提早。
如果在一个虚构场景,声源离听者 100 米,那么须要额定引入大略 291 毫秒的提早。这样解决的话,尽管合乎了物理含意,然而额定减少了提早,并且这段直达声的提早对空间感没有任何帮忙。因而反射的提早只会思考绝对于直达声达到人耳的提早。
另外,因为反射声源是通过墙壁的反射/散射造成的,须要模仿墙壁反射/散射造成的能量衰减。要实在的模仿这一个音效,就要晓得墙面资料等房间信息。
■图四:晚期反射的渲染
生成晚期反射的大抵流程由图四所示。图示是将每一个晚期反射都进行了独自解决,最初生成双耳声的时候,每一个反射都通过对应的 HRTF 滤波。另外一种形式是先合成晚期反射的脉冲响应,当然长度会随着房间增大而增大,但最初声源只须要进行一次和晚期反射脉冲响应的卷积。
3)前期混响的合成
BRIR 的最初一部分是前期混响。须要留神的是所有的混响局部都能够像计算晚期反射一样进行计算,然而计算高阶晚期反射须要很大的算力,并且咱们人耳对高阶反射所在的地位不敏感,因而咱们不须要准确的计算高阶反射,也就是多级通过墙面反射/散射的声波的具体位置。
通常状况下,咱们能够用人工混响器来渲染生成前期混响。比拟常见的人工混响器有:全通滤波器、反馈梳状滤波器、全通滤波器和梳状滤波器的组合滤波器等。在混响器中,反馈提早网络是一种比拟常见也是性价比很高的实现办法。
4)实时空间音频渲染流程
■图五:双耳声渲染过程
整体的实时空间音频渲染流程图如图五所示。要留神的是,其中每一个模块都能够设计的很简单,也能够很简略。举例来说,每一个房间都是形态各异,但有时候为了简化计算复杂度,会用一个简略的长方体的房间模型来代替。空气衰减的模仿能够用 FIR 滤波器来实现,然而在理论利用中,会用低阶的 IIR 滤波器来迫近后果从而节俭算力。
这当中的外围模块如 HRTF 也是始终很热门的钻研话题。HRTF 是高度个性化的,如果应用了非个性化 HRTF,可能会呈现定位不精确,前后混同的景象。尽管实在测量的个性化 HRTF 准确度最高,然而在理论利用中,测量 HRTF 是不事实的。在理论利用中,基于耳朵照片的个性化HRTF预测或者个性化 HRTF 抉择会是一种更为适合的形式。
除了 HRTF 的个性化问题外,HRTF 在远场 (一般来说声源和听者的间隔大于 1 米)时候,频谱和间隔无关。也就是说在同一个方向下,2 米的 HRTF 的频谱和 3 米的 HRTF 频谱是一样的,只是幅度不一样了。
然而 HRTF 在近场(一般来说声源和听者的间隔小于 1 米)的时候,频谱会随着间隔产生巨大变化。为了更加实在的渲染近场声源的成果,须要用远场 HRTF 通过外插的办法来合成近场 HRTF。
03 结语
当音源不是一个对象,而是一个声场或者是有大量的对象须要同时被渲染时候,上述的办法就不太实用了,能够用 Ambisonic 的办法进行实时渲染。
另外抛出一个问题, 假如咱们正确地渲染了基于某个房间的空间音频,咱们就会有很好地沉迷式体验了吗?咱们会在之后的文章聊一聊如何应用 Ambisonic 的办法进行空间音频的实时渲染以及对于空间音频的主观听感,请大家继续关注 Dev for Dev 专栏。
拓展浏览:
1、 3D 空间音效、空气衰减模仿、人声含糊,三大黑科技完满模仿事实听觉
2、RTC科普丨空间音频背地的原理
https://www.bilibili.com/vide...
对于 Dev for Dev
Dev for Dev 专栏全称为 Developer for Developer,该专栏是声网与 RTC 开发者社区独特发动的开发者互动翻新实际流动。
透过工程师视角的技术分享、交换碰撞、我的项目共建等多种形式,汇聚开发者的力量,开掘和传递最具价值的技术内容和我的项目,全面开释技术的创造力。