バージョン

menu_open
Wwise SDK 2024.1.0
オーサリングプラグインのフロントエンド

フロントエンドクラスは、グラフィカルユーザーインターフェースを実装するために、プラットフォームやツールキット専用のメソッドを提供します。 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フロントエンドの実装 を参照してください。

インストール時に表示させる通知を、プラグインに追加する方法については、 Plug-in First Time Creation Notice を参照してください。

注釈: 現在、グラフィカルユーザーインターフェース(GUI)に対応するWwise AuthoringプラットフォームはWindowsだけで、macOSも、オープンソースプロジェクトWineに基づいたブリッジレイアCrossoverを実行してこれを使います。

Authoringにおけるモニタリング

モニタリングとは、オーディオプラグインの状態を再生中に観察するプロセスのことです。

Authoringアプリケーションがゲームのプロファイリングをしているときや、ローカルでサウンドを再生中のときに、Authoringプラグインのインスタンスは、そのパラメータを使っている全ての再生中のインスタンスのモニタリングデータを受信することを、選択できます。そのモニタリングデータを使ってGUIの要素であるVUメーターや静的テキストなどを制御できます。例えばプラグインは、メータリング用に信号処理の中間状況を提供したり、ユーザーに表示するメモリ使用量などのパフォーマンスメトリックスなどを提供したりできます。

このセクションは、Authoring側のモニタリングに関するものです。 シリアライズと送信プロセスについては、 Sound Engineにおけるモニタリング を参照してください。

モニタリングデータの受信

モニタリングデータを受信するのは、プラグインのAuthoring部分です。その流れの各段階を、以下に示します:

  • Receiving: プラグインのAuthoring部分は、メソッド AK::Wwise::Plugin::Notifications::Monitor::NotifyMonitorData() を通してモニタリングデータを受信するので、これを AK::Wwise::Plugin::Notifications::Monitor インターフェースコンポーネントで実装する必要があります。受信するモニタリングデータは AK::Wwise::Plugin::MonitorData のアレイです。あるゲームオブジェクトにポストされた再生中のインスタンス1つに対し、MonitorDataエレメントが1つあります。Authoringアプリケーションがこのアレイにフィルタを適用すれば、プラグインのフロントエンドに、内容にあったインスタンスだけを提供することができます。
  • Deserialization: NotifyMonitorDataを実装してモニタリングデータをデシリアライズし、各 MonitorData インスタンスに必要な情報を抽出します。そして、この情報を使い、ユーザーにプラグインの状態を伝えるGUI制御を更新します。
注釈: AuthoringのメインUIスレッドで AK::Wwise::Plugin::Notifications::Monitor::NotifyMonitorData() をコールするので、アプリケーションが無反応となるのを防ぐためにも、実行時間の長いジョブは避けてください。

以下は、 NotifyMonitorData を実装してモニタリングデータをデシリアライズする方法を示した、コードの一例です:

class FrontendSourcePlugin
{ /*...*/ };
void FrontendSourcePlugin::NotifyMonitorData(
AkTimeMs in_iTimeStamp,
const AK::Wwise::Plugin::MonitorData* in_pMonitorDataArray,
unsigned int in_uMonitorDataArraySize,
bool in_bIsRealtime) override
{
// == モニタリングデータをデシリアライズする
// 最初のインスタンスをチャンネル数のリファレンスとして使う
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アレイの一部エレメントを無視することができます。また、メータリング中に各エレメントで報告された測定量の最大値を取るなど、モニタリングデータを統合することも選べます。

オブジェクトプロセッサは、個々のオブジェクトが所有するバッファを処理するオーディオプラグインから派生するものなので、複数のオブジェクトのモニタリングデータをまとめて、1つのMonitorDataとして提供します。Wwiseにとってモニタリングデータは不透明で、MonitorDataはオブジェクトの情報を提供しません。もしこの情報が重要であれば、シリアライズのストラテジの実装者が、モニタリングデータに入れる判断をしてください。 さらにこれは、プラグインのサウンドエンジン部分と異なり、Authoringプラグインのタイプがオブジェクトプロセッサ用に異なるわけではなく、モニタリングデータのフォーマットは、サウンドエンジンとプラグインのAuthoring部分の間の契約であることを意味しています。オブジェクトプロセッサの詳細については、 Sound Engine Object Processorプラグインの作成 を参照してください。

Wwiseの変更に反応する

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からはじめよう