赛车游戏如何模拟声音?

以前发动机音效的原理是“速度分段+音高调制”,大致如下:

在规划阶段,我们会把游戏中的发动机转速分成多个区间。例如,所需的发动机转速将涵盖1,000-7,000 rpm。以分成三段为例,我们定义1,000-3,000为低速,3,000-5,000为中速,5,000-7,000为高速。分别制作2000转/分、4000转/分、6000转/分三个中间转速的音频循环样本(取值是为了简化说明,实际操作中不一定使用中间转速)。游戏中,控制参数实时传输。首先判断车辆发动机运行在哪个速度区间,从而循环播放相应区间的样本。同时,这些参数也决定了样本的音高调制比。举个例子,当使用1,000rpm时,实际播放的是2,000rpm样本的音高降低100%的结果(还是那句话,为了简化解释,所谓的“音高”不是很科学,但我们感觉变化最明显的确实是音高的增减)。

上面的例子是两个主流音频中间件Wwise和Fmod的形式:

Wwise中相应的功能模块是混合容器和RTPC(实时参数控制)。游戏中实时发送的速度信息决定了播放的样本及其相应的音高变化。Fmod类似,参数控制播放内容。在现有的基础上,目前的结果会经过均衡器、失真等音频效果器的处理,从而表现出不同的负载情况(比如空载、高速时失真会明显增大),原理也是实时发送控制参数。有些发动机在不同负荷下音色变化很大。如果对性能有需求,需要记录发动机在不同转速区间不同负荷的样本。这是一个多音轨多参数的音频事件问题,具体制作过程就不进行了。这种方案最大的问题是没有线性的表现出发动机转速声音从1,000到7000的变化,或者说是伪线性的。所以为了尽可能还原真实的发动机声音,在实践中也可以根据不同的情况将速度/负载拆分成2个或30个样本,所以音频设计师往往需要花费大量的精力来处理不同速度之间的衔接,调整音高升降比,样本之间的响度关系,负载之间的切换。更大的问题是,根据不同的算法,音高升降过程中的效果并不完全一样,所以这个环节很容易磨损。比如我小时候特别喜欢玩《极限快感:风起时2》。现在听起来最假的声音是发动机加速时的声音,原因如上所述。我相信很多大厂都已经采用了更先进的技术,但它是一家法国音频技术公司——Audio Gaming,成立于2009年。在2011到2012期间,AudioGaming陆续发布了多个基于物理建模或采样合成的程序化音频程序,包括AudioWind和AudioSteps(没有统一的翻译,所以暂时翻译成“演算音频”可能更容易,即程序根据实时情况生成的音频内容,而不是实际录制的音频)。其中,让发动机音效工艺实现全行业升级的方案是AudioMotors。