在本教程中,你将学习如何使用MetaSounds创建程序化音乐。 你将为自己的冒险游戏创建程序化生成的背景音乐。
MetaSounds是一个高性能音频系统,它可以使用基于节点的系统生成声音源,其方式类似于蓝图可视化脚本系统。
开始之前
请确保你已掌握虚幻引擎新用户指南文档中涵盖的以下内容:
蓝图基础知识,例如如何添加和连接节点。
使用MetaSounds创建程序化音乐
你将从创建一个MetaSound资产开始。 执行以下步骤:
进入内容浏览器,导航到Content > AdventureGame > Artist > Audio文件夹。
在音频(Audio)文件夹中,创建一个名为Music的新文件夹。
在音乐(Music)文件夹中右键单击,然后选择Audio > MetaSound Source。
将该资产命名为
MS_BGM,即MetaSound背景音乐。打开该资产。
该资产将在MetaSound编辑器中打开。 在新窗口中,你将在图表中看到三个节点——Input、Output On Finished和Input Out Mono。
该音频源被播放时就会执行Input触发器。 一个MetaSound总是从一个Input开始。
执行Output On Finished触发器,从而停止播放该音源。 如果你在其他地方(例如蓝图)停止音频,就不需要使用这个节点来停止音频源播放。 在本例中,你将使用蓝图来启动和停止音频,因此不需要使用这个节点。
Output Out Mono节点表示MetaSound图表的最终音频输出,它会将所有上游音频信号汇总并输出为单声道(mono)音频。 任何连接到该节点的节点,都会被混合处理,并作为声音的输出发送到引擎。
设置音乐节奏与节拍
首先,你将创建一些节点来设置音乐的节奏和节拍。 执行以下步骤:
拖出Input节点的引脚,并添加一个Trigger Repeat节点。
在Trigger Repeat节点上,拖出Period引脚,并添加一个BPM To Seconds节点。 将全音分法(Divisions of Whole Note)设置为16。
在BPM To Seconds节点上,拖出BPM引脚并选择提升为图表输入(Promote to Graph Input)。
在屏幕左上角成员(Members)面板中将Input的名称从BPM重命名为Note In。
在细节面板中,将Note In节点的默认值改为60。 你也可以在节点底部更改该值。
从Trigger Repeat节点拖出RepeatOut引脚,并添加一个新的Trigger Counter节点。
选择Trigger Counter节点,并将重置计数(Reset Count)设置为8。
这一部分用于设置节奏和节拍。 此外,你可以选中你添加的四个节点——Trigger Counter、Trigger Repeat、BPM To Seconds和Input,然后按C键,添加一个包含这些节点的注释框。 将该注释框命名为Tempo and Rhythm。
生成旋律
接下来,你将创建功能逻辑,利用你定义的节奏和拍子生成旋律。 执行以下步骤:
在Trigger Counter节点中:
拖出On Trigger引脚,并添加一个Random Get (Float:Array)节点。
拖出Trigger Counter节点On Reset引脚,并将其连接到Random Get节点的Reset引脚。
从Random Get节点中,拖出In Array引脚并添加一个Scale to Note Array节点。
从Scale to Note Array节点拖出Scale Degrees引脚,选择提升为图表输入(Promote to Graph Input),并将其命名为Scale。
从Random Get节点拖出Seed引脚,并添加一个Random (Int)节点。
从Random (Int)节点中,拖出Next引脚并连接到Trigger Counter节点的On Reset引脚。
这一部分用于生成旋律。 你也可以选中所有新添加的节点,并添加一个名为旋律生成(Melody Generation)的注释框。
合成旋律
接下来,你将通过创建合成(Synthesis)来塑造旋律的实际声音效果。 这意味着要将生成的旋律音符转换为可听到的声音。 执行以下步骤:
在Random Get节点上,拖出Value引脚,并添加一个Add (Float)节点。
在Add节点上,将第二个输入引脚的值从0改为48。
从Add节点中,拖出exec引脚并添加一个MIDI To Frequency (Float)节点。
从MIDI To Frequency (Float)节点拖出Out Frequency引脚,并添加一个Sine节点。
从Sine节点拖出Audio输出引脚,并添加一个Add (Audio)节点。
你还需要再添加一个Sine节点,并将其连接到该Add节点。 然后,从Add节点拖出另一个输入引脚,并添加一个Sine节点。
在新的Sine节点上,拖出Frequency引脚,并添加一个MIDI To Frequency (Float)节点。
从MIDI To Frequency节点中,拖出MIDI In引脚并添加一个Add (Float)节点。
在Add节点上:
将第一个输入引脚连接到与第一个Sine节点相连的Add节点。
拖出第二个输入引脚并选择提升为图表输入(Promote to Graph Input)。 将其命名为Detune。
选择Detune输入,并在细节面板中将其范围(Range)改为0和12。
在细节面板中,将默认值更改为12。
现在,你已经合成了将要生成的旋律。 你可以再次为这个新部分添加一个注释框,并将其命名为Synthesis。
使用包络(Envelope)塑造声音
接下来,你将添加一个包络来塑造声音随时间变化的方式,通过控制声音的开始、持续和淡出,使其听起来更加自然。
要添加一个包络(Envelope),请执行以下操作:
滚动到你之前创建的旋律生成部分(如果你添加了注释框,它应该命名为Melody Generation)。 从Random Get (Float:Array)节点拖出On Next引脚,并添加一个AD Envelope (Audio)节点。 将这个新节点移动到你在合成部分添加的两个Sine节点之后。
从该节点拖出Out Envelope引脚,并添加一个Multiply (Audio)节点。
从这个Multiply节点拖出第二个输入引脚,并将其连接到你之前连接了两个Sine节点的Add (Audio)节点的输出引脚。
在AD Envelope (Audio)节点上,将衰减时间(Decay Time)改为0.2。
从Multiply (Audio)节点中,拖出输出引脚并连接到MetaSound Source中已有的Output Out Mono节点。
现在,在MetaSound Source窗口顶部工具栏附近点击播放按钮。 它将持续播放程序化生成的音乐。
如果想了解更多关于在虚幻引擎中制作程序化音乐的内容,请参阅使用MetaSound创建程序化音乐页面。
使用蓝图在游戏中播放音乐
在继续操作之前,你将创建一个蓝图,用于在关卡中播放背景音乐。
由于这个蓝图会被添加到关卡中,但本身没有可见的模型表示,因此你需要在蓝图中添加一个广告牌(Billboard)组件。 该组件会添加一个2D Sprite,使其在编辑器中可见,方便你在编辑关卡时找到它,但它不会在游戏中显示。
要创建背景音乐蓝图,请执行以下操作:
前往内容浏览器,并导航到Content > AdventureGame > Artist > Audio > Music。
右键创建一个新的蓝图类(Blueprint Class),并让它继承自Actor父类。 将其命名为BP_BGM,表示蓝图背景音乐(Blueprint Background Music)。
在组件面板中,点击添加,然后添加一个广告牌组件。 在细节面板中,你可以看到Sprite默认设置为S_Actor。 你可以更改Sprite,也可以保持默认设置。
前往事件图表选项卡开始构建功能逻辑。
从Event BeginPlay节点拖出连接线,并添加一个Branch节点。
从Branch节点拖出Condition引脚,并选择提升为变量(Promote to Variable)。 将此变量命名为Active。 该变量将用于判断这个音频源是否处于激活状态。
在我的蓝图面板中的变量(Variables)列表里,点击Active变量旁边的眼睛图标,使其处于打开状态,这样该变量就会变为公开,并且可以在关卡编辑器中进行编辑。
编译蓝图,并在细节面板中确认Active变量的默认值为true(启用)。
从Branch节点拖出True引脚,并添加一个Play Sound 2D节点。
在Play Sound 2D节点上,使用下拉菜单将Sound引脚设置为MS_BGM。
在Play Sound 2D节点中,点击向下箭头以展开节点选项。 拖出音量乘数(Volume Multiplier)引脚,并选择提升为变量(Promote to Variable)。
点击变量的眼睛图标,使其公开并且可编辑,然后编译蓝图,并将其默认值更改为0.5。
保存并编译你的蓝图。
在Play Sound 2D节点中,“2D” 表示该声音的播放不会受到玩家在关卡中位置的影响。 换句话说,该声音不会在三维空间中进行空间化处理,因此距离和方向不会影响玩家听到的效果。
在游戏中测试音乐
现在你可以返回关卡编辑器,并将BP_BGM蓝图添加到关卡中。
在关卡中选择BP_BGMActor,然后在细节面板中确认你添加的两个变量已正确设置:Active应处于开启状态,而音量乘数(Volume Multiplier)应设置为0.5。
你可以尝试不同的音量乘数值,看看哪种最适合你的使用场景。 由于这是背景音乐,你可能希望将音量设置为较低值,以保持其作为背景音的效果。
现在,可以开始游戏测试了。 此时,你应该能够听到自己创建的音乐在背景中播放。
下一步
在下一个模块中,你将学习如何为玩家角色添加动态脚步声效果,使其在不同类型的地面上行走时播放不同的声音。