导言
如果你可以第一时间理解上面的这堆乱码(visual anolog), 或许你对心里声学的现象也不会那么陌生。人的大脑中每时每刻都在发生着十分复杂运算来解析客观世界中的数据。所以,我们在实现游戏音频设计理念前,需要先了解我们的听觉。
在本文中,我将与大家分享日本知名游戏音频设计师金子老师参与的《十三机兵防卫圈》中的设计思路给我带来的启发,并试图探索从已知的人体生理心里科学现象中来引导游戏声音设计的方向。希望以此来引出更多的技术上的探讨。
与此同时,我将我理解中的相关心理声学知识对游戏音频的需求进行结合,并罗列出几点我个人认为有建设性意义的理论。
那么,什么是“金子昌晃式”的整合思路呢?
从我的角度观察金子老师的此次分享,最突出的就是他对素材整理分类的逻辑思路与细致程度。而这套思路源于他对于听觉的理解。
听觉系统
从外耳传入的声音首先进入中耳并带动三个鼓膜震动,而震动的能量被放大后随即被转化为激励刺激(stimuli)传送到内耳中。在内耳中,声音先传入控制身体平衡感知的半圆形的扁管腔体。而后便传入耳蜗。
”啥?中二?“ ”no 中耳!”
由于在内耳中声音信号是在液体中传播,而液体中的传导能耗要大大高于空气。因此中耳的主要作用就是对声音信号进行放大。
中耳的结构是由三个人体最小的听小骨织组成:malleus,incus和stapes。在拉丁语中,他们的意思分别是锤子,铁砧,搅拌机。而我们的身体中最小的肌肉 stapedius muscle 也在其中(被搅拌机半包围着),其作用是伸张紧缩的方式来保护“搅拌机“连接内耳处的薄膜。
中耳除了有传递并放大声音的作用,还可以调节脑压与外界气压的关系。在中耳的底部有一根连接呼吸系统的腔体,叫做咽鼓管(Eustachian tube)。当你用力憋气或打哈欠时,咽鼓管就会被打开。
这时它会和呼吸系统中的另一腔体形成对流并中和气压,但这个对流过程也会对中耳的听觉传导产生影响。这就是为什么我们打哈欠时会隐约的”听见”一些底噪。
耳蜗的构造可以说的上是鬼斧神工。它的名字源于拉丁语cochlea,意思是蜗牛壳。而其内部结构也十分的有趣。耳蜗的主体由三个不同的蜗管腔体组成,而这三种蜗管里含有两种液体。这两种液体的震动可以和基底膜(basilar membrane)产生共鸣。 而在连接基底膜的柯蒂氏器(organ of corti)上可以发现不同长度的毛细胞(hair cells)。
我们的内耳中由大概3500根内毛细胞和12000根外毛细胞组成。外毛细胞的反复地通过一种正负双极激励的方式来再次放大声音信号,而内毛细胞则是读取放大后的信号。在蜗管底部的内毛细胞长度较短且硬度较高,而顶部的则长软。如果毛细胞又短又硬,这就意味着这些毛细胞对应着高频能量居多的声音较灵敏,反之亦然。
这些毛细胞上附着着神经元去极化(depolirazation)所需的化学物质,然而这种物质积攒到了一定的程度便会转化成动作电位,传输给大脑。我们的听觉范围(20hz-22000hz)也是由这些内毛细胞而决定的。
而正是由于这种毛细胞的构造,我们的听觉才会表现出如下文中介绍的一系列的现象。
理论引导
1、心理声学
在金子老师给我们带来的分享中,有一张图对于职业音频的小伙伴们来说肯定不会陌生。
equal loudness contour等响曲线
对,就是Fletcher-Munson 曲线,aka等响曲线, aka“ISO266”。其寓意在于表示人对不同频段声音的感知在声压的不同的情况下是不相同的。
声压越大时,我们对中频信息就越不灵敏。
举个例子:假如你在开车时听到一个歌,当音乐音量很小时候你觉得还不错,所以你加大音量。当你听到了更多的高音和低音时,觉得更饱满更好听。于是便继续增加音量,直到有些使你觉得不舒服的变量出现。这也是为什么绝大多数的音乐制作人在制作混音时的音量普遍高于平均听众的收听音量。
对于做游戏音频也是如此,我们无法替玩家调节音量,但是如果游戏声音在音量较小(我们的听觉集中在中频)的时候表现出色,那么音量增加时我们声音的表现也会更好。
我在阅读Harvey Fletcher的资料时,发现了他的很多有趣的故事。 他的父亲在55岁时突发耳鸣,而这是注定他一生经历的重要源头。他是第一个芝加哥大学毕业的summa cum laude 校友。他在和他的导师Robert A. Millikan的“油滴实验中”取到了决定性的的作用。(没错,Fletcher的研究奠定了真空二极管的理论基础)博士毕业之后他来回到了他的母校任教,而贝尔实验室的前身纽约西部电子公司连续五年请他出山。直到第六年,他才决定去任职。当时的贝尔实验室为了节省电话直接信号传输的成本,需要找到一个对信号处理的取舍方案,而Fletcher的工作就致力于此。他的成果在起初并不受关注,直到机缘巧合,他帮助听力不好的托马斯爱迪生设计了一款电子助听器。 他的研究也为众多领域奠定了基石。他也是一个酷爱音乐的交响粉丝。在1933年,他和利奥波德·斯托科夫斯基完成了世界上首个立体声交响乐的录播。flecther 在1981 年与他的故乡犹他州去世,享年97岁。
伟大的科学家,立体声之父 Henry Fletcher
总而言之,身为游戏声音设计师的我们在声音方面应该有着这样一个目标:
让玩家尽可能的的把声音加大到我们监听制作时的音量。
我们可以用一张图来模拟这个过程(纯属个人观点):
当玩家在点A时(声音极小),此时游戏音量很低,声音根本听不清。
所以我们加大声音来到点B(声音信息传递完全),从等响曲线中我们获得的结论是如果这时我们加大音量会感受到更有力的低频和更细腻的高频。那么我们在监听环境允许的情况下肯定会这样做。
于是我们便继续加大音量到达或超过点C。此时我们的声音或许已经超过舒适监听的范围,且低频信息越发强势并遮挡住中频信息。
那么,这时我们如果再继续增加音量来到点D就会导致更多的中频信息被掩盖,那么我们的体验就必定会下降。而在这里就涉及到了Henry Fletcher 提出的一系列衍生理论(遮掩效应)
2、遮掩效应
游戏中的各种声音出现的时间是不可预期的,而所有声音又占用着同一个动态余量的空间。如何使用技术手法让更重要的音效突出和不重要的音效避让就成为了较大的课题。而如何配置避让参数,我们就需要了解遮掩效应。
在上文中我们了解了等响曲线及其广义的结论。
如果我们要玩家分别感知两个同时产生的声音,我们应如何设计这两个声音呢?
通过Fastl 和 Zwicker的研究我们可以将遮掩现象总结为下图所示:
在左图中,存在着两个声音:
一组由绿点代表的声压较弱的被遮掩的声音,和一个由红点代表的声压较强的遮掩声音。
而绿线拟合的就是这样一组数据:
在有一个1000hz遮掩声音时,被遮掩的声音的频率和声压最高可以多高才不会被我们的听觉感知到。在这里我们可以观察到一个明显的现象。 当被遮掩的声音的频率临近遮掩声音的频率时, 被遮掩的声音需要更少的声压差就可被遮掩。
换句话说,对比频率相差很少,如果一个声音想要遮掩一个和其频率相差很多的另外一个声音,那么这个遮掩声音就需要更多的能量。
在右图中,我们可以观察到另外一个现象:当两个声音的声压同时增加10db。供遮掩声音低频和高频的能量虽然是同时增加,但低频的增幅远远小于高频的增幅。
那么把两种结论总结一下,我们可以将遮掩效应理解为:
如果A声音遮掩B声音,那么,
(1)A与B的频率越相近;
(2)在高声压下,B的频率越高, 遮掩效应就越明显。
举个例子:
如果一个枪械射击声A的音量只需要比另一个基频相近的射击声B的音量大一点,就可以形成遮掩B的效应。
而如果射击声A要同样遮掩某个低频能量较多的爆炸声C的话,那么C对比B的音量要小很多。如果增加音量,那么ABC中的高频信息上的遮掩效果会比低频中的更明显。
接下来,我们来分析时域的遮掩效应。请看下图:
那么,这个图告诉我们什么呢。
如果有两个声音:声压较大的A遮掩声音和声压较小的B被遮掩声音。绿色曲线表示A在发声后的上限200毫秒都会遮掩B的声音的感知,而红色曲线表示A在发声前的20毫秒会遮掩B。
换句话说,遮掩效应中遮掩声音A甚至可以在不同时发声情况下遮掩B,仿佛遮掩音A长出了一个能被听觉感知而又不存在的音头和音尾(音头上限20毫秒音尾上限200毫秒)。
在这个现象上,研究还发现我们的时域分辨率temporal resolution,在高频时比较好(隐形音头音尾上限较短)。
3、音高的感知
在游戏音频中我们为了优化性能,会在素材的音高上加以随机变化来增加多样性。
如果我们遵循对音高感知的理论引导,那么我们的游戏音频会更具有带入感。因此,我们在音高的参数设定方面,应该注意哪些呢?
人耳对音高的感知是一个十分复杂的运算过程,而其中不仅仅包括对基频的感知。其他影响音高感知的因素还有谐波,音量,频域带宽等。
首先,在音量大幅度变化的时候,我们对音高的感知会产生变化。
当声音由高频信息居多时,音量的剧增会感到同一个声音的音高也随之增高。
当声音由低频信息居多时,音量的剧增会感到同一个声音的音高也随之降低。
4、最小可觉差(just noticeable difference)
音高上的最小可觉差是指在我们能感知出两个在不同时间发声的声音,它们的音高之间的差值调节要达到的最小值。
具体曲线如下图所示:
在这里我们使用200,202,204hz来示范:
虽然只有2hz的区别,但是我们却可以很清楚的辨别200和204直接的音高差。但200和202却不易识别。
5、 临界效应
临界效应源于Fletcher的研究,其意义在于告诉我们人的耳蜗就像是一组滤波器。
当两个声音的频率十分接近时,那么就会有一个滤波器被两个声音所占据而导致这两个声音之间互相影响。经过研究,我们可以发现临界效应的可以帮助我们判定两个同时发声的声音的频率需相差多少才能让我们觉得这是两个不同的声音。
具体曲线如下图所示:
从这几个研究的观察中,我们就可以对二手手游卖号平台音高的在整合工程中的实际应用有更深一层的理解。
举一个例子:我们在脚步声的整合过程中,通常会使用随机音高范围来增加脚步的多样化。
但是根据脚步击打的表面材质的不同,我们的脚步声可能带有突兀的音高信息。
如果击打表面是高频信息居多金属板,那么在此加上过多的音高随机化可能会让玩家觉得每一步都是一个音符在发声。在这种情况下,由于耳蜗的生理结构影响,导致玩家感知到了不应该被感知到的音高。所以我们要酌情在中间件中做出调整。
谐波的完整性对音高的感知有着正面影响,如果我们将一个150hz的声音的锯齿波的前9个谐波去掉,我们还是可以感知到音高的。
频域的带宽对音高感知也有着影响。我们将白噪做频域塌陷处理后以生成带宽为30,60,150,200,300,500,700,1000,1500,2000,3000hz。可以在这里发现频域越窄,我们就越容易感知到音高。
实际操作
关于心理声学的知识,我在上面尽量使用通俗的语言表述了一些基本理论和公认的结论。如果您想深入一步了解,本文的最后罗列有所有的相关参考文献。
那么装备了一些理论基础,我们下面就开始照葫画瓢,尝试模仿大师的制作理念并自己捏一个adx2 工程,其大略步骤如下:
1. 在素材层将音乐素材分类并拆分。
2. 将影响音乐素材的其他素材类型分类。
3. 导入至CriAtomCraft并设置类别。
4. 调试REACT。
1、 在宿主软件中对音乐素材拆分
打开宿主软件,这里我使用的是REAPER6。
我使用VST插件制作了一个loop interactive_music-001和interactive_music-002。
其中Interactive_music-001_instrumentation包含吉他扫弦,吉他琶音,军鼓,踩镲。 Interactive_music-002_instrumentation包含底鼓,合成器pad,钢琴,贝斯。
我们在这里需要选择如何分割音乐。
如果按照配器的方式来分割,那么我们这在创作音乐时就需要分“高频乐器”和“低频乐器”来制作,混音,缩轨. 如果按照频谱能量来分割,那么我们需要找到一个临界频段,并在这个频段上方塌陷所有的高频信息来得到高频音轨,而低频音轨则反之。
要注意的是,我们在选择临界频段时要确保分割后得到的两个轨道尽量保持大部分时间dbFS值接近。如果临界频段过高,那么我们需要用更多的数字增益弥补,从而产生高低频动态范围和动态余量不均匀的现象。
比较这两种方法,配器分割方式的结果并不纯粹。
也就是说,所谓的“低频乐器”的高频谐波还是会被分割到低频音轨里,而“高频乐器”也会加载它们本来的基频信息。但相比较更纯粹的频谱塌陷,这种方式可以使两个分轨在整合工程中被单独使用,也同时避免了动态范围不均匀的问题(极端情况下我们才会识别出现动态范围不均匀的声音,所以这里在一个轨道上少许的数字增益并无大碍)。
出于演示目的,我使用的是频谱能量来分割的办法。
2、 将其他影响音乐的素材进行分类
影响音乐的素材可以根据低频信息量来分类。
比如爆炸声和低频较多的音效可以被分为一类,高频较多的音效可以被分为一类,而对话和旁白也可以被分为一类。如果有不同场景,那么可以以场景为单独分类标准进行细分。
3、 将素材导入CriAtomCraft并开始构建工程
其大略结构如下:
总体设置>分类>分类组>创建分类
Vo,
Sfx_firearms,
High_fq_music,
Low_fq_music,
Sfx_explosion,
Sfx_high_fq_generic
总体设置>REACT>创建REACT
sfx_firearms_on_high_fq_music,
Sfx_firearms_on_low_fq_music,
Sfx_high_fq_generic_on_high_fq_music,
Sfx_explosion on low_fq_music,
Vo_on_high_fq_music,
Vo_on_low_fq_music
4、 编辑每一个REACT
触发类别和变化类别的关系:当一个触发cue被激活时,如果没有任何限制发生的条件发生(多重播放禁止时间), 那么变化类别就会根据我们设计的逻辑进行变化。
如图中所示,当被划分至枪械类的音效sfx_firewarms被激活时,高频音乐high_fq_music的音量就会被降低至原始值的70%。这里需要注意的几个选项有:
a) REACT类型:
Ducker类型是直接对变化cue的音量产生变化,而AISAC类型则是AISAC调制触发器通过播放触发目标,产生AISAC调制.(对于“使用AISAC,仅在播放某个Cue期间更改特定Cue的音高”这样的用途,REACT应使用Ducker而不是AISAC调制触发器。AISAC要以调制,One Shot和Key来驱动。如果变化的参数在变化开始时和结束时值不相同,可能会在播放时听不到声音。)
b) 变化时间:
在判定生成REACT之后,对指定变化cue音量降低所需时间。
c) Hold 类型:
“播放中” 是指只要触发cue在播放中,那么变化cue就一直不会被释放;“固定时间”指触发cue被触发后指定时间内,变化cue就会被释放。
如果一个类型中只有一个音效或者类型中的音效的时长和包络很接近,那么hold类型可以使用固定时间。这样做的意义在于增加音效与音效之间变化的稳定性。
例如一个礼花爆炸的音效中的音尾包含小爆竹爆炸的高频信息,在不拆分礼花音效素材的情况下我们可以通过计算礼花爆炸的低频能量衰减的大概时间来设置hold固定时间。这样做就相当于将低频能量多的礼花爆炸作为触发而忽略高频的爆炸。
d) Hold时间:
“播放中”下的Hold时间指被触发cue播放完毕后的一段等待时间。在等待时间过后,变化cue才会开始恢复到原始音量。“固定时间”下的Hold时间指触发cue开始触发REACT的一瞬间后的一段等待时间时间。等待时间过后,效果同“播放中”一样。
e) 返回时间:
变化cue回到原始音量所需时间。
f) 变化参数:
“音量电平”指变化cue被影响的目标是音量。 或者选中任意AISAC控制器 作为变化参数。
g) 变化电平值:
在“音量电平”下,此数值值域0-1,代表原始音量的百分比。 在AISAC控制器中,此数值代表返回目标AISAC控制器中的函数值。例如:
如果变化电平值输入的是0.2, 那么AISAC控制器 此时的变化应该是:音量调制原始值的2倍(音量aisac图表起点为1值域为0-2)。这么一来,我们的变化参数是AISAC控制器的REACT就会增加了不少的灵活性。
h) 在特殊的cue中使用块和action track
在重要且播放逻辑复杂的cue上可以加入块和action track,例如样板工程中玩家增加经验值的音效。
如果使用actiontrack,我们的可以在不同阶段的声音(加速,匀速,减速)cue上绑定参数action来控制目标音轨的参数。
i) 在反复出现的cue上设置多重播放禁止时间
结合心理声学理论,我们可以对多重播放禁止时间做调整。
由于在高声压下频域高的音效之间的遮掩效果好,那么我们可以在高频域的音效上使用较短的多重播放禁止时间。而低频信息居多的音效可以设置较长的多重播放禁止。
金子老师的教给我们的一个小窍门是将射速很快的枪声音效放入一个连击逻辑的cue中两次。这样做的话可以完美控制第一发后枪声的大小,还可以确保第一击音效的完整。
j) 各种音效对音乐的react
由于爆炸声的低频能量较多,那么它对对低频音乐的REACT效果也应该强。
从理论角度来看,我们只需要用小量的变化时间和返回时间就可以避免时域遮掩。
但我使用了较长的返回时间,而在爆炸REACT高频音乐使用了更短的返回时间。这样错开两个同类的REACT的释放其意义在于避免音量大幅度变化导致听觉对音高产生变化。
k) 爆炸音效
同样道理,我在样板工程中使用一个高频信息较多的power up 音效,在这里这个音效应该是对高频音乐的REACT 效果强于对低频音乐。
在语言类的声音对音乐方面,我认为人类的语言中辅音(consonant)中的高频信息有可能会被音效的高频信息遮掩。所以在语音对应音乐的REACT中,我设置了较强的高频闪避效果来给这些辅音留有更多的动态余量空间。
最后,我们可以通过Session来测试我们的声音。在这里,我们可以手动播放一系列音效来模拟游戏运行中的声音效果:
尾声
本次的分享就到此结束了,希望可以为大家带来一些启发。
您可以在此进行以上样例工程的下载:
链接:https://pan.baidu.com/s/16xXjz9G3PG_SNDtHPtcH9A
提取码:ADX2
本工程由CRI Atom Craft Ver.3.44.17创建
此外,需要注意的是,本样例工程仅作展示使用,因此使用的音频素材样本量较少。在实际的工程运用当中,可能会有大量的素材需要批量导入及编辑。
在后续一月份的ADX2版本更新中,马上将会上线新功能“Robot”,它可以编辑脚本,快速导入大量文件,减轻声音设计师的负担。
新SDK发布的同时,我们也会同步更新Robot的使用方法,即使是没有接触过编程语言的设计师朋友也可以轻松上手,敬请期待!