MetaSound快速入门指南

参照此快速入门教程了解如何使用MetaSound创建程序化音乐系统。

Choose your operating system:

Windows

macOS

Linux

目标

在此快速入门教程中,你将学习如何使用MetaSound创建基本的程序化音乐系统。此外,你还将学习如何使用蓝图来修改MetaSound参数,以便在运行时调整音效。

目的

  • 使用MetaSound创建基本的程序化音乐系统。

  • 在运行时创建可以更改MetaSound的多个参数的蓝图。

1 - 必要设置

  1. 点击 设置(Settings) > 插件(Plugins) 以打开 插件菜单(Plugins Menu).

    图像替换文本

  2. 转到 音频(Audio) 部分,并为MetaSound插件选择 启用(Enabled)。接受警告并重新启动编辑器。

    图像替换文本

  3. 内容浏览器(Content Browser) 中,右键点击选择 音效(Sounds) > MetaSound ,创建新的MetaSound资产。 将资产命名为 MS_ProceduralMusic

    图像替换文本

    图像替换文本

  4. 双击打开 MS_ProceduralMusic MetaSound。

阶段成果

你已经启用了MetaSound插件,并创建了第一个MetaSound。你现在可以开始使用MetaSound编辑器了。

2 - 使用MetaSound编辑器

介绍编辑器

MetaSound编辑器(MetaSound Editor) 是创建、修改和预览MetaSound的地方。MetaSound在播放时会转换为C++代码。

所有 音频输入(Audio Inputs) 都实时求值,这意味着数值的改动会在MetaSound播放时实时反应出来。对MetaSound的拓扑结构进行更改后,你需要从头重新播放MetaSound才能听出变化。

MetaSound编辑器概览

图像替换文本

分段

说明

1 - 工具栏(1 - Toolbar)

此工具栏包含适用于MetaSound:2的以下高级功能按钮。 | 保存(Save) - 保存当前MetaSound资产。

  • 浏览(Browse) - 导航至内容浏览器中的当前MetaSound。

  • 播放/停止(Play / Stop) - 播放或停止当前MetaSound。

  • 通用(General) - 打开检视器中的通用设置(General Settings)面板。在这里可以修改MetaSound在音频引擎中的默认播放行为。

  • MetaSound - 在检视器中打开MetaSound设置。在这里可以修改MetaSound的音频渲染细节。

2 - 输入和输出(2 - Inputs and Outputs)

此分段包含MetaSound的输入和输出。输入是实时求值的,可以在外部修改。

3 - 检视器(3 - Inspector)

此分段会根据MetaSound编辑器中选择的内容发生变化,类似于其他编辑器中的细节面板(Details Panel)。此外,它还包含根据选择的内容提供的选项。

4 - MetaSound图表(4 - MetaSound Graph)

此分段包含用于构成MetaSound DSP拓扑的节点。在创建时,每个MetaSound都包含以下节点:

  • On Play - 类似于蓝图脚本中的"开始播放时事件",此节点是在MetaSound开始播放时调用的默认输入触发器。

  • On Finished - 这是在MetaSound完成播放时调用的输出触发器。它可以被一次性音效有选择地触发。

  • Output - MetaSound的音频输出。默认为单声道输出。输出通道格式可以在MetaSound中调整。

5 - 仪表(5 - Meter)

连接到MetaSound输出的音量表。它会显示每个音频通道的振幅(如果是单声道则全部相同),并采用300毫秒作为启动时间和释放时间(音量表标准)。

通用设置面板

通用设置(General Settings) 会显示可用于虚幻引擎中任何声效源的公用设置。你可以修改MetaSound属性,例如音效(Sound)、衰减(Attenuation)、子混音(Submix)、调制(Modulation)和并发设置(Concurrency settings)。

MetaSound设置面板

MetaSound设置(MetaSound Settings) 会显示与当前MetaSound相关的设置。这里你可以指定MetaSound的 作者(Author)描述(Description)。此外,你还可以指定MetaSound的 输出格式(Output Format),其中包括单声道和立体声。

在虚幻引擎5的完整版中,MetaSound会暴露音频渲染的块大小(block size)和采样率设置。音效设计师可以选择为每个MetaSound添加主要版本和次要版本,以进一步简化工作流。

MetaSound图表

MetaSound图表由各种节点和引脚组成,类似于Sound Cue、蓝图和材质编辑器图表。此外,MetaSound有一些关键的不同,需要音效设计师的注意。

MetaSound是数据流图表

MetaSound不是编程语言,也不存在需要编程语言解释的中间层。节点是使用非托管C++(unmanaged C++)编写的,直接以C++执行。

图表的数据流从左向右移动,因此需要将输出引脚连接到输入引脚。MetaSound没有事件图表的概念,因为图表的数据始终在流动。

MetaSound是非循环的

MetaSound是一种不包含循环的数据流图表。换而言之,你无法将节点的输出引脚连接到另一个节点的输入引脚,以此创建一种循环效果。

如需在UE5体验版中实现循环行为,你可以使用 SendReceive 节点。这些节点会将数据写入到数据注册表中,供下一个音频渲染块读取。从技术角度上讲,这类连接不会创建循环,因为数据是从不同的渲染块读取并写入的。

目前正计划将更便捷的数据读写方法加入到虚幻引擎5的正式版中。

MetaSound输入和输出被引用共享

MetaSound引脚通过只读引用来传递数据。这意味着,将MetaSound输出引脚连接到任意数量的其他节点的输入引脚并不会影响开销。一些MetaSound节点可能会在内部根据需要复制数据,但这并非MetaSound图表的固有属性。

相似的节点流程

要将节点添加到MetaSound图表中,请右键点击图表,并在列表中选择合适的节点。在抢先体验版中,MetaSound随附了一组节点,允许音效设计师通过一些常用功能来创建强大而灵活的MetaSound。

在虚幻引擎5的完整版中,MetaSound将包含更多的节点来扩展其功能。借助MetaSound API,你可以在第三方插件中轻松创建新节点。如需更多信息,请参见 MetaSound C++ API

如需了解MetaSound中最常见的节点列表,请参见MetaSound参考指南。

阶段成果

在此分段中,你学习了MetaSound编辑器以及如何使用它来创建MetaSound。此外,你还学习了编辑器的不同分段以及如何在MetaSound图表中创建新节点。

你现在已经可以创建第一个MetaSound资产了。

3 - 创建基础程序化音乐系统

在此分段中,你将创建一个基础音乐系统,其中的所有音频(包括旋律和节奏)都是根据一组参数在运行时程序化生成的。

  1. 在内容浏览器中,双击打开 MS_ProceduralMusic MetaSound。

  2. Input 节点拖出,然后搜索并选择 Trigger Repeat

    图像替换文本

  3. 右键点击 MetaSound图表(MetaSound Graph),然后搜索并选择 BPM To Seconds。在 BPM To Seconds 节点上,将 全音符的划分(Divisions of Whole Note) 值设置为16。将 BPM To Seconds 节点的 秒(Seconds) 引脚连接到 Trigger Repeat 节点的 时间段(Period) 引脚。

    图像替换文本

    图像替换文本

  4. BPM To Seconds 节点的 BPM 引脚拖出,然后选择 提升到图表输入(Promote to Graph Input)。将输入变量命名为 BPM

    图像替换文本

  5. Trigger Repeat 节点的 RepeatOut 引脚拖出,然后搜索并选择 Trigger Counter。将 重置计数(Reset Count) 数值设为 8。在这组节点周围创建一个注释框,然后将其命名为 拍子和节奏(Tempo and Rhythm)

    图像替换文本

    图像替换文本

  6. Trigger Counter 节点的 触发时(On Trigger) 引脚拖出,然后搜索并选择 Random Get (Float:Array)*。将 Trigger Counter 节点的 重置时(On Reset) 引脚连接到 Random Get 节点的 重置(Reset)** 引脚。

    图像替换文本

  7. 右键点击 MetaSound图表(MetaSound Graph),然后搜索并选择 Scale to Note Array。将 Scale to Note Array 节点的 向外扩展数组(Scale Array Out) 引脚连接到 Random Get 节点的 数组中(In Array) 引脚。从 Scale to Note Array 节点的 扩展程度(Scale Degrees) 引脚拖出,然后选择 提升到图表输入(Promote to Graph Input)。将输入变量命名为 扩展(Scale)

    图像替换文本

    图像替换文本

  8. MetaSound图表(MetaSound Graph) 中右键点击,然后搜索并选择 Random Int。将 最大值(Max) 的数值设为 100000。将 Random Int 节点的 数值(Value) 引脚连接到 Random Get 节点的 种子(Seed) 引脚。从 Random Int 节点的 下一个(Next) 引脚拖出,然后选择 提升到图表输入(Promote to Graph Input)。将输入变量命名为 新旋律(New Melody)

    图像替换文本

    图像替换文本

  9. Random Get 节点的 数值(Value) 引脚拖出,然后搜索并选择 添加浮点(Add Float)。将空引脚中的数值设置为 48。在这组节点周围创建一个注释框,然后将其命名为 生成旋律(Melody Generation)**。

    图像替换文本

    图像替换文本

  10. 右键点击 MetaSound图表(MetaSound Graph),然后搜索并选择 Sine。右键点击 MetaSound图表(MetaSound Graph),然后搜索并选择 MIDI To Frequency (Float)。将**MIDI To Frequency (Float) 节点的 输出频率(Out Frequency) 引脚连接到 Sine 节点的 频率(Frequency) 引脚。将上一个 Add 节点的的结果连接到 MIDI To Frequency (Float) 节点的 MIDI输入(MIDI In)** 引脚。

    图像替换文本

    图像替换文本

  11. 重复上述步骤,添加第二个 SineMIDI To Frequency (Float) 节点。从上一个 Add 节点的结果引脚拖出,然后搜索并选择 添加浮点(Add Float)。将此节点的的结果连接到 MIDI To Frequency (Float) 节点的 MIDI输入(MIDI In) 引脚。

    图像替换文本

  12. Add 节点的空引脚拖出,然后选择 提升到图表输入(Promote to Graph Input)。将输入变量命名为 去谐(Detune)。将 去谐(Detune) 的默认数值设为 6。从顶部 Sine 节点的 音频(Audio) 引脚拖出,然后搜索并选择 Add Audio。将底部 Sine 节点的 音频(Audio) 引脚连接到 Add Audio 节点的空引脚。在这组节点周围创建一个注释框,然后将其命名为 合成 - 正弦(Synthesis - Sine)

    图像替换文本

  13. 重复步骤10到12,创建与此前相同的节点集,但在此实例中添加 Saw 节点,而非 Sine 节点。你现在应该有两组节点,如下所示。

    图像替换文本

    图像替换文本

  14. 右键点击 MetaSound图表(MetaSound Graph),然后搜索并选择 Crossfade Audio 2。将两个 Add Audio 节点的 音频(Audio) 引脚分别连接到 Crossfade 节点的 输入0(In 0)输入1(In 1) 引脚。从 交叉渐变数值(Crossfade Value) 引脚拖出,然后选择 提升到图表输入(Promote to Graph Input)。将输入变量命名为 交叉渐变(Crossfade)。在这组节点周围创建一个注释框,然后将其命名为 交叉渐变(Crossfade)

    图像替换文本

    图像替换文本

  15. Crossfade 节点的 输出(Out) 引脚拖出,然后搜索并选择 Ladder Filter。右键点击 MetaSound图表(MetaSound Graph),然后搜索并选择 LFO。将 频率(Frequency) 设置为 0.5,将 最小数值(Min Value) 设置为 500,将 最大数值(Max Value) 设置为 5000。将 LFO 节点的 输出(Out) 引脚连接到 Ladder Filter 节点的 截止频率(Cutoff Frequency) 引脚。在这组节点周围创建一个注释框,然后将其命名为 筛选(Filtering)

    图像替换文本

    图像替换文本

  16. 返回到 Random Get 节点,并从 在下一个(On Next) 节点拖出,然后搜索并选择 AD Envelope Audio。将 衰减时间(Decay Time) 数值设为 0.1。在该节点周围创建一个注释框,然后将其命名为 包络(Enveloping)

    图像替换文本

17.从 AD Envelope Audio 节点的 输出包络(Out Envelope) 引脚拖出,然后搜索并选择 Multiply Audio。将 Ladder Filter 节点的 输出(Out) 引脚连接到 Multiply Audio 节点的 音频(Audio) 引脚。

![图像替换文本](image_29.png)(convert:false)

![图像替换文本](image_30.png)(convert:false)
  1. Multiply Audio 节点的 音频(Audio) 引脚拖出,然后搜索并选择 Delay。将 延迟时间(Delay Time) 数值设为 0.02

    图像替换文本

    图像替换文本

  2. 右键点击 MetaSound图表(MetaSound Graph),然后搜索并选择 Stereo Delay。将 Delay 节点的 输出(Out) 引脚连接到 Stereo Delay 节点的 输入-左侧(In Left) 引脚。将 Multiply Audio 节点的 音频(Audio) 引脚连接到 Stereo Delay 节点的 输入-右侧(In Right) 引脚。

    图像替换文本

  3. Stereo Delay 节点中,将 延迟模式(Delay Mode) 设置为 乒乓(Ping Pong)。将 延迟时间(Delay Time) 设置为 0.2,将 延迟比率(Delay Ratio) 设置为 0.2,将 干燥级别(Dry Level) 设置为 0.7,将 潮湿级别(Wet Level) 设置为 0.2,并将 反馈(Feedback) 设置为 0.4。在这组节点周围创建一个注释框,然后将其命名为 效果处理(Effects Processing)

    上述创建的效果名为"立体声扩展(Stereo Widening)"。在此示例中,延迟会使原始单声道听上去仿佛像立体声一般。

    图像替换文本

  4. 点击 工具栏(Toolbar) 上的 MetaSound 按钮。转到 检视器(Inspector),然后在 Meta Sound 类别下,将 输出格式(Output Format) 设置为 立体声(Stereo)**。

    图像替换文本

    图像替换文本

  5. Output 节点移动到 MetaSound图表(MetaSound Graph)的边缘,然后将 Stereo Delay 节点的 输出 - 左侧(Out Left) 引脚连接到 Output 节点的 左侧音频(Left Audio) 引脚。将 Stereo Delay 节点的 输出 - 右侧(Out Right) 引脚连接到 Out 节点的 右侧音频(Right Audio) 引脚。

    图像替换文本

  6. 保存(Save) MetaSound 并按 播放(Play) 即可听到音乐。在音乐播放的过程中,更改 BPM 输入的数值可实时查看反映出的变化。你还可以将 交叉渐变(Crossfade) 输入的数值从 0 切换为 **1**来查看效果。

阶段成果

在分段中,你学习了如何使用MetaSound创建基本的程序化音乐系统。

4 - 添加蓝图交互

在此分段中,你将学习如何在运行时使用蓝图Actor来更改MetaSound参数。

MetaSound蓝图界面目前正在积极开发中,预计在虚幻引擎5的完整版推出之前将会发生变化。

  1. 内容浏览器(Content Browser) 中,右键点击并选择 蓝图类(Blueprint Class)。点击 Actor 类以创建新的蓝图。将蓝图命名为 BP_MusicPlayer

    图像替换文本

    图像替换文本

  2. 双击打开 BP_MusicPlayer。在 Components(组件) 面板中,点击 添加(Add) 按钮,然后搜索并选择 盒体碰撞(Box Collision)。将碰撞盒体命名为 Trigger_BPM。将盒体碰撞 刻度(Scale) 设置为 X=5Y=5Z=1,将其 位置(Location) 设置为 X=0Y=350Z=0。最后,向下滚动到 渲染(Rendering) 部分,然后 禁用(Disable) 在游戏中隐藏(Hidden in Game) 复选框。

    图像替换文本

    图像替换文本

  3. 按照此前的步骤再添加两个 盒体碰撞(Box Collision) 组件。将新组件命名为 Trigger_CrossfadeTrigger_Melody。将 Trigger_Crossfade位置(Trigger_Crossfade Location) 设置为 X=0Y=0Z=0,并将 Trigger_Melody位置(Trigger_Melody Location) 设置为 X=0Y=-350Z=0

    图像替换文本 image alt text

  4. 添加三个 文本渲染(Text Render) 组件以辨识每个 盒体碰撞(Box Collision),如下所示。

    图像替换文本 image alt text

  5. Components(组件) 面板中,点击 添加(Add) 按钮,然后搜索并选择 音频(Audio)。转到 细节(Details) 面板,然后点击 音效(Sound) 下拉菜单。搜索并选择 MS_ProceduralMusic

    图像替换文本

    图像替换文本

  6. 选择 Trigger_BPM 组件,然后转到 细节(Details) 面板。向下滚动到 事件(Events) 分段,然后点击 在组件开始重叠时(On Component Begin Overlap)在组件结束重叠时(On Component End Overlap) 旁边的 + 按钮。对**Trigger_CrossfadeTrigger_Melody** 组件重复执行这些步骤。

    图像替换文本

  7. 转到 我的蓝图(My Blueprint) 面板,然后点击 变量(Variables) 分段旁边的 + 号创建新变量。将变量命名为 NewBPM。转到 细节(Details) 面板,然后从 变量类型(Variable Type) 下拉菜单中选择 浮点(Float)启用(Enable) 实例可编辑(Instance Editable) 复选框,如下所示。编译(Compile)保存(Save) 蓝图。

    图像替换文本

    图像替换文本

  8. 在选择 NewBPM 变量之后,转到 细节(Details) 面板,然后滚动到底部。将 NewBPM 的默认数值设为 110编译(Compile)保存(Save) 蓝图。

    图像替换文本

  9. 复制(Duplicate) NewBPM 变量并将副本命名为 OriginalBPM。将其默认数值设置为 90

    图像替换文本

  10. On Component Begin Overlap (Trigger_BPM) 节点拖出,然后搜索并选择 Do Once。从 On Component End Overlap (Trigger_BPM) 节点拖出,然后搜索并选择 Sequence。将 Sequence 节点的**然后为0(Then 0) 引脚连接到 Do Once 节点的 重置(Reset)** 引脚。

    图像替换文本

  11. 音频(Audio) 组件拖动到 事件图表(Event Graph),以创建节点。从 Audio 节点拖出,然后搜索并选择 Get Parameter Interface。从 Get Parameter Interface 节点拖出,然后搜索并选择 Set Float (Interface Call)。将 名称(Name) 设置为 BPM。将 NewBPM 变量拖动到 事件图表(Event Graph),并将其连接到 Set Float 节点的 数值(Value) 引脚。将 Do Once 节点连接到 Set Float 节点。

    图像替换文本

  12. 音频(Audio) 组件拖动到 事件图表(Event Graph),以创建节点。从 Audio 节点拖出,然后搜索并选择 Get Parameter Interface。从 Get Parameter Interface 节点拖出,然后搜索并选择 Set Float (Interface Call)。将 名称(Name) 设置为 BPM。将 OriginalBPM 变量拖动到 事件图表(Event Graph),并将其连接到 Set Float 节点的 数值(Value) 引脚。将 Sequence 节点的**然后为1(Then 1) 引脚连接到 Set Float** 节点。

    图像替换文本

  13. On Component Begin Overlap (Trigger_Crossfade) 节点拖出,然后搜索并选择 Do Once。从 On Component End Overlap (Trigger_Crossfade) 节点拖出,将其连接到 Do Once 节点的 重置(Reset) 引脚。

    图像替换文本

  14. 音频(Audio) 组件拖动到 事件图表(Event Graph),以创建节点。从 Audio 节点拖出,然后搜索并选择 Get Parameter Interface。从 Get Parameter Interface 节点拖出,然后搜索并选择 Set Float (Interface Call)。将 名称(Name) 设置为 交叉渐变(Crossfade)

    图像替换文本

  15. Set Float 节点的 数值(Value) 引脚拖出,然后搜索并选择 Select Float。将 B 数值设为 1.0。从 选择A(Pick A) 引脚拖出,并选择 提升为变量(Promote to Variable)

    图像替换文本

    图像替换文本

  16. PickA 变量拖动到 事件图表(Event Graph),然后选择 Set PickA。再次将 PickA 变量拖动到 事件图表(Event Graph),然后选择 Get PickA。从 PickA 节点拖出一根引线,然后搜索并选择 非布尔(Not Boolean)。将 Not 节点连接到 Set PickA 节点的 PickA 引脚。将 Set Float 节点连接到 Set PickA 节点。

    图像替换文本

  17. On Component Begin Overlap (Trigger_Melody) 节点拖出,然后搜索并选择 Do Once。从 On Component End Overlap (Trigger_Melody) 节点拖出,将其连接到 Do Once 节点的 重置(Reset) 引脚。

    图像替换文本

  18. 音频(Audio) 组件拖动到 事件图表(Event Graph),以创建节点。从 Audio 节点拖出,然后搜索并选择 Get Parameter Interface。从 Get Parameter Interface 节点拖出,然后搜索并选择 Trigger (Interface Call)。将 名称(Name) 设置为 新旋律(New Melody)编译(Compile)保存(Save) 蓝图。

    图像替换文本

  19. BP_MusicPlayer 蓝图拖入你的关卡,并按 播放(Play) 查看结果。 图像替换文本

阶段成果

在此小节中,你学习了如何在蓝图Actor中直接修改MetaSound参数。