关于Wwise插件开发流程

音频编程 / 游戏音频

前言

Wwise在提供了Premake构建工具后,插件的开发变得更加简单高效,所以我也有了想简单梳理一遍插件开发流程的想法。本文记录Juce中开发的一个简单效果器插件移植为Windows平台Wwise插件的流程。完整代码可以查看Github


Juce

首先在Juce中快速开发一个简单的Limiter效果器,算法参考了How to build a VST


1. DSP

  • Limiter需要延迟输出所以需要用到CircularBuffer结构,index值达到最大后会从头循环,还需要可以设置读写数据,根据delay长度得到下个buffer的index
1
2
  • 然后进行信号处理

3

2. UI

  • UI上添加三个分别控制threshold/attack/release的控件
4

3. 测试

  • Juce中可以用一个播放器插件搭配PluginHost进行快速测试
a1

  • 根据平台构建PluginHost

a2

 

Wwise

1.Premake

1.1 构建工程

  • Wwise提供的Premake工具及构建脚本在%WWISEROOT%/Scripts/Build/Plugins目录下,在新工程目录下控台运行脚本启动构建生成插件框架

5

  • 选择插件类型

  • 添加插件创建描述

a3

  • 生成文件

 

a4

  • 在之前的目录下运行下面Premake命令来生成目标平台(这个工程生成VC160)
6


  • 选择构建目标

a5

 

  • 构建目标平台

a6

 

  • 生成vc160项目

a7

1.2 快速测试插件模板

  • 构建premake生成的模板工程,如果出现下面报错需要安装MFC依赖



  • 模板工程同时生成AuthoringTools使用的dll与Engine使用的lib文件,可以在工程中重新设置输出目录

  • Wwise工程中插入该插件以便后面进行测试

a8

  • 用下面代码快速测试插件构建流程是否正常,插入的声音对象应该被静音7
  • AuthoringTools中改变默认控件dummy参数值,下面接口单步调试查看传入的in_pParams是否正确
8

1.3 调试

  • Wwise插件的调试我是使用附加到进程的方式,打开Wwise工程后VS端附加到进程上进行调试。这里要注意插件Debug版本构建配置的输出目录要设置到"Authoring\x64\Release\bin\Plugins"。AuthoringTools的插件加载目录是这个,或者手动复制过去也可以。

a9

  • 注意重新构建插件的时候需要关闭AuthoringTools, 不然无法更新插件。

2. Authoring Tools Plugin

2.1 结构

  • AuthoringTools插件部分基础结构是控件对象,界面数据对象导出函数三个部分。控件对象由一个xml文件来描述,里面可以设置详细的交互属性。界面数据对象负责控件数据的修改保存等操作。导出函数负责插件实例的创建与注册以及dll的接口导出。

2.2 注册与导出

  • dll在AuthoringTools中的注册可以通过RegisterWwisePlugin,这个可以写在插件实例化的时候.这个注册不包含插件在声音引擎中的注册
 
9
  • 对于效果器插件,需要有两个导出符号,一个用来创建插件实例,一个用来声明插件列表
10 
11
  • 最后还需要在库描述文件.def中指定导出对象
12

2.3 控件

13

a10

2.4 接口实现

  • 界面数据对象需要实现的接口
14 
  • 为所有自定义参数做写出操作
15

2.5 测试

  • 对于插件测试,Wwise给出了完整的测试单元列表,可以按具体需求进行测试。插件测试单元项

3. Sound Engine Plugin

3.1 结构

  • SoundEngine插件部分基础结构是插件对象参数对象。插件对象负责插件的创建/注册/卸载/销毁/DSP等功能。参数对象负责维护当前插件的参数与状态。插件对象从其关联参数对象中获取实时参数和状态来更新DSP。参数对象命名规则为插件名+ Params后缀。

3.2 内存管理

  • Wwise中定义了几个用于动态内存管理的宏,需要确保使用这几个宏来创建和销毁对象,这样才能在内存池中正确获取内存,在Profile里正确显示内存使用情况。
16 

3.3 注册

  • 首先要提供对象创建函数注册给PluginManager来管理
17 
  • 插件ID与创建函数的注册宏
18 
  • 宏定义里面可以看到,两个创建回调函数的签名不要修改,然后会实例化一个AK::PluginRegistration来进行注册
19
  • 除了两个对象创建函数回调外,还可以传入自定义回调函数,进行一些状态与数据有效性的检查或者更新。
20

3.4 接口实现

  • IAkPlugin类视图

a11

  • 插件对象需要实现的接口(本文创建类是IAkInPlaceEffectPlugin)
21
  • Juce的DSP代码只需要通过一个转接层就可以最小化修改的放到Wwise的DSP代码中。这个例子中只需要实现一个juce::AudioBuffer<float>类到AkAudioBuffer类的转接类AkJuceAudioBuffer就可以了
22 
  • DSP部分把Buffer类改为AkJuceAudioBuffer基本就无需其它修改了, init的时候获取更新的效果器参数
23 
  • IAkParam类视图
a12

 

  • 参数对象需要实现的接口
24
  • 修改自定义参数结构和参数ID(参数ID在xml文件中设置过)
25 
  • 修改初始化时默认效果器参数
26 
  • 需要修改从bank获取数据的两个接口
27 

游戏内注册

1. UE4

  • 创建出厂头文件JuceLimitFXFactory.h,并放置到%WWISEROOT%\Wwise 2019.2.9.7459\SDK\include\AK\Plugin目录下
28 
  • AkAudio.Build.cs中增加lib加载信息
29 
  • AkAudioDevice.h中增加之前创建的出厂头文件
30

2. Unity

  • 将动态库放置到\Assets\Wwise\Deployment\Plugins\%Platform%\%Arch%\DSP目录下即可
  • 对于特殊需要静态加载的平台, 手动创建静态加载文件
31 

参考

[1]Alex Rycroft.How to build a VST – Lesson 4: Limiter

[2]WwiseSDK2019.2.9.创建新插件

[3]Joel Robichard.简化 Wwise 音频插件构建管线

李昱宸

游戏音频开发

腾讯游戏光子工作室

李昱宸

游戏音频开发

腾讯游戏光子工作室

眼高手低,志大才疏。混迹音频行业多年,唯一没变的是对创造的热情。现在最享受将大家的脑洞变为现实,分享知识的快乐。

网站

知乎

豆瓣

评论

留下回复

您的电子邮件地址将不会被公布。

更多文章

“零代码”开发小游戏—UE4蓝图与Wwise结合的设计思路 - Part 2

请阅读本文第一部分。

3.2.2020 - 作者:伍岚珊

使用Wwise+Unity+Intel Realsense实现人体动作与音频的互动

大家好,今天我为大家介绍的是利用Wwise、Unity和3D深度相机——Intel...

20.4.2020 - 作者:朱墨丹青

早期采用者对 Strata 多音轨 SFX 库的评价

Strata 的诞生 在过去的四五十年里,SFX 库创作者都在以大致相同的方式制作和分发内容:录制、编排、混音并渲染构建的声音,然后将基于主题的数据包出售给用户。如果我们排除一些例外情况 – 比如...

2.12.2022 - 作者:西蒙.阿什比(Simon Ashby)

关于AudioLink的探索之旅

在去年 10 月的 GameSoundCon 上,我跟戴米安 (Damian) 在酒店拐角三明治店共进午餐的时候探讨着技术问题。我说“显然,现在我们可以将 MetaSounds 作为音频源在...

7.5.2024 - 作者:彼得·德雷舍 (Peter "pdx" Drescher)

《Scars Above》中的 Wwise Spatial Audio 实现流程

这篇文章是关于什么的?何为 Spatial Audio API?Spatial Audio API 工作流程Room 和 Portal素材组织和命名规范命名规范Wwise 对象组织Unreal...

12.6.2024 - 作者:Milan Antić

Sound Haven Highway | Step Up Your Sound Game Jam

本文是在第二届 Step Up Your Sound Game Jam 之后撰写的。在这次一年一度的 Android 手游 Game Jam 上,参赛团队要结合 Wwise 使用 Dolby...

24.7.2024 - 作者:Petricore

更多文章

“零代码”开发小游戏—UE4蓝图与Wwise结合的设计思路 - Part 2

请阅读本文第一部分。

使用Wwise+Unity+Intel Realsense实现人体动作与音频的互动

大家好,今天我为大家介绍的是利用Wwise、Unity和3D深度相机——Intel...

早期采用者对 Strata 多音轨 SFX 库的评价

Strata 的诞生 在过去的四五十年里,SFX 库创作者都在以大致相同的方式制作和分发内容:录制、编排、混音并渲染构建的声音,然后将基于主题的数据包出售给用户。如果我们排除一些例外情况 – 比如...