UE4动态音频
学习官网教程动态音频,记录一下重点,方便以后进行查阅,故本博文不会全部更近教程中所有提及到的知识,推荐大家学习一遍教程后,有了自己的理解后再查阅本博文,温故而知新。这里附上官网教程地址ClickHere

往期音效笔记
1.UE4环境音效与程序化音效(1)
2.UE4环境音效与程序化音效(2)
2.UE4动态音频
3.UE4音效与空间
1.通过布尔切换音频

同时可以在音效播放完成之后绑定Audio Finished函数,并设定对应的自定义函数,在音效播放的时候添加判断,防止音效多次播放

2.通过整数切换音频

3.使用时间轴控制音频体积
使用时间轴来控制,你可以实现一些从无到有,通过控制音频的音量来实现一些特定的效果。

点开时间轴你可以自定义曲线的形状。

4.使用浮点值设置音效映射变量

这里蓝图中是通过CurveTime,来设置Layer01Audio音效的音量的。

转到前面的蓝图就会看到CurveTime值得设定,通过Map Range Clamped(映射范围限制),这里实现得功能是,通过检测SMTorchVar移动得距离,来控制音量得大小,最大得移动距离是250,对应着映射值1。最小为0。从而控制音量得大小。
不过这里得注意得是,音量得变化是线性得,如果你想让音量变化是非线性得。你可以自己自定义一个Curve。
创建方式如下:

在这里面你可以自定义曲线

随后来到蓝图中,创建一个CurveFloat类型得变量Layer_01,将自己刚才自定义得曲线赋值给该变量。

随后再替换刚才得Curve Time,利用Get Float Value函数,这里Target对象是CurveFloat类型得,也就是我们刚才创建得Layer_01

5.在SoundCue内部控制布尔,整数和浮点
在文章开头我们是在蓝图中控制Bool和整数来判断播放得音效,这里我们在SoundCue内部进行实现。
Bool

使用Branch节点,同时设置节点变量名,在左侧面板中你可以设定

然后我们就可以回到蓝图中,替换我们一大堆得判断,判断后才进行选择播放哪一个音效

利用节点Set XX Paramater,(你要设置怎样得变量,需要你来定,这里我们用得是Bool,所以是Boolean Parameter),同时要注意得是Name变量名一定要正确。
整数

使用Switch节点进行整形设置,0-1-2对应着不同得音效,同样要记得命名变量名。
浮点

利用Continuous Modulator节点进行设置,需要注意得是,该节点可设置得变量为两个,一个为Pich(音高)一个为Volume(音量),看自己得需求来进行设定。


在SoundCue内部设置,和在蓝图中设置各有各得好处,需要灵活运用,来简化我们得操作,大家需要自己进行权衡。
6.音频事件控制实例
通过判断玩家高度来控制风声的大小及频率
在官方教程中,打开蓝图Audio_Trees_Wind_Height可以看到该功能的具体实现。
首先我们来看看变量的设定

(Min\Max)Delay_Time: 对应着我们最小最大延迟播放,及音效的频率
Start_Height: 最低位置0
End_Height: 最高位置1
这里我们需要实现,在低位置,风声以及风的频率都不会很高,在最高位置到达最大,并且会播放树叶摇曳的声音。

首先我们看左侧的红框,获取玩家的高度及Z轴,利用MapRangeClamped函数,将值限定在0-1范围内,对应着Start Height和End Height。右侧的设置为音频限制,因为获取的是0-1的值,所以In RangeA-B设定为0和1,再与Max\MinDelayTime进行映射,输出的值利用Random Float Range函数增加随机性。这里我们便获得了两个值,一个是音量的限制范围0-1,一个是音频的限制范围(不是0-1,需要你自己进行设定),当然这两个值随着人物高度变化而变化。

这里输入的值便是音量的范围,接入Volume Multiply便实现了音量的控制。同时判断该值是否>0.8,来判断播放树叶摇曳的声音。后面的Retrigger自定义事件是用来触发下文的事件检测函数的。至此音量得判断便解决。

最后将上文取得的频率值,与Set Timer By Function Name函数结合使用,该事件检测函数利用延迟检测Time来触发Trigger_Sound(播放风声得函数),至此实现风声频率的切换。
7.音频与动画
你可以在动画中添加Notify(通知)来设置动作的音频,添加方式如下:

在右侧面板中设定音频Sound。

需要注意的是这里的Follow跟随的是骨骼的名字

设置之后你可以在控制台输入Audio3dVisualize进行Debug测试(需要在游戏中),可以看到发出声音的位置

但这种方式的局限性在于,只能播放一种音效,不具有多样性。例如我们播放走路的音效,需要判断SurfaceType(地表种类)来播放不同的走路音效,就不能使用这种方式了。
于是我们得用另外一种方式来设置走路音效:
1.首先在人物的走路以及跑步动画中添加新的Notify-Footsetp

2.在人物动画蓝图EventGraph事件图表中输入刚刚创建的Notify-Footstep

同时利用LineTraceByChannel检测地表的类型,方式是人物的Z轴减去200(值可以自己测试)

将检测到的PysMat获取他的SurfaceType,再利用Select节点,进行选择播放。这里生成音效的方式是Spawn Sound Attached,因为走路的音效肯定是附着在人物身上的。
当然这里的SurfaceType可以自定义,设定的方法如下:ProjectSettings(项目设置)->Physics(物理)->Physics Surface(物理表面)

3.同时为了多样性,我们可以通过速度来设定走路音量的大小。

利用Normalize To Range 节点将Speed速度变量映射至0-1,当然这里的最大值与最小值取决与你动画中设定的值。速度越大发出的声音也越大。
4.除此之外我们还可以更进一步的优化么?有的,你可以通过曲线的方式混合走路与跑步的音效,同样也是通过判断速度的方式。
我们可以将蓝图优化至如下:

首先我来说明一下该蓝图,首先播放走路的音效,随后将Speed单位化0-1,再利用GetFloatValue节点,播放曲线(Footstep)对应的部分,再设置音效的大小。下面播放的是跑步的音效,方式同理走路音效。这里你就有疑问了,那这不就播放了两种音效了么。
至此我们来看看两者曲线的对比。

至此你可以发现,走路曲线在0-0.25上升到最大值0.25-0.8逐渐淡出。而跑步的值为1时到达最大值。这里控制曲线的走向便是Speed(把它单位化到0-1的原因)。所以这蓝图就可以实现走路与跑步声音的混合,使得更加自然多样化。
8.Particle粒子音频
设定粒子的音频时,你需要以下几步;
1.打开你需要设定的粒子

创建事件,右键空白面板Event(事件)->Event Generator(事件生成器)
然后单机生成的Event Generator,左侧面板进行设置:

这里的Type根据情形设定,这里我们设定Spawn(粒子生成时触发),注意的是变量名字Custom Name一定要记得设定。
虽然自定义一个蓝图类,在面板中添加ParticleSystem

点击后赋值自己刚刚设定的粒子

随后细节面板拉到最下面,可以看到可以触发的事件

这里我们选定点击OnParticleSpawn

将EventName设置成刚自己自定义的名称便可以触发了。
同样的我们在来设定一下当粒子发生碰撞的时候的事件;
将Type设定为Collision

再选定事件On Particle Collide

因为粒子碰撞到不同表面发出不同声音,所以这判断了一下SurfaceType
再设定粒子的音效的时候我们还需要注意一个点,因为粒子的渲染是在我们的视野范围之内才会被渲染出来,那当我们看不见它的时候就不会渲染,但这便会引发一个问题,我们隔得它很近,不在视野范围内就听不见它得声音。要避免这种情况得方法是。
点击粒子细节面板中Bounds设定勾上Use Fixed Relative Bounding Box。上面得各类参数是设定渲染的距离。

9.基于物理的音频
音效通常是由物理数据驱动的,例如两个物体相撞时就会播放一个音效,这里讨论如何约束和映射这些数值,让它们可以用到音频上,以及如何混合不同的音效,同时保留不同冲击强度下呈现的多种音效。
9.1案例1撞击木桶

教程中给的案例为,该木桶撞击到木板上,根据木板的高度发出不同的碰撞音效。
首先我们需要为木桶模拟物理,以及生成碰撞事件

随后生成事件Event Hit

将收到的冲击力单位化至0-1范围内,赋值给Force,再将Force赋值给音效。
你可以通过控制台输入AudioSoloSoundClass Collision(只播放造成碰撞的音效)来进行测试(这样可以防止其他音效影响),这样你就可以听出不同力度发出音效的音量。
上面的情况适用于只有一种音效,现在我们来混和一下三种不同的撞击音效,Soft,Medium,Hard。
官方教程中给了这三个音效的曲线。现在我们同样利用Get Float Value进行混合
同时来观察一下三个曲线

可以发现三者曲线在0-1范围内进行切换,并发现交界处并不是完全只有一个音效。而这也更符合实际情况。
9.1案例2滚动木桶

教程中给的案例为,木桶滚动根据滚动速度发生不同音效,撞击到物体根据受力发出不同音效。据此我们需要关注木桶的x轴的角速度。

利用Get Physices Augular Velocity In Degrees(通过角度获取物理角速度),将其X轴的值赋值给Rotation Speed,和上文相似,将Normal Impulse 赋值给Force
首先我们来看滚动音效的蓝图:

这里通过判断角速度是否接近于0,进行播放滚动音效的Fade Out淡出

上方蓝图,Do Once 防止音效多次触发。Reset的条件是播放了Fade Out。同时我们需要注意的是,木桶滚动的音效的开始Start Time不能每次都是从0开始,如果每次都一样,你听到的滚动音效就会是一样的。所以这里获取音效的Duration(持续时间)在(0-Duration-1)随机选一个时间开始播放。
下方蓝图控制音效的音量(Volume Mulitiplier)和音高(Pitch Multiplier)。
接着我们来看撞击的蓝图:

同样需要DoOnce,利用Map Range Clamped(映射范围限制)将上文获取的Force赋值给音效
9.1案例3滚动Box

这里我们需要注意的是盒体就不能再关注其角速度了,而是它的线性速度。

后面的蓝图和上文提及的基本一样,所以不做讨论。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)