本文转载自知乎用户夏东平在《赛车游戏怎么做到对真实声音的模拟?主要是引擎那部分》问题中的回答。
曾经引擎类音效实现的原理是“转速分段+音高调制”,铺开来说大致是这样的:
1,在规划阶段我们会把游戏中引擎的转速分成多个区间。例如所需引擎的转速会覆盖1000-7000 rpm,以划分成三段为例,我们将1000-3000定义为低转速,3000-5000定义为中转速,5000-7000定义为高转速。
2,分别制作三段转速中,三个中间速度的音频循环样本,即2000rpm、4000rpm和6000rpm(取值出于简化说明目的,实际操作中不一定使用中间速度)。
3,在游戏中实时传送控制参数,首先判断车辆引擎在哪个转速区间运行,以循环播放对应区间的样本,同时参数也决定了该样本的音高调制比例。比如1000rpm时实际上播放的是2000rpm样本音高降低100%的结果(还是出于简化说明目的,所谓“音高”的说法不是很科学,不过我们感受到最明显的变化确实是音高的升高或降低)。
上面的例子在如今两大主流音频中间件Wwise和Fmod当中呈现的形式:
Wwise里对应的功能模块是Blend Container与RTPC(Real-Time Parameter Controls)。由游戏中实时发出的转速信息决定播放的样本与其对应的音高变化。
Fmod中大同小异,参数控制播放内容。
4,在现有的基础上,会通过均衡器、失真等音频效果器来处理当前的结果从而表现不同的负载状况(比如空载高转速时失真会明显变大),原理同样是实时发送控制参数。有些引擎在不同负载情况下音色改变巨大,如果有表现需求的话,就需要分别录制不同负载的引擎在不同转速区间的样本。这是个多轨多参数音频事件问题,具体制作流程就不展开了。
这种方案最大的问题就在于它并没有线性地表现出引擎从1000到7000转速声音的变化,或者说它是伪线性的。因此为了尽量还原真实的引擎声音,在实践中根据不同情况把转速/负载拆分为二三十个样本也是有可能的,从而音频设计师往往需要耗费大量的精力来处理不同转速之间的衔接、调整音高升降比例、样本之间的响度关系、负载之间的切换等等问题。更大的问题在于,根据算法的不同,音高升降过程中的效果并不完全一样,因此这个环节很容易穿帮。比如我小时候特别喜欢玩儿极品飞车2,现在再听起来,最假的就是引擎加速过程中的声音,原因如上所述。
我相信很多大厂早已使用过更先进的技术手段,但真正在音频领域中普及新技术的是一家2009年成立的法国音频技术公司——AudioGaming。在2011到2012年间,AudioGaming连续发布了包括AudioWind、AudioSteps等多款基于物理建模或采样合成的Procedural Audio程序(尚无统一的翻译,暂译成“演算音频”可能比较好理解,即由程序根据实时条件所生成的音频内容,而非实际录制的音频)。其中使得引擎类音效制作工艺实现全行业更新换代的程序是AudioMotors。
说到AudioMotors就需要提到一个声音合成手段:粒子合成(Granular Synthesis)。简单的说,粒子合成就是把时域的音频分割成以毫秒为单位的极短片段(windows),再将某一个或某几个片段循环播放以获得与原内容完全不同的结果的音频合成手段。这个技术早在模拟时代就有过实践(window这个称呼就源自于模拟合成),但因受限于处理器能力,其被运用在数字音频领域是近十年才逐渐被普及的。
AudioMotors本质上就是粒子合成原理的运用,制作流程大致是:
1,制作一段涵盖所需转速范围的,匀加速的引擎音频。
2,导入AudioMotors进行基频与粒子合成分析。
3,完成了。
接下来粒子合成器接管了工作,当游戏中定义的引擎转速数据发送到AudioMotors时,程序只需通过粒子合成器循环播放某一特定时间点中符合转速数据的音频片段(windows)就可以了。同时引擎本身的音色可以通过音频片段之间的间隔、长度、音量等属性进行很大程度的调整。光说可能不是很直观,还是看图:
AudioGaming从2012年开始与Fmod合作,目前Fmod独占AudioWeather与AudioMotors两款程序的音频中间件版本,下图是AudioMotors的制作界面:
Wwise于2013年提供了另一家音频技术公司Crankcase Audio所开发的类似产品Rev的整合支持:
图中界面内纵坐标是频率,横坐标是时间,能看出两图中载入的音频样本都是引擎的匀加速。粒子合成器所做的工作可以理解为循环播放图中游标竖线所处位置的某一小段。(有点像CD播放错误时卡带的效果,只不过片段更短,更加连贯,且精度更高)。关于粒子合成与引擎音效关系的技术细节见paper Sample-based engine noise synthesis using an enhanced pitch-synchronous overlap-And-Add method
粒子合成的好处显而易见。首先它实现了线性的表现效果,即无论引擎什么转速,多快的变速,跨度多大,音色如何变换,通过粒子合成都能够获得相对更加拟真的结果。其次在多数情况下,粒子合成音频样本的数据量要小于之前多段音频的数据量,在这个移动游戏的时代这无疑是个好消息。最后,音频设计师的劳动也省下了不少。
说到底粒子合成也并非完全的“演算音频”,它仍然是基于音频样本的,且面对较为复杂的情况(比如通过降档实现减速)仍然需要依赖分别录制的不同的负载情况来实现。如今业内普遍的看法是,虽然基于音频样本的游戏音频技术仍然会在未来多年内占领主流地位,但演算音频将会是未来的趋势。近几年有越来越多的纯演算音频技术已经逐步开始运用在游戏音频与电影声音制作当中。除此之外,随着虚拟现实技术的逐渐成熟,对于交互音频内容的要求也会越来越细化,演算音频技术也无疑将会越来越受到重视,从而得到更大的发展。
另:关于粒子合成的延伸补充
粒子合成器确实不是简单的片段循环,它还涉及片段的音量包络、片段长度调制以及片段之间的时域叠搭等等其他问题。但我在非专业场合回答专业领域问题一向秉承的精神是“ELI5 (Explain Like I'm Five)”,在不破坏原则的情况下能简则简。所以我还是觉得直接上图更直观一些(对,其实是我比较懒):
ICEM-Folkwang University-Institute for Computer Music and Electronic Media
如果各位对粒子合成器本身感兴趣,我仍然建议阅读前文链接中提供的,Sound On Sound 05年的文章:Granular Synthesis-How It Works & Ways To Use It
http://www.soundonsound.com/sos/dec05/articles/granularworkshop.htm
里面通俗地讲解了粒子合成器的工作原理,同时介绍了多个有关粒子合成实际应用的范例。