ReaperToWwise | Marc Hasselbalch 开发的游戏音频整合工具

游戏音频 / Wwise 技巧和工具

简介

大家好,我叫马克•哈塞尔巴尔赫,是一名来自丹麦的声音设计师。

我很高兴能在此跟大家介绍自己构建的游戏音频整合工具 ReaperToWwise 并分享其背后的设计思路。简单来说,这个工具是个自定义的 Reaper 脚本。藉此,用户可通过熟悉的 Reaper 时间线发送 Event,并将 Game Sync 直接设置为 Wwise 会话 – 无需挂接引擎。

img1

它的用途并不是一定的。不过,主要用于在开发中对整合系统及设计方案进行测试,尤其是在因为各种原因而未挂接游戏引擎的情况下。

声音设计师可将之用于前期制作或以此对整合方案加以测试。比如,审查过场动画和过场时刻,或者用于演示和实践教学 – 可以亲自动手体验如何设置 Wwise 系统,不用全靠脚本和游戏引擎来处理 Event 触发。

除此之外,声音设计师还可藉此向团队其他成员展示自己的实现方案。不过,具体怎么用取决于用户。

简单来说,该工具可将 Reaper 会话转换为更加灵活、更好调整的 SoundCaster 会话。

前提要求

REAPER

https://www.reaper.fm/
注意:我用的 Reaper v.7.07 编写、测试该工具,不过它跟大多数 Reaper 版本应该都兼容,只要 Lua 解释器基于 Lua 5.3 就行(官网显示 Reaper v.6.x 及更早版本都是如此)。
Reaper v7 引入了 Lua 5.4 功能,不过我目前都还没有用过。

Wwise 2019.1+

(安装 ReaWwise 时需要)
https://www.audiokinetic.com/en/products/wwise/

ReaWwise

(可在 Reaper 内通过 ReaPack 安装)
https://blog.audiokinetic.com/en/reawwise-connecting-reaper-and-wwise/(Andrew Costa 写的博文)

ReaWwise 是由 Audiokinetic 开发的 REAPER 扩展。它方便将音频素材由 REAPER 工程导入到 Wwise 中。

另外,它还在 Reaper 内向 Lua 暴露了原始的 WAAPI 函数。这是 ReaperToWwise 运行的必要条件。

Lokasenna's GUI library v2 for Lua

(在 Reaper 内通过 ReaPack 安装)
它负责处理 GUI 元素。

工具展示

下面我们来看看这个工具的 0.9 版本。

ReaperToWwise 会解析 Reaper 时间线上空媒体项Notes 字段中编写的文本命令。在播放光标经过这些媒体项的开头时,其会在 Wwise 中发送已有的 Event 并设置 Game Sync。

要使用该脚本,需同时打开 Reaper 和 Wwise 会话。

在 Reaper 中打开脚本时,会弹出以下浮动窗口菜单:

img2



您需要通过 Project -> Project Settings -> Network 下列出的通信端口连接到 Wwise 工程,并检查通信端口 ("Game Discovery Broadcast Port (game side)")。

当然,您也可以自己键入一个端口,只要不跟现有端口冲突就行。

连接成功的话,就可以运行了。

在 Reaper 会话中,添加空媒体项并输入命令(如 e/Footstep)。这时会将 "Footstep" Event 发送到 Wwise 并予以触发(前提是该 Event 存在于 Wwise 工程中并已正确设置)。

e/ 命令表示将尝试发送名为 Footstep 的 Event

您可以用逗号和换行符分隔各项命令来一次发送多个 Event 或 Game Sync。

就像下面这样:

img3

这时会发送名为 FootstepplayAmbienceplayRain 的 Event。

另外,还可设置各种 Game Sync(如 Switch)。

对此,可通过 sw/ 命令来实现。

img4

这时会将 GroundTexture Switch Group 切换到 Dirt Switch。

下面列出了各项命令:

Event:

e/eventName
发送具有给定 'eventName' 的 Event。

Switch:

sw/switchGroup/switchName 
设置来自给定 'switchGroup' 并具有给定 'switchName' 的 Switch。

State:

st/stateGroup/stateName
设置来自给定 'stateGroup' 并具有给定 'stateName' 的 State。

Trigger:

t/triggerName
发送具有给定 'triggerName' 的 Trigger。

RTPC:

r/rtpcName/rtpcValue
将给定 RTPC 设为给定的值。

除此之外,您还可以创建 Automation Lane,以便在播放过程中设置 RTPC 值。

要为给定 RTPC 添加 Automation Lane,请执行以下操作:

  1. 在工具窗口中按下 Add RTPC Lane
  2. 输入要控制的 RTPC 的名称,并为其设置最小值和最大值。
  3. 系统会自动创建单独的 JSFX 插件,并添加到所选 Reaper 音轨的 FX 列表。
  4. 在所选音轨下方,会自动创建 Automation Lane。
  5. 根据需要针对各个 RTPC 重复上述步骤。

注意:如果想用空媒体项设置 RTPC 值,不过要同时创建 RTPC 曲线,建议禁用给定 Automation Lane,否则每次更新的时候都会刷新自动化值,导致对空 Event 中设置的值造成干扰。
所以,目前无法同时做到这两点,除非您有特定的使用场景。

需要注意的是,该工具目前不支持从头创建 Event 或 Game Sync – 它只能简单地触发和设定已存在于 Wwise 工程中并设置好的 Event 或 Game Sync。

基本上就是这样。各位不妨下载并试用一下,看看是否符合自己的需求。

背后缘由

我之所以构建这样一款工具是因为在申请游戏音频职位时发现我想要而且需要展示自己的技术实现能力。

但是,如果没有专门针对技术实现的作品可供展示怎么办?

这样的话最好做个技术实现作品集。

但若像我一样正处在职业生涯的特殊阶段,或许还没有做过已经发售并可以展示作品,或者说做过但是目前还没有办法对外展示,一般情况下最好自己想办法做一个小游戏,或在游戏引擎演示工程的基础上添砖加瓦。

我对以游戏引擎演示工程为基础制作作品集一直有些抵触。可能只是我这样,别人不一定如此。那如果不想只是线性地对游戏短片或过场动画进行重新设计,还能做些什么呢?事实上,您需要展示自己理解并且能够自如地运用游戏和游戏音频的非线性自适应框架。

我们的想法是设法将线性和非线性这两种方式结合起来。

首先,我在 Reaper、Wwise 和 Max/MSP 中构建了一个非常复杂的工作流程。藉此,为线性视频片段中的每个音频 Event 放置标记,导出标记列表并在 Max 中解析,然后使用 MIDI 在 Wwise 中触发 Event、Switch 和驱动 RTPC。

不妨看看下面的视频:

Game audio implementation showcase: Dynamic system for linear video in Wwise + Max (October 2023)

虽然确实行得通,但操作过于复杂。我希望以后可以跟别人分享,这样其他声音设计师也能用。如果还得费心管理 Max,推广起来恐怕会很难。

过了一段时间之后,我想对此加以优化,去除对 Max 的依赖,在 Reaper 内完成所有操作。于是,我开始深入学习 Lua 编程以便扩展 Reaper 功能,并基于时间线标记设计了一个非常简单的系统。比如,我们可以为 Event 放置标记并将其命名为 Footstep。这样脚本就会将标记的名称发送到 Wwise,并触发具有对应名称的 Event。

各位不妨看看这个视频:Game audio implementation showcase: Wwise event triggers from Reaper markers

这项功能运行得也挺好,不过仅限于发送 Event。现在我需要所有其他 Game Sync(包括 RTPC)。

在构建这个工具的过程中,自然就会对 Lua 有更深入的了解;手头有具体任务,学习起来会更快。每次为工具增添新的功能时,基本上都要查阅 Lua 文档,以了解相关的语法和逻辑,然后编写脚本并反复尝试,遇到问题设法解决。

框架慢慢开始初具雏形。虽然到现在也还有这样那样的问题(只消看看存储库的 README 文件就明白了),但是总算是一款能用的工具了。只要稍加配置,其他人也能用。这正是我开发这款工具的出发点。不仅仅是为了满足自己的需要而构建一款工具,还要能分享给别人,因为其可能也有同样的需求。

在运用自己掌握的各种创作技能、问题解决能力以及专业知识成功构建这样的工具时,心里会油然而生一种强烈的成就感。

现在我很确信,如果需要这样的工具,我大概率就能做出来。

即便暂时做不出来,我也能学会怎么做。

我绝非专业程序员。在从事游戏音频的技术实现之前,我的编程经验主要来自于 Max/Pure Data 和 Supercollider 等工具。

我很喜欢在学习掌握这些技术工作的方方面面时的思考和应变过程。

如果你也是,不妨尽情探索游戏音频技术工作的各个方面。倘若您有想了解但还不清楚的地方,建议先建个项目并设定一个或几个小的阶段性目标,然后慢慢学习实现这些目标所需的专业知识和技能。

定制工具是游戏音频当中的一个庞大分支,但对声音设计和整合的特定领域又很重要。其不仅能在开发过程中提供帮助并节省时间,还可让声音设计师将精力放在最需要的地方。

据我所知,ReaWwise 以及由此暴露的 Lua 函数在 2022 年 9 月就推出来了。从整体上来看,时间不算太久。不过,这种方法从那时起有需要就可以拿来用了。

无非就是什么时候有这样的需要罢了。

毕竟,有需求才会有应用。

与此同时,我发布了第一个视频来展示基于 Reaper 标记构建的脚本。托马斯•弗里茨 (Thomas Fritz) 采用类似方法构建了一个名为 Wwhisper 的工具(不得不说,这个名字好很多,因为 ReaWwise 显然已经被占用了)。

两者在理念和方法上有很多共通之处,不过他侧重的功能稍微有点不一样。所以说,在把基础做好之后,大家自然就会根据需要来搭建结构。

正是这种理念与方法的密切交流,造就了游戏音频社区的独特魅力。 

如何使用

虽然我在构建这个工具时有非常具体的用途,但就像前面说的,其也可用于别的一些目的。

我的初衷是为线性视频片段构建动态互动系统,以便展示与游戏音频职位直接相关的实战经验。然而,在不同平台分享的时候,又涌现了别的一些想法。比如,有人希望不用在引擎中繁琐地进行设置就能亲身体验游戏音频的实现过程。也有人提到,或许可利用其来审查游戏中的过场动画。另外,还有人说可据此将相关技术概念传达给游戏音频以外的其他团队人员。

工具的用途并不总是取决于其开发者。各位可根据自己具体的需要灵活运用。

如果有很特别的使用场景,不妨跟我说说。我也想知道自己的工具都是被大家怎么用的。

后续打算

这个工具暂时还没有发布 v1.0 版本 – 只是因为我需要更多时间来增添功能、修复各种问题并处理可能被我忽视的空引用场景。

目前,我打算增添一些新的功能。其中包括以更系统化的方式处理多个 Reaper 空媒体项 Event(暂时就叫 Event Manager)。这是用户反馈的一个建议。对此,我深表感谢。

我真的很想进一步优化这个工具,但自 v0.9 发布以来时间一直都很紧张。

以后肯定会做的。

如何获取

您可以从以下位置的专用 GitHub 存储库下载该工具:https://github.com/mhasselbalch/MH_ReaperToWwise

在完成 v1.0 后,将通过 ReaPack 在 Reaper 中发布并提供下载。不过,可能还要等一段时间。

后会有期

感谢各位抽空阅读我写的博文!

在此,我要感谢所有对此感兴趣的人,包括朋友、同事和志同道合的小伙伴。各位提供的反馈和建议对我来说非常宝贵。当然,还要特别感谢 Audiokinetic 为我提供在此分享的机会。

如果对此感兴趣,请随时与我联系,打招呼或关注我:https://www.linkedin.com/in/marc-hasselbalch/

保重。

马克•哈塞尔巴尔赫

声音设计师

自由职业

马克•哈塞尔巴尔赫

声音设计师

自由职业

马克•哈塞尔巴尔赫 (Marc Hasselbalch) 是一名来自丹麦哥本哈根的自由声音设计师。

马克的 YouTube 频道

www.marchasselbalch.com

LinkedIn

评论

留下回复

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


更多文章

借助 Wwise Motion Source 稳健设计振动效果

还记得你第一次体验到妙不可言的振动效果是什么时候吗?当时可能你刚买了 Nintendo 64 Rumble Pak,满心期待地准备玩《Golden Eye》–...

15.4.2019 - 作者:马克西米连·西马德·波里尔 (Maximilien Simard Poirier)

关于动态音乐设计的思考-Part 1-设计分类学

引子...

6.4.2020 - 作者:侯晨钟

在Wwise中进行大批量音频管理的思路分享

在我的日常音频工作中,经常会遇到需要做大批量语音文件导入、配置的情况,由此产生的批量化处理需求大致可分为三种:...

11.5.2020 - 作者:葛鑫

Wwise 2021.1 新增功能 | Beta 版本

基于对象的音频管线 Wwise 2021.1 允许根据平台特性灵活地渲染声音,以最大限度地提高终端输出配置的空间定位精度。为便于针对支持 Audio Object 的平台单独保留 Audio...

4.2.2021 - 作者:Audiokinetic (音频动能)

Wwise Tour 2022 中国 - 视频回放

《哈利波特: 魔法觉醒-魔法世界的风格化音频设计》 《哈利波特:...

8.12.2022 - 作者:Audiokinetic (音频动能)

基于《超时空跑跑》搭建的游戏混音流程和技术细节

“你为什么要混音你的游戏?除了可读性之外,你的创意和审美目标是什么?你的混音如何服务于游戏的创意愿景、游戏设计方向和叙事方向? ”...

17.4.2025 - 作者:闫鹏

更多文章

借助 Wwise Motion Source 稳健设计振动效果

还记得你第一次体验到妙不可言的振动效果是什么时候吗?当时可能你刚买了 Nintendo 64 Rumble Pak,满心期待地准备玩《Golden Eye》–...

关于动态音乐设计的思考-Part 1-设计分类学

引子...

在Wwise中进行大批量音频管理的思路分享

在我的日常音频工作中,经常会遇到需要做大批量语音文件导入、配置的情况,由此产生的批量化处理需求大致可分为三种:...