聲音設(shè)計(jì)師如何利用PD+Heavy進(jìn)行DSP插件的開(kāi)發(fā) Part 3

聲音設(shè)計(jì)師如何利用PD+Heavy進(jìn)行DSP插件的開(kāi)發(fā) Part 3 - 如何在Wwise2021.1.x版本下繼續(xù)使用Heavy Compiler?
上下文
自今年Wwise新的Major Version(2021.1.x)發(fā)布以來(lái),越來(lái)越多的客戶反饋Heavy Compiler(https://github.com/enzienaudio/hvcc)。無(wú)法伴隨Wwise 2021.1.x版本的SDK使用了,我想這對(duì)于想要在Wwise中做比較“Procedural"的聲音設(shè)計(jì)的朋友來(lái)可以說(shuō)是一個(gè)非常壞的消息……


這讓我也開(kāi)始擔(dān)心hvcc會(huì)不會(huì)因?yàn)闊o(wú)人維護(hù)最終走向其生命盡頭并帶走他帶給Wwise的原本旺盛的Procedural Audio的火光……直到有一天社區(qū)中的一位朋友詢問(wèn)與之相關(guān)的問(wèn)題又緊跟著告訴我他找到了讓hvcc繼續(xù)伴隨Wwise2021.1.x版本工作的方法……讓我也隨著他重新找到了希望!

不過(guò)這之后我并沒(méi)有直接詢問(wèn)他具體如何解決了這個(gè)兼容性問(wèn)題,而是選擇自己嘗試解決,借這篇博客將過(guò)程分享給大家。
準(zhǔn)備工作
如果您已經(jīng)很久沒(méi)有使用hvcc,為接下來(lái)構(gòu)建插件做一些準(zhǔn)備工作或許會(huì)是不錯(cuò)的回顧方式。
Requirements
為了復(fù)現(xiàn)錯(cuò)誤并進(jìn)行修復(fù),我們需要:
安裝Python2,之所以這樣是因?yàn)閔vcc終止維護(hù)前都是基于python2開(kāi)發(fā)的,不過(guò)最近社區(qū)中有朋友在嘗試將hvcc遷移到python3;
安裝1.5.7749,也就是我寫(xiě)作本文時(shí)Wwise的最新版本(記得要下載期望部署插件平臺(tái)的SDK);
下載并解壓hvcc (https://github.com/enzienaudio/hvcc),在本文中我將其放在了C:\hvcc_fix\hvcc-master;
做一個(gè)簡(jiǎn)單的測(cè)試用patch,比如我做了如下圖所示的簡(jiǎn)單的雙聲道音量控制程序,命名為pd;

準(zhǔn)備好編譯時(shí)要敲的指令,保存在文本文件中或streamdeck的快捷鍵中,方便快速輸入,例如:python2 hvcc.py c:\hvcc_fix\hvcc_Workspace\stereoGain.pd -n testTemplateChange -o c:\hvcc_fix\hvcc_Workspace\Builds\ -g wwise,關(guān)于指令不同部分的意義見(jiàn)下圖。更詳細(xì)可參考hvcc文檔。

注:如果您是第一次接觸使用PureData+hvcc為Wwise編寫(xiě)插件,歡迎回顧本系列的前兩篇博文。
聲音設(shè)計(jì)師如何利用PD+Heavy進(jìn)行DSP插件的開(kāi)發(fā) - Part 1:https://blog.audiokinetic.com/zh/how-sound-designers-use-pd-heavy-to-develop-dsp-plugins-part1/
聲音設(shè)計(jì)師如何利用PD+Heavy進(jìn)行DSP插件的開(kāi)發(fā) - Part 2:https://blog.audiokinetic.com/zh/how-sound-designers-use-pd-heavy-to-develop-dsp-plugins-part2/
復(fù)現(xiàn)錯(cuò)誤
更改SDK路徑
要為Wwise2021.1.x版本生成插件,我們需要為hvcc指定Wwise2021.1.x的SDK路徑方便其讀取。
得益于前面的準(zhǔn)備,我們可以在hvcc路徑下開(kāi)啟命令行工具,迅速地對(duì)patch進(jìn)行編譯。

編譯完成后前往C:\hvcc_fix\hvcc_Workspace\Builds\wwise\vs2015。

使用Visual Studio打開(kāi)Hv_testTemplateChange_WwiseFXPlugin.sln后會(huì)發(fā)現(xiàn)其包含地三個(gè).vcxproj無(wú)法被加載。

如果你沒(méi)有更改過(guò)template中的sdk信息,就會(huì)出現(xiàn)這種情況,稍后我會(huì)講解如何更改hvcc的vs模板。下圖中可見(jiàn).vcxproj中的sdk還停留在2017。

我們需要將WwiseSDKPath更改為期望使用的版本,比如我的Wwise2021.1.5.7749安裝在M盤(pán),所以我做了如下圖中的更改。

接下來(lái)重新加載.vcxproj就可以開(kāi)始嘗試構(gòu)建插件(復(fù)現(xiàn)報(bào)錯(cuò))了。但在那之前,我們來(lái)了解一下如何修改hvcc的vs工程模板以便更快速的進(jìn)行開(kāi)發(fā)。

修改工程模板
其實(shí)我們不用每次生成sln之后都進(jìn)行修改然后reload,而是可以直接通過(guò)修改hvcc的c2wwise框架內(nèi)的vs solution模板,從而在編譯時(shí)直接生成版本信息正確的sln及工程。

如上圖所示,hvcc針對(duì)Wwise插件生成要使用的模板存放在C:\hvcc_fix\hvcc-master\generators\c2wwise\templates\vs2015,我們可以用隨便什么文本編輯工具打開(kāi)三個(gè).vcxproj文件,修改它們35-37行的SDK路徑信息,然后保存、退出。這樣之后再編譯Patch就可以得到工程被加載好的插件的vs sln。
Build(復(fù)現(xiàn)報(bào)錯(cuò))
接下來(lái)就可以開(kāi)始build(復(fù)現(xiàn)報(bào)錯(cuò))了!
我在這里選擇Profile 64位構(gòu)建設(shè)置。

點(diǎn)選solution然后單擊右鍵,選擇build solution。

不出意外,和社區(qū)中朋友們報(bào)告的情況一樣,出錯(cuò)了,構(gòu)建失敗。

不過(guò)先不用慌張。
嘗試修復(fù)
線索在日志里
接下來(lái)讓我們看Error List,可以注意到一條信息寫(xiě)著:”GetGameObjectID不是AK::IAkVoicePluginInfo的成員“。
由此可以推斷,如果hvcc結(jié)合之前版本的Wwise SDK是可以構(gòu)建成功的,那么現(xiàn)在AK::IAkVoicePluginInfo中已找不到GetGameObjectID便是構(gòu)建失敗的誘因,只需要在正確的盒子中重新找到它就可以了。
那么GetGameObjectID到底是誰(shuí)的成員呢?

Hacking...
雙擊報(bào)錯(cuò)條目C2039,vs便會(huì)跳轉(zhuǎn)至存在問(wèn)題的代碼位置。
下圖是我們進(jìn)行修改前的代碼:

我嘗試將GetGameObjectID替換為GetPlayingID,構(gòu)建成功了!
但是……你懂的,我們可能構(gòu)建成功的同時(shí)也弄壞了什么東西。
所以我們還是應(yīng)該去尋找更可靠的答案。
答案揭曉
為了得到確切的、安全的修復(fù),我詢問(wèn)了我們的CTO - Martin Dufour,從他那里了解到:GetGameObjectID的確已經(jīng)從AK::IAkVoicePluginInfo移動(dòng)到了別處(衷心感謝?。?。
修復(fù)方法非常簡(jiǎn)單,我們要做的僅僅是把226行中的GetVoiceInfo更改為GetGameObjectInfo,that's it!

保存后再進(jìn)行構(gòu)建,一切順利!

尾聲
盡管Enzien Audio已經(jīng)停止對(duì)hvcc的更新,但這并沒(méi)有阻止人們繼續(xù)使用這套方案。依然存在許多項(xiàng)目使用PD+hvcc做插件原型,甚至用在正式的項(xiàng)目中。
另外值得高興的是,社區(qū)中已經(jīng)有朋友正在嘗試將hvcc升級(jí)到python3從而延續(xù)生命。

若是感興趣,可以查看并訂閱動(dòng)態(tài):https://github.com/Wasted-Audio/hvcc。
非常期待進(jìn)一步的進(jìn)展。

侯晨鐘
大中華區(qū)產(chǎn)品專家 - 開(kāi)發(fā)者關(guān)系
Audiokinetic
聲音設(shè)計(jì)師/作曲家/音樂(lè)科技研究員,曾任職于育碧上海工作室,參與過(guò)《舞力全開(kāi)》及《孤島驚魂》系列的聲音設(shè)計(jì)工作。現(xiàn)任Audiokinetic大中華區(qū)產(chǎn)品專家,愛(ài)好是探尋紙盆起伏與光柵明暗變化間的神秘聯(lián)系。
