要使用 SoundFrame,您需要以下文件:
另提供了以下示例:
以下示例是 SoundFrame 客户端的基本代码结构:
#include <AK/SoundFrame/SF.h> class SoundFrameClient : public AK::SoundFrame::IClient { AK::SoundFrame::ISoundFrame * m_pSoundFrame; public: SoundFrameClient() : m_pSoundFrame( NULL ) { AK::SoundFrame::Create( this, &m_pSoundFrame ); if ( m_pSoundFrame ) m_pSoundFrame->Connect(); } ~SoundFrameClient() { if ( m_pSoundFrame ) m_pSoundFrame->Release(); } // SoundFrame::IClient 方法 virtual void OnConnect( bool in_bConnect ) {} virtual void OnEventNotif( Notif in_eNotif, AkUniqueID in_eventID ) {} virtual void OnDialogueEventNotif( Notif in_eNotif, AkUniqueID in_dialogueEventID ) {} virtual void OnSoundObjectNotif( Notif in_eNotif, AkUniqueID in_soundObjectID ) {} virtual void OnStatesNotif( Notif in_eNotif, AkUniqueID in_stateGroupID ) {} virtual void OnSwitchesNotif( Notif in_eNotif, AkUniqueID in_switchGroupID ) {} virtual void OnGameParametersNotif( Notif in_eNotif, AkUniqueID in_gameParameterID ) {} virtual void OnTriggersNotif( Notif in_eNotif, AkUniqueID in_triggerID ) {} virtual void OnArgumentsNotif( Notif in_eNotif, AkUniqueID in_argumentID ) {} virtual void OnEnvironmentsNotif( Notif in_eNotif, AkUniqueID in_environmentID ) {} virtual void OnGameObjectsNotif( Notif in_eNotif, AkGameObjectID in_gameObjectID ) {} }
|
Caution: 为了能让 SoundFrame 从 Wwise 设计工具中接收消息,AK::SoundFrame::ISoundFrame::Connect 必须创建一个窗口。此函数必须从应用程序消息泵所在的同一线程中调用。 |
虽然客户端持有 SoundFrame,但它可以使用此接口通过以下方式与 Wwise 互动:
SoundFrame 为您提供将 Wwise 对象集成到应用程序的功能。通过 SoundFrame,您可以执行播放事件、指定切换开关和设置环境等任务。以下 Wwise 对象可结合 SoundFrame 一起使用:
在当您的应用程序中使用 Wwise 对象时,知道如何引用它们很重要。引用 Wwise 对象分两种方式:
当您想将 Wwise 对象集成到应用程序时,可使用以下任一方法启用此功能:
IClient::OnEventNotif
中的 Notif_Push 通知。当您的工程中包含衰减时,如果能在应用程序中查看 Wwise 中定义的最大衰减值会非常有用。通过 SoundFrame,您可以显示衰减值,并且当在 Wwise 中修改这些值时,还可注册获取通知。
从 SoundFrame 的角度来看,衰减是声音对象的属性(请参阅 ISoundObject 了解更多信息)。 在应用程序中显示衰减值的方法:
在修改您的应用程序来正确显示衰减值后,最好注册获取衰减变化通知。
注册获取衰减变化通知的方法:
然后当在 Wwise 中修改衰减值时,您将在 、AK::SoundFrame::IClient::OnSoundObjectNotif
中收到 Notif_Changed
类型通知。
取消获取衰减变化通知:
SoundFrame 可访问大多数声音引擎 API。它可以让您启用事件播放,以及修改应用程序中的状态、切换开关、RTPC、触发器和环境。此 API 可以让您在 Wwise 中直接模拟真实的游戏场景,无需运行游戏环境,甚至不必生成 SoundBank。
如果您希望用户能够在您的应用程序中播放事件,则必须按照以下方式启用事件播放功能:
|
Note: 当您的应用程序进入播放模式时,许多事件将排长队进行播放。因此建议在播放期间使用 ISoundFrame::SetPlayBackMode 将播放模式设置为 True。当播放结束时,您可以将播放模式重新设为 False。把播放模式设为 False 将停止 Wwise 中的一切播放。 |
SoundFrame 可以让您更改应用程序中的活跃状态和切换开关来模拟真实的游戏场景。以下方法可以让您来做到这一点:
SoundFrame 可以让您访问用于创建或移除游戏对象以及修改它们三维位置的方法。它还可让您定义听者,并将它们布置在应用程序中您希望的位置。为此,使用以下方法:
SoundFrame 可以让您修改 RTPC 和环境,以及启用互动音乐触发器,从而您可以创建更加逼真的游戏模拟。您还可以定义游戏对象的声障和声笼级别。为此,使用以下方法:
音频设计师可在 SoundBank Manager 中手动创建 SoundBank 并向其中装入事件。
然而,如果您要使用别的应用程序(例如 3D 应用程序或关卡编辑器)将事件集成到您的游戏中,则可以用该应用程序生成 SoundBank 定义文件,然后导入到 Wwise 以自动创建和填充 SoundBank。
定义文件是按照 SoundBank 分类列出游戏中所有事件的文本文件。定义文件必须包含 SoundBank 的名称和相应事件名称,两者之间通过制表符隔开。下图演示应该如何编写定义文件,以使 Wwise 能够读取定义文件。
定义文件还包含特定关键词,这些关键词定义 SoundBank 中打包的工程元素类型。可以使用以下关键词:
在定义文件中,可在事件名称后添加若干个关键词,每个关键词通过制表符隔开。如果定义文件中不包含关键词,则所有工程元素和媒体都将打包到 SoundBank 中。下图演示如何在定义文件中使用这些关键词。
如果您的游戏未对事件名称使用字符串,则可在定义文件中使用以下任何系统来定义事件:
下图演示如何在定义文件中使用四种不同的系统来定义事件。
在各种函数中,可通过 SoundFrame 获取事件 ID:
请参阅 AK::SoundFrame::IEvent、AKSoundFrame::IClient 和 AK::SoundFrame::ISoundFrame 了解更多详情。
SoundBank 定义文件可手动导入,也可通过 SoundFrame 导入。
如果您的应用程序生成 SoundBank 定义文件,您可以通过调用来通知 Wwise 需要导入新的定义文件。
通知 Wwise 需要导入新 SoundBank 定义文件的方法是:
|
Note: 注意,定义文件创建的 SoundBank 位于默认 SoundBank Work Unit(工作单元)中。要在不同的 Work Unit 中创建 SoundBank,您则需要在 Wwise 中手动导入定义文件。 |
如果您的应用程序未生成 SoundBank 定义文件,您可以通过调用来通知 Wwise 需要重新生成 SoundBank。
通知 Wwise 需要重新生成 SoundBank 的方法是:
通过导入定义文件在 Wwise 中创建或更新 SoundBank 的方法是:
|
Note: Wwise 会记住事件是由用户手动添加还是通过导入 SoundBank 定义文件自动添加的。只有通过导入定义文件添加的事件在后续的定义文件导入过程中才会从 SoundBank 中移除。手动添加的事件不会从 SoundBank 中移除,即使没有列举在定义文件中也是如此。 |