声音设计师如何利用PD+Heavy进行DSP插件的开发 Part 3 - 如何在Wwise2021.1.x版本下继续使用Heavy Compiler?
上下文
自今年Wwise新的Major Version(2021.1.x)发布以来,越来越多的客户反馈Heavy Compiler。无法伴随Wwise 2021.1.x版本的SDK使用了,我想这对于想要在Wwise中做比较“Procedural"的声音设计的朋友来可以说是一个非常坏的消息……
这让我也开始担心hvcc会不会因为无人维护最终走向其生命尽头并带走他带给Wwise的原本旺盛的Procedural Audio的火光……直到有一天社区中的一位朋友询问与之相关的问题又紧跟着告诉我他找到了让hvcc继续伴随Wwise2021.1.x版本工作的方法……让我也随着他重新找到了希望!
不过这之后我并没有直接询问他具体如何解决了这个兼容性问题,而是选择自己尝试解决,借这篇博客将过程分享给大家。
准备工作
如果您已经很久没有使用hvcc,为接下来构建插件做一些准备工作或许会是不错的回顾方式。
Requirements
为了复现错误并进行修复,我们需要:
- 安装Python2,之所以这样是因为hvcc终止维护前都是基于python2开发的,不过最近社区中有朋友在尝试将hvcc迁移到python3;
- 安装1.5.7749,也就是我写作本文时Wwise的最新版本(记得要下载期望部署插件平台的SDK);
- 下载并解压hvcc (https://github.com/enzienaudio/hvcc),在本文中我将其放在了C:\hvcc_fix\hvcc-master;
- 做一个简单的测试用patch,比如我做了如下图所示的简单的双声道音量控制程序,命名为pd;
- 准备好编译时要敲的指令,保存在文本文件中或streamdeck的快捷键中,方便快速输入,例如:python2 hvcc.py c:\hvcc_fix\hvcc_Workspace\stereoGain.pd -n testTemplateChange -o c:\hvcc_fix\hvcc_Workspace\Builds\ -g wwise,关于指令不同部分的意义见下图。更详细可参考hvcc文档。
注:如果您是第一次接触使用PureData+hvcc为Wwise编写插件,欢迎回顾本系列的前两篇博文。
声音设计师如何利用PD+Heavy进行DSP插件的开发 - Part 1
声音设计师如何利用PD+Heavy进行DSP插件的开发 - Part 2
复现错误
更改SDK路径
要为Wwise2021.1.x版本生成插件,我们需要为hvcc指定Wwise2021.1.x的SDK路径方便其读取。
得益于前面的准备,我们可以在hvcc路径下开启命令行工具,迅速地对patch进行编译。
编译完成后前往C:\hvcc_fix\hvcc_Workspace\Builds\wwise\vs2015。
使用Visual Studio打开Hv_testTemplateChange_WwiseFXPlugin.sln后会发现其包含地三个.vcxproj无法被加载。
如果你没有更改过template中的sdk信息,就会出现这种情况,稍后我会讲解如何更改hvcc的vs模板。下图中可见.vcxproj中的sdk还停留在2017。
我们需要将WwiseSDKPath更改为期望使用的版本,比如我的Wwise2021.1.5.7749安装在M盘,所以我做了如下图中的更改。
接下来重新加载.vcxproj就可以开始尝试构建插件(复现报错)了。但在那之前,我们来了解一下如何修改hvcc的vs工程模板以便更快速的进行开发。
修改工程模板
其实我们不用每次生成sln之后都进行修改然后reload,而是可以直接通过修改hvcc的c2wwise框架内的vs solution模板,从而在编译时直接生成版本信息正确的sln及工程。
如上图所示,hvcc针对Wwise插件生成要使用的模板存放在C:\hvcc_fix\hvcc-master\generators\c2wwise\templates\vs2015,我们可以用随便什么文本编辑工具打开三个.vcxproj文件,修改它们35-37行的SDK路径信息,然后保存、退出。这样之后再编译Patch就可以得到工程被加载好的插件的vs sln。
Build(复现报错)
接下来就可以开始build(复现报错)了!
我在这里选择Profile 64位构建设置。
点选solution然后单击右键,选择build solution。
不出意外,和社区中朋友们报告的情况一样,出错了,构建失败。
不过先不用慌张。
尝试修复
线索在日志里
接下来让我们看Error List,可以注意到一条信息写着:”GetGameObjectID不是AK::IAkVoicePluginInfo的成员“。
由此可以推断,如果hvcc结合之前版本的Wwise SDK是可以构建成功的,那么现在AK::IAkVoicePluginInfo中已找不到GetGameObjectID便是构建失败的诱因,只需要在正确的盒子中重新找到它就可以了。
那么GetGameObjectID到底是谁的成员呢?
Hacking...
双击报错条目C2039,vs便会跳转至存在问题的代码位置。
下图是我们进行修改前的代码:
我尝试将GetGameObjectID替换为GetPlayingID,构建成功了!
但是……你懂的,我们可能构建成功的同时也弄坏了什么东西。
所以我们还是应该去寻找更可靠的答案。
答案揭晓
为了得到确切的、安全的修复,我询问了我们的CTO - Martin Dufour,从他那里了解到:GetGameObjectID的确已经从AK::IAkVoicePluginInfo移动到了别处(衷心感谢!)。
修复方法非常简单,我们要做的仅仅是把226行中的GetVoiceInfo更改为GetGameObjectInfo,that's it!
保存后再进行构建,一切顺利!
尾声
尽管Enzien Audio已经停止对hvcc的更新,但这并没有阻止人们继续使用这套方案。依然存在许多项目使用PD+hvcc做插件原型,甚至用在正式的项目中。
另外值得高兴的是,社区中已经有朋友正在尝试将hvcc升级到python3从而延续生命。
若是感兴趣,可以查看并订阅动态。
非常期待进一步的进展。
评论