项目介绍
我们的项目叫做「音乐密码」,是一个软硬件结合的项目,目的是希望能够通过游戏化自学习的方式来教会用户进行乐器演奏。产品内部包括了互动化的视频教学,让小白能够更快的入门,刚有一定基础的用户能够快速提升。游戏化的闯关让学习更加有趣,也让练习变的不再枯燥。积木式的编曲模块让音乐创作变的更加简单,不同风格音阶的可视化让乐理的理解更加容易。
Wwise使用介绍
项目的硬件端是一个Midi输入设备,软件端我们使用Unity游戏引擎。合成器方面我们对比了Unity下的几款合成器,以及移动原生合成后决定使用Wwise。原因是其他几款合成器对多层次声音的支持较弱且配置没有wwise方便,而原生的合成需要多端进行开发(Android只找到了FluidSynth),且需要将各端的最后效果调整一致。
下面说一下我们项目中使用Wwise的方式:
1、音源配置
音源源文件介绍
以一个琵琶的音源来举例,如图1所示音源一共分为4个层级:
1层:055_60.wav
2层:055_80.wav
3层:055_100.wav
4层:055_127.wav
每个层级对应的键盘力度都是不同的,且每个组音对应的音高也是不同的。
第1组 055_xxx.wav
第2组 056_xxx.wav
......
标记音源文件
下面我们使用了一个Excel表格来把音色文件中的每个文件和对应的“音高”和“力度值”进行了标注,如图2所示:“力度值”代表MIDI对应的弹奏力度,“键位值”对应MIDI的音高。这里进行的配置主要是为了后面使用WAAPI来进行批量导入到Wwise中。
导入Wwise
确定好音高和力度信息后,可以选择手动将音频文件导入到Wwise中,也可以自己根据WAAPI所需的格式整理对应文件,然后批量导入到Wwise中,先介绍一下手动导入的方式。因为手动导入需要进行的配置较多,这里只使用两组音色进行说明。
手动导入:
(1)手动导入了2组共6个音色到Wwise中,导入后将MIDI的配置选项卡打开。
(2)到MIDI选项卡中点开Keymap的配置,这里就是要对每个音色进行具体的配置,包括音高,力度等信息。
(3)这里导入的是Pipa Baisc Layer_060 和Pipa Baisc Layer_080两组音源具体的配置如图所示:
配置的说明参考官方文档:https://www.audiokinetic.com/zh/courses/wwise201/?source=wwise201&id=using_midi_filters
(4)到这里手动导入音源文件已经完成,后续我们生成了针对音色文件的Event和SoundBank。Event只包含了当前的音色,SoundBank只包含当前的Event:
批量导入:
这里我写了个简单的python脚本,根据Excel的内容生成了一个WAAPI支持的导入文件,具体内容如图所示,其中音高对应的键位是按两个音高之间的差值来取中间值,打击乐器类的是不需要进行取值的,值需要严格按键位做好对应即可,当然也可以直接将Excle根据WAAPI所需格式直接整理好,格式如图3:
WAAPI具体内容参考官方文档:https://www.audiokinetic.com/zh/library/edge/?source=SDK&id=waapi.html
WAAPI导入音频文件:
https://www.audiokinetic.com/zh/library/edge/?source=SDK&id=waapi_import.html
根据导入文件通过WAAPI将对应的文件导入到Wwise中,同时使用WAAPI生成了音源对应Event和SoundBank,Midi对应的力度和音高已经按导入文件中所配置的对应好了,导入后的结果如图4所示,结果与手动导入的方式是一样的。
延音乐器处理:
如果导入的音源是有延音的,比如提琴、笛子,需要将Loop的选项勾上,并对音源采样进行Loop的起止点进行设置,如图5
到这音源文件就已经成功导入到Wwise中了,下面要进行RTPC的配置以及Bus的配置。
2、Wwise配置
RTPC配置
实现要进行的RTPC的配置,我们主要进行了3项配置:力度跟音量的曲线、CC7命令的音量曲线以及Modulator Envelope。这里面最关键的就是Modulator Envelope的ADSR相关配置,如图6:
配置好以后可以先将Midi键盘与Wwise链接上来弹奏听一下,可以很方便的调整音源的效果。
最后就是要配置Bus相关的信息,我们的项目配置如图7所示,其中Gain Bus是作为整体增益来使用的,Synth Bus作为合成器最终的Bus增加了一个Peak_Limiter,防止声音过载产生噪音。
声音测试
配置到可以先测试一下声音是否与预期一致,包括音量的大小、力度手感、延音效果等效果,这个测试可以先在Wwise工程中线进行测试。
(1)我们需要准备一个midi输入设备(一般就是midi键盘),将midi键盘与PC先进行连接(Mac系统需要先连接Midi键盘再启动Wwise工程),连接后选择Control Surface Devices。
(2)添加当前MIDI设备,并选好 Receive From 和 Send To 选项。
(3)连接成功后,选择需要测试的音色,如果配置了CC7的命令,需要将音量拉倒需要的位置,这里将CC7拉到了最大值。弹奏的同时也可以观察MIDI note velocity选项,观察弹奏的力度信息。
测试完成后需要将音源导出并进行打包。
3、音源更新
导出音源的SoundBank:
(1)切换到SoundBank视图,选择需要导出的音源,以及需要导出的平台信息后,将音源导出成bnk文件。
(2)将.bnk文件导出成.pck文件,此步骤需要使用Wwise提供的Windows系统下的FilePackager工具。
(3)Pck文件是可以动态下载到客户端系统并重新加载的,如果音色文件进行了更新,则可以重新下载Pck文件。这一步就可以根据不同需求进行不同方式的处理了。
4 、Midi信号处理
这部分跟Wwise的关系并不大,简单介绍。项目硬件是一个自研Midi输入设备,项目是通过DryWetMIDI(https://www.codeproject.com/Articles/1200014/DryWetMIDI-High-level-processing-of-MIDI-files)的插件进行Midi数据的处理,包括根据拼装和弦信息、读取midi文件并根据bpm传递等。处理后将Midi信号传入Wwise中进行发声,同时也会将游戏中的一些变化通过Midi协议下发到硬件中,使硬件产生对应的效果。
音源文件加载到系统中后我们会把每个音源文件对应到一个Midi通道上,对应通道的MIDI消息会调用API:AkSoundEnginePINVOKE.CSharp_PostMIDIOnEvent发送Event进行发声。比如1通道是钢琴,2通道是吉他这样,当Midi信号是1通道时回调用钢琴对应的Event来进行发声,2通道则会调用吉他的Event。Midi文件会把所有的乐器与通道做好对应,用户弹奏的通道也会在游戏中进行设置。
在 MIDI 中通常使用 程序改变 ( Program Change )来控制通道对应的乐器音色,这里在应用实现上我们设计了一个通道到乐器的映射表 (通道号->事件ID) 的改变来实现MIDI中对通道音色的切换。然后每个事件对应一个音频包资源文件,通过Wwise的Api进行音色的加载和卸载,如: AkSoundEngine.LoadBank、AkSoundEngine.UnloadBank ,来管理音色的内存占用。
5、完善的采样合成器和波形生成合成器实现支持
模拟原声乐器的声音采样合成器是现在最流行的技术方案,是通过录制原生乐器的少许典型音频片段,通过各种回放处理,来模拟原生乐器的各种演奏技法的音响表现。
一个原声弦乐器一次击奏后的振幅包络模型通常可以分为四步线性段击奏-衰减-延音-释放(ADSR),如图:
Wwise 的采样合成单元对上述的ADSR都有对应实现
通常为了细腻的表现原声乐器音色,会在不同的音高和演奏力度下采样多组音频片段,Wwise也会根据不同的 MIDI 音高 和 力度回放不同的音频采样。
对MIDI多通道和复音的支持
Wwsie 支持MIDI中通道的概念,使得表现乐器合奏成为可能,再传统合成器中通常有最大复音数的限制,是指同时发声的乐器数量,Wwise在这方面是没有限制的,而且合成过程中对CPU计算资源的利用很高效,可以实现庞大乐队多声部乐曲的回放。
在复音合成器中如果没有音量压限器,通常会出现单乐器回放音量过小,多乐器回放能量过大造成削峰失真的情况,Wwise中很方便的在音源和总线上插入压限器单元,使各种情况下回放的音量都较为适中。
对MIDI中控制改变(Control Change)和弯音(Pitch Bend)消息完善的支持,诸如像 通道音量控制、延音控制、所有音符关闭等命令都有直接支持或者通过实时参数控制(RTPC)得以实现。
Wwise 中还包含了 Synth One 插件,得以实现波形生成合成器,如下是原理图:
利用其结构很容易实现一个经典的FM合成器,这种合成器常用于电子音乐音色的表现
6 、方便的局域网调试工具
我们的应用主要是运行在Android 和 iOS 平台的,Wwsie 具有从桌面 PC 监测移动设备运行状态的功能,客户端到 Wwise 声音引擎是以发送事件的API进行工作的。监测器可以实时显示和记录事件队列,并且实时绘制出声音渲染的管线框图,这极大的方便了各种问题查找和解决。
7 、一些其他的音频的需求
我们的应用会有曲库单元、会有频繁新增的练习曲,练习曲中会有包含MP3等音频,但是Wwsie的音频只支持资源包的DLC更新方式,这样MP3不得不调用平台原生的单独回放API。
再就是UGC(用户生成内容)因为要到微信朋友圈类似的分享,这种平台通常支持MP3等常用格式播放,Wwsie 缺乏对MP3编解码导出功能,而我们也得引入第三方插件得以支持。
总结
Wwise 作为一个功能丰富易用的游戏音频引擎,在MIDI合成器方面我们抱着试探的心态,在项目中进行了集成应用,竟然满足了我们的多数需求,得以最终项目完成。因为是第一次使用,也经历了一些困难,好在官方文档既有教程、也有API库,并在官方工程师的支持下,还是较为顺利完成,在此表示由衷的感谢。MIDI合成器和一些UGC方面在游戏音频中可能是小众需求,但是随着互联网大文娱的发展,也会形成一定的市场规模。希望Wwsie不断完善,在音频需求的各个方面,成为好用的一站式音频解决方案。
更多的丰富内容欢迎下载(购买)我们的产品进行了解。我们的产品网站:www.poputar.com(中文) 、 www.popumusic.com(English)
评论