UE4学习笔记:音频系统简介和基础使用方法(Sound Wave、Sound Class、Sound Mix)

本随笔用于记录学习ue4引擎的音频系统过程中一些有用的知识点,以及记录一些会踩坑的地方,由于该随笔只是一个初学者的学习笔记因此并不会涉及到引擎音频系统的编写本随笔时使用的引擎版本是4.27。

随笔作者还在学习阶段,对虚幻引擎的理解还处于基础阶段,难免出现书写和技术上的问题,如果出现类似问题欢迎在评论区或私信和我讨论。

该随笔会随着后续学习引擎音频系统新特性之后进行更新。

基础资产

音波(Sound Wave)

音波是ue音频系统最基础的音效资产,相当于mp3等音频格式在ue系统里面的存在。但是需要注意的是要从外部导入音频文件到引擎里并生成音波文件需要wav格式的音频文件才能正确导入成功
导入之后双击可以打开音波的细节面板,其中最重要的属性是音频(Sound)分类下的:
image
分组(Group):以枚举的形式为音效分组。
循环(Looping):是否循环。选中之后播放该音波时会循环播放而不是播放完后停止。
音量(Volume):该值是一个乘数,用来表示以声源多少倍的音量播放该音波。
音高(Pitch):该值是一个乘数,用来表示以生源多少倍的音高播放该音波。
音频类(Class):用引擎资产的形式给该音波进行分组,当我们要实现同时更改一系列音波的音量等属性时就不需要单个更改。

音频类(Sound Class)

音频类可以把音波资产分类到一起,然后同时更改音波属性。
音频类常用的属性:
image
音量(Volume):该值是一个乘数,会在音波被自身的音量值乘积之后再与该值进行乘积,从而确定最后播放音频的音量
音高(Pitch):该值是一个乘数。会在音波被自身的音高值乘积之后再与该值进行乘积,从而确定最后播放音频的音高
低通滤波频率(Low Pass Filter Frequency):低通滤波的截至频率,音频只会播放低于该值的音波,高于20000的值没有任何效果。降低该值可以实现类似“水下”这类环境中“沉闷”的音效。
衰减距离缩放(Attenuation Distance Scale):对音频类中所有音波的衰减距离进行缩放。
始终播放(Always Play):启用后,可以阻止音频类内的音波被低优先级的音波从音频池内弹出。
子类(Child Classes):设置该音频类的子音频类,在项目运行中更改该音频类的属性是可以让对音频类的更改也作用于该属性值指定的全部子类,方便实现类似“更改全局音量”的功能。
被动混音修改器(Passive Sound Mix Modifiers):该属性可以设置一个音频混音数组,因为是“被动”所以只要该音频类内的音波被播放时会自动应用这里的混音,而不需要用户手动添加混音。可以为每个混音设置“最小音量阈值(Min Volume Threshold)”和“最大音量阈值(Max Volume Threshold)”,当该音频类的音波在这个音量范围内进行播放时才会触发被动混音,否则不触发。该功能可以防止过远的声音还会触发被动混音的问题。

混音(Sound Mix,在引擎里也叫Sound Class Mix)

除了支持EQ设置,还支持修改细节面板里指定音频类的音量和音高等属性。
混音常用的属性:
image
音频类效果(Sound Class Effects):除了指定要作用的音频类,还可以更改音频类的音量、音高等属性,这些属性会在音波的音量与音频类音量进行乘积之后再与该值进行乘积,得出的结果就是最后音波的音量大小。对于低通滤波频率(Low Pass Filter Frequency)属性则会取最小的那个值作为最终的值。
初始延迟(Initial Delay):单位为秒。在经过该值指定的时间后才会应用混音。
渐入时间(Fade in Time):混音混入的时间。
持续时间(Duration):混音持续的时间,持续时间过后该混音会自动被取消掉。如果该值为负数的话则说明该混音会一直持续,直到手动取消。(作者注:注释里面说会持续到另外的Mix被set,但是经过测试发现后面的mix被添加之后会与当前Mix叠加,而不会被覆盖,因此认为注释解释错误,或者是我的理解错误了,欢迎在评论区或私信与我讨论。)
渐出时间(Fade Out Time):混音渐出时间。

常用的使用方式

资产设置

  • 在音波(Sound Wave)资产的细节面板里的“类(Class)”属性指定音频类,一方面该操作可以让多个音波资产统一归类,另一方面在播放音波资产的时候会让音频类里的音量属性和音波资产的音量属性进行相乘,音高和音高属性进行相乘,低通滤波频率选择最小值,最后的结果就是音波资产播放时的效果,也就是说起到一个修改音波属性值的作用。
  • 在音频类(Sound Class)资产的细节面板里指定“子类(Child Classes)”,从而在对音波资产进行分类的基础上,对音频类指定子类,则可以实现当我们更改某一音频类属性时,也可以让这些子类也一起应用上这些改变。
  • 在混音(Sound Mix)资产的细节面板里的“音频类效果(Sound Class Effects)”属性指定音频类,混音需要在该属性里指定要需要作用的音频类,换个说法如果该属性的值为空,则该混音不会起任何作用,而混音也仅仅只会作用于音频类效果属性指定的音频类。

在音频类的属性“被动混音修改器(Passive Sound Mix Modifiers)”里指定要应用的混音,则可以在该音波资产被播放时自动应用上被动混音修改器里面的所有混音

音频类里的属性被动混音修改器(Passive Sound Mix Modifiers)可以指定一系列混音资产,从而在之前播放的结果上进一步应用相关的属性来实现音频效果的更改。不过需要注意的是在混音资产的属性音频类效果(Sound Class Effects)里需要有我们播放的音波资产关联的音频类,否则该被动混音修改器将不会发挥效果。

使用“压入混音修改器(Push Sound Mix Modifier)”方法,让混音资产的属性应用到音波上

image

UFUNCTION(BlueprintCallable, Category="Audio", meta=(WorldContext = "WorldContextObject"))
static void PushSoundMixModifier(const UObject* WorldContextObject, class USoundMix* InSoundMixModifier);

当我们在播放音波的时候,可以通过使用“压入混音修改器(Push Sound Mix Modifier)”的方法传入一个混音资产来对音波执行修改,同样需要注意混音资产有没有指定正确的音频类。
当我们不再需要该混音的时候可以使用“弹出混音修改器(Pop Sound Mix Modifier)”方法传入一个混音资产来取消该混音资产产生的效果。

使用“设置混音类覆盖(Set Sound Mix Class Override)”方法修改单个音频类的属性

image

UFUNCTION(BlueprintCallable, Category = "Audio", meta = (WorldContext = "WorldContextObject"))
static void SetSoundMixClassOverride(const UObject* WorldContextObject, class USoundMix* InSoundMixModifier, class USoundClass* InSoundClass, float Volume = 1.0f, float Pitch = 1.0f, float FadeInTime = 1.0f, bool bApplyToChildren = true);
  • 当我们正在播放音波并且应用了混音时,如果我们想要修改混音里某个音频类的属性时,可以使用“设置混音类覆盖(Set Sound Mix Class Override)”方法来指定混音资产和音频类资产,然后对指定的音频类资产更改音量、音高属性,以及设置渐入时间,还可以指定是否要应用到该音频类的子类上。
  • 需要注意的是使用该方法进行更改的音量、音高等都是直接覆盖值,而不再作为一个乘数发挥效果。
  • 如果勾选方法的“应用到子类(Apply to Children)”属性,则只要指定的音频类或其子类是混音资产指定的音频类,则依然可以产生效果,而不一定要混音资产和音频类资产是一一对应的。
posted @ 2025-04-25 23:18  U_N_Owen  阅读(101)  评论(0)    收藏  举报