版本

menu_open
Wwise SDK 2024.1.1
设计工具插件的前端

前端类提供特定于平台或工具集的方法,以便实现图形用户界面。 您需要创建通过前端类(如 AK::Wwise::Plugin::GUIWindows)获取的类。

class FrontendSourcePlugin
{
public:
FrontendSourcePlugin();
// AK::Wwise::Plugin::GUIWindows
HINSTANCE GetResourceHandle() const override;
bool GetDialog(
UINT& out_uiDialogID,
) const override;
bool WindowProc(
HWND in_hWnd,
uint32_t in_message,
WPARAM in_wParam,
LPARAM in_lParam,
LRESULT& out_lResult
) override;
bool Help(HWND in_hWnd, eDialog in_eDialog) const override;
};
MyPlugin, // Add to container "MyPlugin"
FrontendSourcePlugin, // Class to add to the container
SoundEngineSourcePlugin // Sound engine plug-in to which this plug-in corresponds
);

前端负责:

  • 为用户提供更改插件属性值的途径。
  • 针对 Contents Editor 显示 GUI(仅限音频源)。
  • 显示在插件播放期间通过性能分析收集的监控数据。
  • 决定在 Wwise 用户访问插件帮助时执行怎样的操作。

如需了解如何实现 Windows 前端,请参阅 实现 Windows 前端 章节。

如需了解如何添加首次实例化时所要显示的插件通知,请参阅 插件首次创建通知 章节。

备注: 目前 Wwise 设计工具平台当中只有 Windows 支持图形用户界面 (GUI)。通过基于开源工程 Wine 的 Crossover 桥接层,还可在 macOS 上运行该平台。

设计工具端的监控

“监控”是指在播放期间察看音频插件状态的流程。

在设计工具对游戏实施性能分析或在本地播放声音时,设计工具插件实例可选择接收所有使用相应参数的播放实例的监控数据。它可以使用监控数据来控制各种 GUI 元素(如 VU 电平表和静态文本)。比如,插件可提供有关中间信号处理状态的信息以供测量电平,也可提供相应的性能指标(如内存用量)以便用户查看。

本节主要介绍设计工具端的监控。 有关“序列化”和“发送”流程的详细信息,请参阅 声音引擎端的监控 章节。

接收监控数据

监控数据由插件的设计工具部分接收。以下为此流程的步骤:

  • 接收:插件的设计工具部分通过方法 AK::Wwise::Plugin::Notifications::Monitor::NotifyMonitorData() 接收监控数据,其必须通过 AK::Wwise::Plugin::Notifications::Monitor 接口组件实现。收到的监控数据为 AK::Wwise::Plugin::MonitorData 数组。各个 MonitorData 元素与针对特定游戏对象发送的播放实例对应。设计工具可对此数组进行筛选,确保只将与上下文相关的实例提供给插件前端。
  • 反序列化NotifyMonitorData 的实现应对监控数据实施反序列化处理,以提取各个 MonitorData 实例所需的信息。随后,便可使用该信息来更新 GUI 控件以便将插件状态告知用户。
备注: AK::Wwise::Plugin::Notifications::Monitor::NotifyMonitorData() 在设计工具的主 UI 线程中调用,因此应避免执行长时运行的作业以免设计工具陷入无响应状态。

以下代码示例展示了如何实现 NotifyMonitorData 并对监控数据实施反序列化处理:

class FrontendSourcePlugin
{ /*...*/ };
void FrontendSourcePlugin::NotifyMonitorData(
AkTimeMs in_iTimeStamp,
const AK::Wwise::Plugin::MonitorData* in_pMonitorDataArray,
unsigned int in_uMonitorDataArraySize,
bool in_bIsRealtime) override
{
// == Deserialize the monitoring data
// Using the first instance as reference for the number of channels
AkUInt32 uNumChannels = *((AkUInt32 *) in_pMonitorDataArray[0].pData);
for (unsigned int i = 0; i < in_uMonitorDataArraySize; ++i)
{
AkUInt32 * pData = (AkUInt32 *) in_pMonitorDataArray[i].pData;
AkUInt32 uInstanceNumChannels = *pData++;
if (uInstanceNumChannels != uNumChannels)
continue; // Different from reference, ignore
AkReal32 fChannelPeaks[MAX_NUM_CHANNELS];
memcpy( fChannelPeaks, pData, uNumChannels * sizeof( AkReal32 ) );
// Do something with the peak, e.g., update meters
...
}
}

在提供测量内容或基于实例的统计数据时,要想支持多个 MonitorData 实例会很麻烦。为了简化要求,在个别情况下可忽略 MonitoringData 数组中的某些元素。比如,在有些元素具有不同扬声器配置的情况下。另外,还可选择对监控数据进行汇总。比如,在测量时从针对各个元素报告的电平中选取最大值。

对象处理器由音频插件衍生而来,其可处理属于不同对象的缓冲区,进而在单个 MonitorData 数组中提供多个对象的监控数据。因为监控数据对 Wwise 来说是不透明的,所以 MonitorData 无法提供对象的相关信息:如有必要,可由序列化策略的实现人员将此信息包含在监控数据中。 也就是说,与插件的声音引擎部分有所不同,设计工具插件类型对对象处理器来说并无不同,而监控数据的格式由插件的声音引擎和设计工具部分共同约定。有关对象处理器的详细信息,请参阅 创建声音引擎对象处理器插件 章节。

对 Wwise 中的更改作出响应

有些通知处理程序方法会由不同的服务提供,便于插件对 Wwise 中的上下文更改作出响应。比如,在对由属性集管理的属性实施更改时发送通知。有关更多详细信息,请参阅 属性值通知 章节。该章节介绍了其中一些与插件前端部分密切相关的通知。

音频设计师更改当前平台

在 Wwise 用户使用下拉列表或键盘快捷方式更改当前平台时,若通过获取 AK::Wwise::Plugin::RequestHost 请求主机服务,则将相应信息告知插件的实例。 随后,插件便可实现 AK::Wwise::Plugin::NotificationsHost::NotifyCurrentPlatformChanged() 方法。 这样可在显示时依据新的当前平台自动调节对话框内容。

AkInt32 AkTimeMs
Time in ms
Definition: AkTypes.h:56
Wwise Authoring Plug-ins - Main include file.
virtual HINSTANCE GetResourceHandle() const
Retrieves the plug-in's HINSTANCE used for loading resources.
Definition: GUIWindows.h:263
virtual bool GetDialog(eDialog in_eDialog, uint32_t &out_uiDialogID, PopulateTableItem *&out_pTable) const
Retrieves the plug-in dialog parameters.
Definition: GUIWindows.h:280
float AkReal32
32-bit floating point
virtual bool Help(HWND in_hWnd, eDialog in_eDialog, const char *in_szLanguageCode) const
Called when the user clicks on the '?' icon.
Definition: GUIWindows.h:323
Windows frontend plug-in API for Audio plug-ins.
Definition: GUIWindows.h:200
virtual bool WindowProc(eDialog in_eDialog, HWND in_hWnd, uint32_t in_message, WPARAM in_wParam, LPARAM in_lParam, LRESULT &out_lResult)
Window message handler for dialogs.
Definition: GUIWindows.h:303
#define AK_ADD_PLUGIN_CLASS_TO_CONTAINER(ContainerName, WwiseClassName, AudioEngineRegisteredName)
(C++) Adds a Wwise Authoring plug-in and a Sound Engine plug-in to a plug-in container.
API for Sound Engine's Monitor Data notification.
uint32_t AkUInt32
Unsigned 32-bit integer

此页面对您是否有帮助?

需要技术支持?

仍有疑问?或者问题?需要更多信息?欢迎联系我们,我们可以提供帮助!

查看我们的“技术支持”页面

介绍一下自己的项目。我们会竭力为您提供帮助。

来注册自己的项目,我们帮您快速入门,不带任何附加条件!

开始 Wwise 之旅