概述
Impacter 是在原有 SoundSeed Impact 插件基础上开发的源插件。它方便设计师将撞击类声音文件加载到设计工具中,进而实施分析并保存为合成模型。随后,运行时插件便可重构原始声音,或通过交叉合成创建不同的声音版本,并借助直观的物理信息参数进行操控。
Mass、Velocity 和 Position 参数可分别对被撞物体的大小、撞击的力度和撞击处的声学响应进行建模。而且,每个参数都可应用随机化处理。
为方便调控交叉合成,可加载多个声音文件。对此,插件会将不同声音的 Impact 和 Body 分层随机结合(详见下文)。如果设计师想要使用一组特定的声音,还可单独启用或弃用各个文件的 Impact 和 Body 分层。
工作流程跟原有 Impact 插件差不多,只不过使用起来比之前更加便捷了。现在的插件不再需要借助外部分析工具,因为 Wwise 设计工具会在后台完成音频分析。虽然原有 Impact 插件也可实施交叉合成组合,但存在声音不稳定和增益变化大的潜在风险。相比之下,Impacter 在各种交叉合成组合当中的表现都很稳定。而且,其用户界面 (UI) 更加方便分组处理声音。有时,甚至可像 Random Container 一样随机选择所要播放的内容。另外,各项参数也经过了精心设计,对所处理声音来说更加通俗和直观。
开发动机
Impacter 的开发源于对压缩音频采用创造性声音变换的方法的研究。事实上,构建一套普遍适用且便于操控的音频表示方法是相当困难的,因为提高灵活性往往意味着损失实现更多声音变换的潜力。
不过,通过专注于某一类特定的声音,声音变换依然可以更富有表现力。撞击类声音由此成为了我们的最优选择,因为其可借助直观的物理参数进行操控。为了配合空间音频功能以便声音设计师以创新方式控制声学行为(声音传播的物理机制),我们希望能构建一个合成器来让声音设计师自由地调节由物理事件(如碰撞)触发的声音。
我们希望构建一款新的插件来让设计师能够直接使用现有声音素材而不是从头开始合成。藉此,设计师可依据游戏物理向录制的拟音应用各种变换。当然,我们也知道市面上流行的大多样本库和录音并未专门提供撞击类声音,而且有必要构建一个可以充分利用脚步声、子弹声和碰撞声样本的工作流程。借助交叉合成,声音设计师可灵活地运用一系列这种撞击类声音,以此构建不同的声音版本来实现音频的多样变化。
定义和概念
在深入探讨 Impacter 之前,有必要澄清一些有关插件底层算法运作方式的定义和概念:
源-滤波器模型是一个基于“通过滤波器传递激励源信号”这一模式构建的声音合成模型。人类语音就经常会用源信号和滤波器进行建模:声门脉冲激励(空气穿过声带发生振动)经滤波器(声腔)加工产生元音。有些传统分析方法(如 Linear Predictive Coding)会将输入信号解构为滤波器和残差激励信号。
图 1 - 源频谱和滤波函数。源频谱对应声门脉冲激励,滤波函数的形状对应声腔的形状(可在新的标签页中打开并查看大图)。
频率扭曲是一种频域(频谱)层面的非均匀缩放。它会将从线性标度截取的频率特征沿其他标度重新分配:通常向 0 点位置压缩频谱的低频部分,并横向拉伸高频部分来填充剩余空间(反之亦然)。这种扭曲既可直接作用于一系列正弦波的频率,也可作用于与频域特性曲线对应的滤波器系数。
图 2 - Impacter 中所用的滤波响应被扭曲变形(可在新的标签页中打开并查看大图)。
为简单起见,可理解为不同声学模态在物理材料上的激励对应分布在不同频率的能量。对于像 Impacter 这样的合成算法,各个滤波器频段和正弦波的位置和增益都会受到影响。借用物理学的观点,声学模态的直观结果是被激励/被撞击材料会因撞击在表面上的发生位置而激发不同的模态。比如,膜片中心的撞击所激发的声学模态最少,而边缘附近的撞击所激发的模态会多些。至于这种行为的参数化控制,通常只需对相距表面中心的距离进行建模即可(详见下文)。在简化模型中,圆周上所有与中心距离相等的地方都会有相同的近似声学行为。明白了这一点就不难理解 Position 参数在 Impacter 中的作用机制了。
除此之外,物体的大小还与其可能包含的声学模态数量关联。较大的物体包含更多低频声学模态。若在不同位置产生激励,生成的频谱会更加密集。通常,我们认为尺寸的增大会导致音高降低,因为新的低频模式会改变撞击类声音的基本频率。研究 [1] 表明,我们可以通过扭曲来重现频谱低端模态密度的增加,同时确保由合成算法生成固定数量的模态,以此近似地模拟物体大小的变化。这种方法能有效地对大小变化效果进行建模,而无需算法执行额外的处理来合成更多模态。
合成与分析
Impacter 的合成算法是基于“将正弦波模型和源-滤波器模型结合”这一理念构建的。换句话说,所有原始输入声音在运行时都会使用一系列正弦波和贯穿滤波器组的激励信号进行重构。从概念上讲,我们会将来自源-滤波器组件的激励信号与 Impacter 的 Impact 分层关联,并将源-滤波器模型的滤波器组和正弦波与 Body 分层关联。
Impacter 的设计工具插件背后执行的分析基于两阶段算法:首先提取频率和包络信息以用于正弦波合成模型,然后提取滤波器组和残差激励以用在源-滤波器合成模型中。
第一阶段(窄带分析)会针对输入声音频谱执行峰值拾取,来查找撞击的大部分谐振频率。接着会从声音中滤除这些谐振峰值以生成残差激励,并将其频率和包络信息存储为参数以用于正弦波合成模型。随后会将窄带残差激励传递到第二阶段(宽带分析),并基于剩余声音频谱构建滤波器组以用于源-滤波器模型。然后,通过对残差激励和滤波器组实施反卷积处理来生成最终激励信号。
图 3 - Impacter 中所用的底层分析和合成流程。
再合成
分析算法在设计工具中完成了大部分的处理,所以合成算法在游戏运行时要做的工作很少:只需将少数正弦波与通过双二阶滤波器组传递的激励信号混合即可(无需应用 FFT 处理)。放心,原始输入声音的重构非常完美,不会丢失输入声音的任何部分。
变换
这一混合合成模型提供多种不同的变换,其可在合成过程中单独或共同塑造音色。
-
扭曲滤波器组的系数和各个正弦波的频率,来非均匀地影响撞击声的音色和感知音高。
-
对激励信号进行重新采样(升高或降低音调),而不考虑滤波器组的频谱形状或正弦波的位置。
-
对各正弦波的包络实施拉伸或衰减,确保与重采样激励的长度保持一致,或者进一步分离撞击声的谐振信号。
-
根据需要开启或关闭特定正弦波和滤波器频段以便直观地控制细节层次,或者通过映射来依据位置对声学模态的激励进行建模。
-
向各个正弦波应用频率调制 (FM)。研究表明,可通过映射 FM 参数来控制对撞击声嘈杂度的感知效果 [2]。
声音样本
变换 1、2、3 全部由 Impacter 中的 Mass 参数控制。
Mass:
变换 4 以不同方式实现对 Velocity 和 Position 的控制。
Velocity:
Position 参数 (0 ~1) 用于表示相距被撞击表面中心的径向距离。
Position:
变换 5 被用作 Roughness 参数的基础。
Roughness:
交叉合成
Impacter 插件支持加载和合成多个声音文件源,混合正弦波-源-滤波器模型可交叉合成来自各个声音源的不同模型分层。虽然有各种各样的方法来结合合成模型的分层,但我们发现最好是将某个文件的激励 (Impact) 与另一文件的滤波器组和正弦波 (Body) 相结合。为了方便选择 Impact 和 Body,我们对 Impacter 的 UI 进行了专门的设计。
窍门
警告:将相互冲突的声音结合在一起经常会生成与撞击不相关的正弦鸣响声,因为窄带峰值与撞击频谱几乎没有重合或关联,或者撞击并不包含被滤波器组加强的频谱能量。所以,在实施交叉合成时,最好选用性质相近的声音。比如,在参数变化之前可利用拟音阶段录制的 n 个脚步声快速生成 n2 个变化版本。
结语
Impacter 旨在为游戏音频设计提供新的实验性方法。通过专注于某一类特定的声音(如撞击声),我们构建了这款能够以多种方式使用的插件。对于一组需要实现多样变化的声音,可在 Impacter 内部参数随机化的基础上借助交叉合成来像 Random Container 一样随机选择所要播放的内容。藉此,设计师可使用受游戏物理(碰撞、力度、大小)影响的 RTPC 和 Event,并直观地将其映射到对拟音的物理变换。
虽然 Impacter 是作为实验原型提供的,但我们对其工程设计和 QA 有十足的信心。Impacter 应当可以无缝地融入设计工作流程,而不会出现任何卡顿或崩溃问题。您可以在游戏运行时有效运用其稳定的轻量级合成算法,而不必担心会超出项目既定的内存或 CPU 预算。
评论