使用Wwise作為合成器實(shí)現(xiàn)一個(gè)音樂(lè)創(chuàng)作App

項(xiàng)目介紹:
我們的項(xiàng)目叫做「音樂(lè)密碼」,是一個(gè)軟硬件結(jié)合的項(xiàng)目,目的是希望能夠通過(guò)游戲化自學(xué)習(xí)的方式來(lái)教會(huì)用戶(hù)進(jìn)行樂(lè)器演奏。產(chǎn)品內(nèi)部包括了互動(dòng)化的視頻教學(xué),讓小白能夠更快的入門(mén),剛有一定基礎(chǔ)的用戶(hù)能夠快速提升。游戲化的闖關(guān)讓學(xué)習(xí)更加有趣,也讓練習(xí)變的不再枯燥。積木式的編曲模塊讓音樂(lè)創(chuàng)作變的更加簡(jiǎn)單,不同風(fēng)格音階的可視化讓樂(lè)理的理解更加容易。

Wwise使用介紹:
項(xiàng)目的硬件端是一個(gè)Midi輸入設(shè)備,軟件端我們使用Unity游戲引擎。合成器方面我們對(duì)比了Unity下的幾款合成器,以及移動(dòng)原生合成后決定使用Wwise。原因是其他幾款合成器對(duì)多層次聲音的支持較弱且配置沒(méi)有wwise方便,而原生的合成需要多端進(jìn)行開(kāi)發(fā)(Android只找到了FluidSynth),且需要將各端的最后效果調(diào)整一致。
下面說(shuō)一下我們項(xiàng)目中使用Wwise的方式:
1、音源配置
音源源文件介紹
以一個(gè)琵琶的音源來(lái)舉例,如圖1所示音源一共分為4個(gè)層級(jí):
1層:055_60.wav
2層:055_80.wav
3層:055_100.wav
4層:055_127.wav
每個(gè)層級(jí)對(duì)應(yīng)的鍵盤(pán)力度都是不同的,且每個(gè)組音對(duì)應(yīng)的音高也是不同的。
第1組 055_xxx.wav
第2組 056_xxx.wav
......

?
標(biāo)記音源文件
下面我們使用了一個(gè)Excel表格來(lái)把音色文件中的每個(gè)文件和對(duì)應(yīng)的“音高”和“力度值”進(jìn)行了標(biāo)注,如圖2所示:“力度值”代表MIDI對(duì)應(yīng)的彈奏力度,“鍵位值”對(duì)應(yīng)MIDI的音高。這里進(jìn)行的配置主要是為了后面使用WAAPI來(lái)進(jìn)行批量導(dǎo)入到Wwise中。

導(dǎo)入Wwise
確定好音高和力度信息后,可以選擇手動(dòng)將音頻文件導(dǎo)入到Wwise中,也可以自己根據(jù)WAAPI所需的格式整理對(duì)應(yīng)文件,然后批量導(dǎo)入到Wwise中,先介紹一下手動(dòng)導(dǎo)入的方式。因?yàn)槭謩?dòng)導(dǎo)入需要進(jìn)行的配置較多,這里只使用兩組音色進(jìn)行說(shuō)明。
手動(dòng)導(dǎo)入:
(1)手動(dòng)導(dǎo)入了2組共6個(gè)音色到Wwise中,導(dǎo)入后將MIDI的配置選項(xiàng)卡打開(kāi)。

(2)到MIDI選項(xiàng)卡中點(diǎn)開(kāi)Keymap的配置,這里就是要對(duì)每個(gè)音色進(jìn)行具體的配置,包括音高,力度等信息。

(3)這里導(dǎo)入的是Pipa? Baisc Layer_060 和Pipa Baisc Layer_080兩組音源具體的配置如圖所示:
配置的說(shuō)明參考官方文檔:https://www.audiokinetic.com/zh/courses/wwise201/?source=wwise201&id=using_midi_filters

(4)到這里手動(dòng)導(dǎo)入音源文件已經(jīng)完成,后續(xù)我們生成了針對(duì)音色文件的Event和SoundBank。Event只包含了當(dāng)前的音色,SoundBank只包含當(dāng)前的Event:


批量導(dǎo)入:
這里我寫(xiě)了個(gè)簡(jiǎn)單的python腳本,根據(jù)Excel的內(nèi)容生成了一個(gè)WAAPI支持的導(dǎo)入文件,具體內(nèi)容如圖所示,其中音高對(duì)應(yīng)的鍵位是按兩個(gè)音高之間的差值來(lái)取中間值,打擊樂(lè)器類(lèi)的是不需要進(jìn)行取值的,值需要嚴(yán)格按鍵位做好對(duì)應(yīng)即可,當(dāng)然也可以直接將Excle根據(jù)WAAPI所需格式直接整理好,格式如圖3:

WAAPI具體內(nèi)容參考官方文檔:https://www.audiokinetic.com/zh/library/edge/?source=SDK&id=waapi.html
WAAPI導(dǎo)入音頻文件:
https://www.audiokinetic.com/zh/library/edge/?source=SDK&id=waapi_import.html
根據(jù)導(dǎo)入文件通過(guò)WAAPI將對(duì)應(yīng)的文件導(dǎo)入到Wwise中,同時(shí)使用WAAPI生成了音源對(duì)應(yīng)Event和SoundBank,Midi對(duì)應(yīng)的力度和音高已經(jīng)按導(dǎo)入文件中所配置的對(duì)應(yīng)好了,導(dǎo)入后的結(jié)果如圖4所示,結(jié)果與手動(dòng)導(dǎo)入的方式是一樣的。

延音樂(lè)器處理:
如果導(dǎo)入的音源是有延音的,比如提琴、笛子,需要將Loop的選項(xiàng)勾上,并對(duì)音源采樣進(jìn)行Loop的起止點(diǎn)進(jìn)行設(shè)置,如圖5

到這音源文件就已經(jīng)成功導(dǎo)入到Wwise中了,下面要進(jìn)行RTPC的配置以及Bus的配置。
2、Wwise配置
RTPC配置
實(shí)現(xiàn)要進(jìn)行的RTPC的配置,我們主要進(jìn)行了3項(xiàng)配置:力度跟音量的曲線、CC7命令的音量曲線以及Modulator Envelope。這里面最關(guān)鍵的就是Modulator Envelope的ADSR相關(guān)配置,如圖6:

配置好以后可以先將Midi鍵盤(pán)與Wwise鏈接上來(lái)彈奏聽(tīng)一下,可以很方便的調(diào)整音源的效果。
最后就是要配置Bus相關(guān)的信息,我們的項(xiàng)目配置如圖7所示,其中Gain Bus是作為整體增益來(lái)使用的,Synth Bus作為合成器最終的Bus增加了一個(gè)Peak_Limiter,防止聲音過(guò)載產(chǎn)生噪音。

聲音測(cè)試
配置到可以先測(cè)試一下聲音是否與預(yù)期一致,包括音量的大小、力度手感、延音效果等效果,這個(gè)測(cè)試可以先在Wwise工程中線進(jìn)行測(cè)試。
(1)我們需要準(zhǔn)備一個(gè)midi輸入設(shè)備(一般就是midi鍵盤(pán)),將midi鍵盤(pán)與PC先進(jìn)行連接(Mac系統(tǒng)需要先連接Midi鍵盤(pán)再啟動(dòng)Wwise工程),連接后選擇Control Surface Devices。

(2)添加當(dāng)前MIDI設(shè)備,并選好 Receive From 和 Send To 選項(xiàng)。


(3)連接成功后,選擇需要測(cè)試的音色,如果配置了CC7的命令,需要將音量拉倒需要的位置,這里將CC7拉到了最大值。彈奏的同時(shí)也可以觀察MIDI note velocity選項(xiàng),觀察彈奏的力度信息。


測(cè)試完成后需要將音源導(dǎo)出并進(jìn)行打包。
3、音源更新
導(dǎo)出音源的SoundBank:
(1)切換到SoundBank視圖,選擇需要導(dǎo)出的音源,以及需要導(dǎo)出的平臺(tái)信息后,將音源導(dǎo)出成bnk文件。


(2)將.bnk文件導(dǎo)出成.pck文件,此步驟需要使用Wwise提供的Windows系統(tǒng)下的FilePackager工具。


(3)Pck文件是可以動(dòng)態(tài)下載到客戶(hù)端系統(tǒng)并重新加載的,如果音色文件進(jìn)行了更新,則可以重新下載Pck文件。這一步就可以根據(jù)不同需求進(jìn)行不同方式的處理了。
4、Midi信號(hào)處理
這部分跟Wwise的關(guān)系并不大,簡(jiǎn)單介紹。項(xiàng)目硬件是一個(gè)自研Midi輸入設(shè)備,項(xiàng)目是通過(guò)DryWetMIDI(https://www.codeproject.com/Articles/1200014/DryWetMIDI-High-level-processing-of-MIDI-files)的插件進(jìn)行Midi數(shù)據(jù)的處理,包括根據(jù)拼裝和弦信息、讀取midi文件并根據(jù)bpm傳遞等。處理后將Midi信號(hào)傳入Wwise中進(jìn)行發(fā)聲,同時(shí)也會(huì)將游戲中的一些變化通過(guò)Midi協(xié)議下發(fā)到硬件中,使硬件產(chǎn)生對(duì)應(yīng)的效果。
音源文件加載到系統(tǒng)中后我們會(huì)把每個(gè)音源文件對(duì)應(yīng)到一個(gè)Midi通道上,對(duì)應(yīng)通道的MIDI消息會(huì)調(diào)用API:AkSoundEnginePINVOKE.CSharp_PostMIDIOnEvent發(fā)送Event進(jìn)行發(fā)聲。比如1通道是鋼琴,2通道是吉他這樣,當(dāng)Midi信號(hào)是1通道時(shí)回調(diào)用鋼琴對(duì)應(yīng)的Event來(lái)進(jìn)行發(fā)聲,2通道則會(huì)調(diào)用吉他的Event。Midi文件會(huì)把所有的樂(lè)器與通道做好對(duì)應(yīng),用戶(hù)彈奏的通道也會(huì)在游戲中進(jìn)行設(shè)置。
在 MIDI 中通常使用 程序改變 ( Program Change )來(lái)控制通道對(duì)應(yīng)的樂(lè)器音色,這里在應(yīng)用實(shí)現(xiàn)上我們?cè)O(shè)計(jì)了一個(gè)通道到樂(lè)器的映射表 (通道號(hào)->事件ID) 的改變來(lái)實(shí)現(xiàn)MIDI中對(duì)通道音色的切換。然后每個(gè)事件對(duì)應(yīng)一個(gè)音頻包資源文件,通過(guò)Wwise的Api進(jìn)行音色的加載和卸載,如: AkSoundEngine.LoadBank、AkSoundEngine.UnloadBank ,來(lái)管理音色的內(nèi)存占用。
5、完善的采樣合成器和波形生成合成器實(shí)現(xiàn)支持
模擬原聲樂(lè)器的聲音采樣合成器是現(xiàn)在最流行的技術(shù)方案,是通過(guò)錄制原生樂(lè)器的少許典型音頻片段,通過(guò)各種回放處理,來(lái)模擬原生樂(lè)器的各種演奏技法的音響表現(xiàn)。
一個(gè)原聲弦樂(lè)器一次擊奏后的振幅包絡(luò)模型通??梢苑譃樗牟骄€性段擊奏-衰減-延音-釋放(ADSR),如圖:

Wwise 的采樣合成單元對(duì)上述的ADSR都有對(duì)應(yīng)實(shí)現(xiàn)
通常為了細(xì)膩的表現(xiàn)原聲樂(lè)器音色,會(huì)在不同的音高和演奏力度下采樣多組音頻片段,Wwise也會(huì)根據(jù)不同的 MIDI 音高 和 力度回放不同的音頻采樣。

對(duì)MIDI多通道和復(fù)音的支持
Wwsie 支持MIDI中通道的概念,使得表現(xiàn)樂(lè)器合奏成為可能,再傳統(tǒng)合成器中通常有最大復(fù)音數(shù)的限制,是指同時(shí)發(fā)聲的樂(lè)器數(shù)量,Wwise在這方面是沒(méi)有限制的,而且合成過(guò)程中對(duì)CPU計(jì)算資源的利用很高效,可以實(shí)現(xiàn)龐大樂(lè)隊(duì)多聲部樂(lè)曲的回放。
在復(fù)音合成器中如果沒(méi)有音量壓限器,通常會(huì)出現(xiàn)單樂(lè)器回放音量過(guò)小,多樂(lè)器回放能量過(guò)大造成削峰失真的情況,Wwise中很方便的在音源和總線上插入壓限器單元,使各種情況下回放的音量都較為適中。
對(duì)MIDI中控制改變(Control Change)和彎音(Pitch Bend)消息完善的支持,諸如像 通道音量控制、延音控制、所有音符關(guān)閉等命令都有直接支持或者通過(guò)實(shí)時(shí)參數(shù)控制(RTPC)得以實(shí)現(xiàn)。
Wwise 中還包含了 Synth One 插件,得以實(shí)現(xiàn)波形生成合成器,如下是原理圖:

利用其結(jié)構(gòu)很容易實(shí)現(xiàn)一個(gè)經(jīng)典的FM合成器,這種合成器常用于電子音樂(lè)音色的表現(xiàn)
6、方便的局域網(wǎng)調(diào)試工具
我們的應(yīng)用主要是運(yùn)行在Android 和 iOS 平臺(tái)的,Wwsie 具有從桌面 PC 監(jiān)測(cè)移動(dòng)設(shè)備運(yùn)行狀態(tài)的功能,客戶(hù)端到 Wwise 聲音引擎是以發(fā)送事件的API進(jìn)行工作的。監(jiān)測(cè)器可以實(shí)時(shí)顯示和記錄事件隊(duì)列,并且實(shí)時(shí)繪制出聲音渲染的管線框圖,這極大的方便了各種問(wèn)題查找和解決。
7、一些其他的音頻的需求
我們的應(yīng)用會(huì)有曲庫(kù)單元、會(huì)有頻繁新增的練習(xí)曲,練習(xí)曲中會(huì)有包含MP3等音頻,但是Wwsie的音頻只支持資源包的DLC更新方式,這樣MP3不得不調(diào)用平臺(tái)原生的單獨(dú)回放API。
再就是UGC(用戶(hù)生成內(nèi)容)因?yàn)橐轿⑿排笥讶︻?lèi)似的分享,這種平臺(tái)通常支持MP3等常用格式播放,Wwsie 缺乏對(duì)MP3編解碼導(dǎo)出功能,而我們也得引入第三方插件得以支持。
總結(jié)
Wwise 作為一個(gè)功能豐富易用的游戲音頻引擎,在MIDI合成器方面我們抱著試探的心態(tài),在項(xiàng)目中進(jìn)行了集成應(yīng)用,竟然滿(mǎn)足了我們的多數(shù)需求,得以最終項(xiàng)目完成。因?yàn)槭堑谝淮问褂?,也?jīng)歷了一些困難,好在官方文檔既有教程、也有API庫(kù),并在官方工程師的支持下,還是較為順利完成,在此表示由衷的感謝。MIDI合成器和一些UGC方面在游戲音頻中可能是小眾需求,但是隨著互聯(lián)網(wǎng)大文娛的發(fā)展,也會(huì)形成一定的市場(chǎng)規(guī)模。希望Wwsie不斷完善,在音頻需求的各個(gè)方面,成為好用的一站式音頻解決方案。
更多的豐富內(nèi)容歡迎下載(購(gòu)買(mǎi))我們的產(chǎn)品進(jìn)行了解。我們的產(chǎn)品網(wǎng)站:www.poputar.com(中文) 、 www.popumusic.com(English)

視感科技
點(diǎn)亮你的音樂(lè)宇宙,希望能夠人機(jī)交互配合視覺(jué)引導(dǎo)的方式來(lái)讓音樂(lè)學(xué)習(xí)順其自然。

?