バージョン

menu_open
Wwise SDK 2023.1.3
オーディオプラグインにメディアを追加する

プラグインメディアのシステムは、Wwiseアーキテクチャを利用して、プラグイン(エフェクト、ソース、シンク、ミキサーなど)からバイナリデータファイルをプロジェクトに保存できるようになっています。

プラグインでカスタムデータを使用する代わりにプラグインメディアを使用することには、幾つかの利点があります:

  • データの組み込み持続性
  • ソース管理の一元化 (ワークグループ機能を使用)
  • プラットフォーム別のデータコンバージョンが可能
  • エンドユーザーが、データを保持するSoundBankを選択することが可能

Wwise オーサリング プラグイン

ブラグインメディアの管理

Object Mediaサービスをリクエストするには、あなたのプラグインのバックエンドで AK::Wwise::Plugin::RequestObjectMedia を派生させます。 これで、サービスのメソッドをアクセスするための、メンバー m_objectMedia が提供されます。オブジェクトメディアについてのノティフィケーションを、例えばユーザーがオブジェクトメディアを変更したときなどに受信するには、 AK::Wwise::Plugin::Notifications::ObjectMedia から派生させ、 AK::Wwise::Plugin::Notifications::ObjectMedia::NotifyPluginMediaChanged() メソッドをオーバーライドしてください。

class MyPluginBackend
{
void NotifyPluginMediaChanged() override
{
// React to change
// ...
// Notify Wwise the data needs to be reconverted
m_host.NotifyInternalDataChanged(
true /* in_bMakeProjectDirty */
);
}
};

AK::Wwise::Plugin::ObjectMedia::SetMediaSource() を呼び出して、メディアファイルをインポートします。 メディアをインポートすると、それはプラグインの "Originals" ディレクトリにコピーされ、管理は完全にWwiseが行います。 インデックス0でプラグインメディアファイルを追加するには:

m_pObjMedia->SetMediaSource( pszFilename, 0, bReplace );

プラグインデータが変更されたときにノティフィケーションを受け取るには、関数 NotifyPluginMediaChanged をオーバーライドします。NotifyPluginMediaChanged is triggered by any modifications to the media source.

void NotifyPluginMediaChanged() override
{
// React to changes
// ...
// Notify Wwise the data needs to be reconverted
m_pPSet->NotifyInternalDataChanged( AK::IAkPluginParam::ALL_PLUGIN_DATA_ID );
}

詳細については AK::Wwise::Plugin::ObjectMedia の機能についての文書を参照してください。

ランタイムのためにメディアを変換する

If the plug-in definition file uses CanReferenceDataFile, you must convert your imported original WAV media at runtime to an appropriate format for the real-time component.

To implement conversion functions, inherit from AK::Wwise::Plugin::MediaConverter and implement the required functions:

以下は、 AK::Wwise::Plugin::MediaConverter 機能の実装例です:

#include <filesystem>
#include <ctype.h>
const GUID& in_guidPlatform,
const BasePlatformID& in_basePlatform,
const AkOSChar* in_szSourceFile,
const AkOSChar* in_szDestFile,
AkUInt32 in_uSampleRate,
AkUInt32 in_uBlockLength,
IProgress* in_pProgress,
IWriteString* io_pError)
{
// Convert the original source to a converted file.
// At minimum, copy the original file to converted
std::error_code ec;
std::filesystem::copy(
in_szSourceFile,
in_szDestFile,
std::filesystem::copy_options::overwrite_existing,
ec
);
if (ec)
{
}
}
uint32_t MyPlugin::GetCurrentConversionSettingsHash(
const GUID& in_guidPlatform,
AkUInt32 in_uSampleRate,
AkUInt32 in_uBlockLength)
{
AK::FNVHash32 hashFunc;
// Generate a Hash from parameters that have an influence on the conversion.
// Take the source file name.
char szInputFileName[_MAX_PATH];
auto size = m_pObjMedia->GetMediaSourceFileName(szInputFileName, _MAX_PATH);
if (size == 0)
return 0;
for (int i = 0; i < size; ++i)
{
szInputFileName[i] = tolower(szInputFileName[i]);
}
return hashFunc.Compute(szInputFileName, size);
}

プラグインの定義

In the plug-in definition file (the plug-in XML file), ensure that the CanReferenceDataFile element is set to true.

<PluginModule>
<EffectPlugin Name="YOUR_PLUGIN" CompanyID="???" PluginID="???">
<PluginInfo MenuPath="???">
<PlatformSupport>
<Platform Name="Windows">
...
<CanReferenceDataFile>true</CanReferenceDataFile>
</Platform>
<Platform Name="XboxOne">
...
<CanReferenceDataFile>true</CanReferenceDataFile>
</Platform>

ランタイム プラグイン

ランタイムでプラグインを使用する

AK::IAkEffectPlugin を実装するときに、プラグインのSound Engine部分で、 Init(...) 関数の中に AK::IAkEffectPluginContext ポインタを受け取ります。AK::IAkEffectPluginContext から、 AK::IAkPluginContextBase::GetPluginMedia を呼び出して、変換したメディアを手に入れます。これはWwiseのSoundBankにパッケージされています.

AK::IAkPluginMemAlloc* in_pAllocator, // Memory allocator interface.
AK::IAkEffectPluginContext* in_pFXCtx, // FX Context.
const AkAudioFormat& in_rFormat // Audio input format. )
{
AkUInt8 * pPluginData = NULL;
AkUInt32 uPluginDataSize;
in_pFXCtx->GetPluginMedia( 0, pPluginData, uPluginDataSize );
if ( pPluginData == NULL )
return AK_Fail; // No point in instantiating plug-in without impulse response.
...
}
注釈: これは、ランタイムに エフェクト プラグインメディアを使った例です。ただし、 source プラグインなど別のプラグインタイプの使い方の参考にもなります。例えばソースプラグインの場合は、 AK::IAkSourcePlugin を実装し、 AK::IAkSourcePluginContext ポインターを受領することになります。

Wwiseでの使い方

Bus Effectでプラグインメディアを使う

Wwiseでは、すべてのバス エフェクトはInit.bnkに保存されています。Init.bnkのサイズを最小限に抑えるために、プラグインメディアは、Init.bnkに自動的に追加されません。手作業で、Effect ShareSet、またはバスを、別のSoundBankに追加する必要があります。

Audiokinetic namespace
@ AK_Fail
The operation failed.
Definition: AkTypes.h:216
@ ConversionFailed
Definition: Utilities.h:192
AKRESULT
Standard function call result.
Definition: AkTypes.h:213
char AkOSChar
Generic character string
Definition: AkTypes.h:60
uint8_t AkUInt8
Unsigned 8-bit integer
virtual void GetPluginMedia(AkUInt32 in_dataIndex, AkUInt8 *&out_rpData, AkUInt32 &out_rDataSize)=0
AKSOUNDENGINE_API AKRESULT Init(const AkCommSettings &in_settings)
#define NULL
Definition: AkTypes.h:46
CPluginInfo PluginInfo
Definition: PluginDef.h:997
Wwise API for general Audio Plug-in's backend.
Definition: AudioPlugin.h:133
ConversionResult
Conversion error code.
Definition: PluginDef.h:147
virtual void NotifyPluginMediaChanged()
This function is called by Wwise when any of the plug-in media changes.
uint32_t AkUInt32
Unsigned 32-bit integer
HashParams::HashType Compute(const void *in_pData, typename HashParams::SizeType in_dataSize)
Definition: AkFNVHash.h:105
static const AkPluginParamID ALL_PLUGIN_DATA_ID
Definition: IAkPlugin.h:684
Defines the parameters of an audio buffer format.
Definition: AkCommonDefs.h:63

このページはお役に立ちましたか?

サポートは必要ですか?

ご質問や問題、ご不明点はございますか?お気軽にお問い合わせください。

サポートページをご確認ください

あなたのプロジェクトについて教えてください。ご不明な点はありませんか。

プロジェクトを登録していただくことで、ご利用開始のサポートをいたします。

Wwiseからはじめよう