目录

Wwise SDK 2018.1.11
Integration Demo 示例

Integration Demo 应用程序包含一系列的演示,展示如何在游戏中集成声音引擎的各种功能。

Note: 本节中展示的所有代码在“samples\IntegrationDemo\”目录下的工程示例中都可以找到。

Wwise 工程

此程序的 Wwise 工程也可在“samples\IntegrationDemo\WwiseProject”中找到。

Note: 此程序的 Wwise 工程使用各种音频文件转码格式,某些格式可能不可用,具体取决于安装的 Wwise 支持的平台。在 Wwise 中打开工程后,您可能会看到诸如以下警告:

'\Actor-Mixer Hierarchy\Dialogues\Captain_A\UNA-BM-AL_01\UNA-BM-AL_01' uses the conversion plugin 'XMA', which is not installed.

您可以将所有不可用平台的转码格式更改为 PCM,从而移除这些消息。有关详细信息,请参阅《Wwise 用户指南》中的以下主题:音频文件转码

此工程的 SoundBank 也与 SDK 一起安装在“samples\IntegrationDemo\WwiseProject\GeneratedSoundBanks”文件夹中。

要重新生成 SoundBank,请确保在 SoundBank Manager 中执行以下操作:

  • 勾选 SoundBank 列表中的所有 SoundBank。
  • 勾选经过测试的所有平台。
  • 勾选语言列表中的所有语言。

这些设置一旦正确,您可以在 SoundBank Manager 中单击 Generate 来生成 SoundBank。

构建和运行演示

Integration Demo 二进制文件位于“\[Debug|Profile|Release]\bin”目录下。如果您想自己重新构建此应用程序,则按照以下步骤执行:

Windows

  • 确认在您的机器中安装的 DirectX SDK 版本与 平台要求 中提及的版本匹配。
  • 在默认路径下为 Windows 生成 Integration Demo SoundBank。
  • 打开在“samples\IntegrationDemo\Windows”中找到的解决方案,并使用期望的配置创建。

要运行 Integration Demo,只需启动在上述目录中找到的可执行文件即可。

Mac

  • 确认在您的机器中安装的 XCode 版本与 平台要求 中提及的版本匹配。
  • 打开在“samples/IntegrationDemo/Mac”中找到的 Xcode 工程,并使用期望的配置创建。
  • 要运行 Integration Demo,只需启动在目录“Mac/[Debug|Profile|Release]/bin”中找到的可执行文件即可。

iOS/tvOS

  • 确认在您的机器中安装的 iOS/tvOS SDK 版本与在 平台要求 中提及的版本匹配。
  • 打开在“samples/IntegrationDemo/iOS”或“samples/IntegrationDemo/tvOS”中找到的 Xcode 工程,并使用期望的配置创建。

Android

  • 确认您机器中针对 Android 的 SDK 和工具版本与在 平台要求 中提及的版本匹配。
  • 打开“samples\IntegrationDemo\WwiseProject”中的 Wwise 工程,并在默认路径下为 Android 生成 SoundBank。
  • 重建 Integration Demo(注意,SDK 中已预先构建好了):
    • 确保 ANDROID_NDK_HOME 环境变量指向有效的 Android NDK r17c。
    • 打开命令行窗口。
    • 将目录更改为 samples\IntegrationDemo\Android。
    • 键入 Build.cmd [armeabi-v7a|x86|arm64-v8a|x86_64] [Debug|Profile|Release]。
  • 为了安装到连接好的设备上,步骤如下:
    • 打开命令行窗口。
    • 将目录更改为 samples\IntegrationDemo\Android\Android_[armeabi-v7a|arm64-v8a|x86|x86_x64]\[Debug|Profile|Release]\bin。例如,samples\IntegrationDemo\Android\Android_armeabi-v7a\Debug\bin。
    • 键入 adb install IntegrationDemo.apk

备选构建方法 – 采用 Android Studio:假如已安装 Android Studio,我们会提供一个用于编译和部署 Integration Demo 的 Gradle 工程。直接在 Android Studio 中打开 samples\IntegrationDemo\Android 目录,应该就可以构建并启动应用程序了。

Note: 您将需要使用软件键盘或硬件键盘与 Integration Demo 进行互动。使用 A、W、S、D 键导航。使用 Enter 选择。使用空格键返回。

PS4

  • 确认您机器中针对 PS4 的 SDK 和工具版本与在 平台要求 中提及的版本匹配。
  • 打开在“samples\IntegrationDemo\PS4”中找到的解决方案,并使用期望的配置创建。
  • 在 Solution Explorer 中,右键单击 IntegrationDemo Project,然后选择 Properties。
  • 选择 Debugging,并确保将 Integration Demo 的 Working Directory 属性设为 PS4 的 SoundBank 路径。例如:..\WwiseProject\GeneratedSoundBanks\PS4。
  • 确保 Neighborhood for PlayStation 4 中存在所要连接的目标。右键单击并选择 Set default,以确保将目标设为默认设备。
  • 打开 Remote Viewer for PlayStation 4,并转至 Target 选项卡。单击 Connect 并选择所要连接的设备。
  • 返回 Visual Studio 并按下 F5,来构建、部署和启动 Integration Demo。

Xbox One

  • 确认您机器中针对 Xbox One 的 SDK 和工具版本与在 平台要求 中提及的版本匹配。
  • 打开在“samples\IntegrationDemo\XboxOne”中找到的解决方案,并使用期望的配置创建。
  • 打开 Xbox One Manager,并连接至主机。
  • 打开在“samples\IntegrationDemo\XboxOne”中找到的解决方案。
  • 单击 Microsoft Xbox One Debugger。Integration Demo 将自动构建、部署和运行。

Linux

  • 确认您机器中针对 Linux 的 SDK 和工具版本与在 平台要求 中提及的版本匹配。
  • 需要额外安装以下开发包:
    • libncurses5-dev
    • g++
    • libsdl2-dev
  • 根据 针对 Linux 的专用信息 中所述设置环境变量。
  • 使用 SDK/samples/IntegrationDemo/Linux 中的 makefile 来构建 Integration Demo。
  • 要运行 Integration Demo,只需启动在目录“SDK/Linux_x[32|64]/[Debug|Profile|Release]/bin”中找到的可执行文件即可。

Switch

  • 确认您机器中针对 Switch 的 SDK 和工具版本与在 平台要求 中提及的版本匹配。
  • 打开在“samples\IntegrationDemo\NX”中找到的解决方案,并使用期望的配置创建。
  • 运行 Integration Demo 的方法:
    • 打开 Nintendo Target Manager。
    • 连接至设备。
    • 右键单击以打开上下文菜单,然后选择 Load Executable...。
    • 选择 NX[32|64]\[Debug|Profile|Release]\bin 目录中的 IntegrationDemo.nspd_root 文件。

使用说明

在 Windows 中,您可以使用键盘、连接的控制器或任何 DirectInput 兼容设备浏览 Integration Demo。

  • 要在页面上的控件之间导航,使用 UP 和 DOWN 方向键或者游戏手柄上的 UP 和 DOWN 按钮。
  • 要激活选中的控件,单击 Enter 键或者游戏手柄上的 A/X 按钮。
  • 要在菜单中返回页面,单击 Esc 键或者游戏手柄上的 B/O 按钮。

某些控件(例如切换控件和数字滑块)可让您修改数值。要修改数值,单击 LEFT 和 RIGHT 方向键或者游戏手柄上的 LEFT 和 RIGHT 按钮。

Tip: 此应用程序有联机帮助功能!要访问帮助页面,按键盘上的 F1 键或者游戏手柄上的 START 按钮。

演示

所有演示代码均可在 samples\IntegrationDemo\DemoPages 目录中找到。例如,您可以在该目录下的 DemoLocalization.h 和 DemoLocalization.cpp 文件中找到 Localization 演示代码。

Tip: 有关每个演示的相关信息也可在 Integration Demo 应用程序联机帮助中找到。

本地化

此演示展示如何实现本地化音频。本地化的音频对象位于 SoundBank 生成目录的子目录下的相关语言 SoundBank 中。我们通过卸载当前 SoundBank,然后加载期望的特定语言的 SoundBank 来达到本地化效果。

使用“Language”切换控件切换当前语言。然后按 Say Hello 按钮试听选定语言的问候。

有关语言和本地化的更多信息,请参阅 集成详情——语言与语音

动态对白

Dynamic Dialogue 演示运行一系列使用 Wwise Dynamic Dialogue 功能的测试。每项测试演示不同的控制流程,以便您可以试听它产生的效果:

  • 测试 1:显示如何使用 Wwise ID 播放简单的动态序列。
  • 测试 2:与测试 1 一样,但使用的是字符串而不是 ID。
  • 测试 3:展示在播放期间如何向动态播放列表中添加项目。
  • 测试 4:展示在播放期间如何向动态播放列表中插入项目。
  • 测试 5:展示当向空播放列表中添加项目时的情况。
  • 测试 6:展示如何对动态序列使用“Stop”调用。
  • 测试 7:展示如何对动态序列使用“Break”调用。
  • 测试 8:展示如何对动态序列使用“Pause”和“Resume”调用。
  • 测试 9:展示在将项目排队送入动态序列时如何使用“Delay”调用。
  • 测试 10:展示如何在播放期间清空播放列表。
  • 测试 11:展示在停止和清空播放列表时的情况。
  • 测试 12:展示当对播放列表调用“Break”并将它清空的情况。
  • 测试 13:展示暂停和清空播放列表时的情况。
  • 测试 14:展示在使用动态对白时如何使用带自定义参数的回调函数。
  • 测试 15:显示如何使用回调执行任务(在这种情况下,在播放 3 个项目后取消播放)。
  • 测试 16:显示如何使用回调执行任务(在这种情况下,在第一个序列结束后播放第二个序列)。
  • 测试 17:显示如何结合 Dynamic Dialogue 使用 Wwise Event。

有关动态对白的更多信息,请参阅 集成详情——动态对白

RTPC(汽车发动机)

此演示展示如何使用 RTPC。RPM 数字滑块链接到与发动机相关联的 RTPC 值(RPM)。按“Start Engine”按钮启动/停止汽车发动机音频。使用 RPM 滑块更改 RTPC 值并试听效果。

有关 RTPC 的更多信息,请参阅 集成详情——RTPC

脚步

此演示展示在游戏中实现脚步声的各种方式。它还展示了基于表面类型驱动的 SoundBank 管理,以最大限度地降低当某个表面类型不用时的媒体和元数据内存占用。最后,此演示还展示了一个非常简单的环境效果器示例。

在此示例中,脚步声通过 3 个变量来修改:表面类型、行走速度和行走人体重。

  • 表面问题(Surface 切换开关) 表面将更改声音的实际属性,因此表面不可模拟。然而,脚步声为撞击声,因此我们选择使用 SoundSeed Impact 来代表大多数表面类型。每个表面都有 SS Impact 可以调制的特定共振特性。SS Impact 、使用一小部分真实声音来产生大量各种声音,因此可以节省空间。
  • 行走速度问题(Footstep_Speed RTPC) 此工程支持几乎在所有情况下的从行走到奔跑的顺畅过渡。对于此变量,我们假设存在以下条件:走得越快,脚步声越短,撞击地面越重。这分别相当于更改音高和音量。在工程中查找有关这些参数的 RTPC。在此演示中,速度 RTPC 直接由操纵杆位移来驱动。
  • 行走人体重问题(Footstep_Weight RTPC) 脚步结构支持各种行走人体重。我们假定在现实生活中,行走人体重越重,脚步声越长,并且越模糊。这分别相当于修改音高和 LPF。在工程中查找有关这些参数的 RTPC。

对于每种表面,我们展示了处理声音样本和变量的不同方式。它们只是一些您可以在自己的结构中使用的建议和想法。

  • 碎石 我们的碎石样本非常嘈杂,它们使用 SoundSeed Impact 的效果不太好。另外它们非常相似,因此我们无需采集大量有关此表面的样本。使用一点音量、LPF 和音高随机化可以获得更多版本。体重影响通过 EQ 效果器来实现,它的增益参数由体重 RTPC 驱动。对于轻脚步声,提高频率,对于重脚步声,则采取相反的操作。注意 RTPC 对 Pitch 和 Volume 的影响。
  • 金属 金属表面是关于如何使用 SoundSeed Impact 的教科式案例;金属表面上存在大量的共振。在我们的例子中,我们可以轻松地识别脚后跟撞击声,接着是脚尖撞击声。为了获得更多化的变化,我们将每个样本一分为二。这可以让我们独立地将每段的音高随机化。我们使用精确到采样点级过渡序列,对它们进行了重新组合。基于 5 个原始样本,我们获得了 25 个基本组合。通过添加某个 Pitch 随机化和 SS Impact 的自然随机化,我们可以获得各式各样的声音。体重和速度 RTPC 驱动 SS Impact 参数以及基本的音高和 LPF。
  • 木材: 对于木材表面,行走和奔跑样本迥然不同,就像轻轻的脚步声和沉重的脚步声一样。因此它的组织方式更偏向于传统 Switch 层级结构。两个 Switch Container 均由 RTPC 驱动的 Switch 驱动(查看 GameSync 选项卡中的 Footstep_Gait 和 Footstep_Weight)。木质表面也很适合使用 SS Impact。
  • 泥土 在这种表面上行走和奔跑的样本有些类似,因此我们决定使用 Blend Container 执行过渡。有关音高和音高的 RTPC 用于考虑体重。

音频包管理: 在 Footsteps 演示中,音频包分为四个媒体音频包(每种表面各一个)。我们将屏幕一分为四,每种表面之间有一个缓冲区,在该缓冲区内要加载两个媒体 SoundBank。其目的在于避免加载媒体 SoundBank 时导致脚步声中存在间隙。在 SoundBank 管理器中,查看 GameSync 选项卡。注意,每个表面 SoundBank 仅包含相应的表面 Switch。这仅包括与该 SoundBank 中的切换开关相关的层级结构,与其它的无关。在大型游戏中,这一设置有限制特定场景中用不上的样本数量,从而限制内存占用的优势。对于基于关卡或分区的游戏,识别所用的表面非常容易,因为在设计阶段就已经知道了。对于开放世界式游戏,这更为棘手,很大程度上取决于游戏的组织,但仍可以实现。例如,如果玩家目前位于一个温暖的城市,在长时间内不会移到寒冷的环境,那么在内存中保留“冰雪”表面声音则没有任何用处。

字幕/标记

此演示展示如何设置回调函数以在点击声音文件内部的标记时接收通知。对于此演示,我们使用标记来对字幕和音频轨进行同步。

有关标记的更多信息,请参阅 集成 Marker

音乐回调

音乐同步回调演示

此演示展示一般如何使用音乐回调。节拍和小节通知从音乐节拍和拍号信息中生成。

音乐播放列表回调演示

此示例强制随机播放列表按顺序选择下一项目。播放列表项目也可通过回调来阻止。

MIDI 回调演示

展示在回调期间游戏可收到的 MIDI 消息。MIDI 消息包括 MIDI 音符、CC 值、弯音、触后和程序变化。

有产在音乐回调的更多信息,请参阅 集成详情——音乐回调

互动音乐

此示例使用音乐切换容器。尝试切换状态,方法是触发在演示页面中所列的事件。切换状态可能产生立即结果,或者在音乐容器规则中指定的时间发生状态切换。

MIDI API

本例展示了如何使用 MIDI API。按下 Start Metronome 按钮,以模拟生效的节拍器。然后,选择 BPM 滑杆并按下 LEFT 或 RIGHT,以更改该值。该演示将使用注册的回调函数,并通过 PostMIDIOnEvent 函数将 MIDI Event 发布至声音引擎。

振动

这是多人游戏演示,展示如何将 Wwise 的振动引擎集成到游戏中。

在此演示中,每个玩家可选择是关闭房门还是使用他们手中所持的枪支开枪。靠近门这个游戏对象的每个玩家和玩家自己的枪支都设有听者。通过这种方法,当任何玩家关门时,所有玩家都会收到强制反馈反应。然而,只有开枪的玩家才会收到该事件的强制反馈。另外,在 PS4 上,将只在各个玩家对应的游戏控制器扬声器中播放枪声。

Windows
Note: 使用键盘的玩家应插入游戏手柄来参与此演示。

此代码展示了如何使用二路输出、Wwise Motion 以及 Listener/Emitter 管理。

参见

话筒/音频输入

此演示展示如何记录来自话筒的音频以及在 Wwise 声音引擎中输入该音频。在 Integration Demo 中,选择“Microphone Demo”,并对着话筒讲话,以试听从 Wwise 声音引擎播放出来的您的声音。切换“Enable Delay”以试听送入到音频输入插件中的音频数据如何被处理,如同在 Wwise 中创建的任何其它声音一样。

每个平台用来访问话筒的核心 API 大不相同。检查 Integration Demo 代码中的 SoundInputSoundInputMgr 类以查看它们如何与 AudioInput 插件互动。

Note: 此演示适用于以下平台:Windows、UWP、macOS、iOS 和 tvOS。
参见

定位

这些演示展示了如何在 Wwise 中以各种方式进行 3D 定位。

在进入页面时,即开始播放直升机声。使用以下按键沿 X 和 Z 方向移动 o(屏幕平面):

  • 右摇杆
  • 方向键: 试听声音随方位变化的效果。将在屏幕左下角显示坐标轴。

位置演示

此演示仅设有一个位置。

多位置演示

此演示设有两个位置。

Spatial Audio – Portal

此演示展示了 Portal 在空间音频定位中的作用。在两个 Room 中均设有门户及可移动发声体和听者时,将在左下角显示声音传播路径及最终衍射量。除门户驱动的传播外,同空间声障还会使用原生游戏端声障算法(发声体与听者的关系和门户与听者的关系)。最终,此演示展示了如何使用 Room 来播放多声道环境声/房间底噪,并在门户位置收缩成点声源。

参见

Spatial Audio – Geometry

此演示展示了可用于直达(干声)路径衍射并与 Wwise Reflect 插件结合使用的 Wwise Spatial Audio Geometry API(不过,演示中并未使用 Reflect)。在设有两个墙壁及可移动发声体和听者时,将在左下角显示衍射路径及最终衍射量。Spatial Audio 设为通过衍射同时控制工程全局声障和 Diffraction 这个内置参数。不过,工程中仅使用了前者。

参见

编组/3D 子混音

此演示展示了仅用在总线层级结构中的定位。在 Position + Orientation 3D Spatialization 和 Attenuation 仅应用于总线时,声音引擎在 3 个子声音混合在一起后才会应用空间化。

3D Portal 和标准 Room

此演示展示了可移动发声体和听者之间的交互作用。在 Room 内设有 Portal 时,清晰展示了:

  • 辅助总线如何模拟内有听者的空间;
  • 3D 总线链 (Room1 -> Wet_Path_3D) 如何模拟听者在其外的空间。

3D 总线首先应用混响效果器,接着对输出进行定位和空间化,然后在 Master Audio Bus 中混音。

2 个 3D Portal

此演示展示在设有 Portal 的两个不同 Room 内,可移动发声体和听者之间的交互作用。根据游戏对象的位置,当 Room 离发声体够近时发声体输出声音将会激活该 Room 的声学效果。

3D 总线首先应用混响效果器,接着对输出进行定位和空间化,然后在 Master Audio Bus 中混音。

外部源

此演示展示如何使用外部源。两个按钮播放同一声音结构,但在运行时使用源“1”、“2”和“3”或源“4”、“5”和“6”设置。

参见

另外,外部源在文件包装程序中打包,并在打开演示页面时加载。请参阅 Wwise Help 了解有关 File Packager 的更多信息,并参阅 流播放/流管理器 一章了解有关文件包运行时情况的更多详情。

背景音乐演示

本例展示了 Xbox One 和 PS4 相关 DVR 法律要求的应对措施。由于很多游戏中的音乐都受版权保护,所以一般不允许使用内置 DVR 进行录制。此演示展示了使用和不使用 DVR 录制的声音之间的差异。请参阅 Wwise Project 并检查 BGMDemo 文件夹中的声音设置,同时注意其通路及所用 Audio Device。Non-Recordable 声音将被发送到输出至 DVR_Bypass 输出的总线。

参见

更多例程

Integration Demo 及其 Wwise 工程做得非常简洁,其目的是演示声音引擎集成的基础知识。有关更加逼真的集成工程,请参阅 AkCube 声音引擎集成工程示例