menu
 
版本
2017.1.9.6501

2024.1.5.8803

2023.1.13.8732

2022.1.19.8584

2021.1.14.8108

2019.2.15.7667

2019.1.11.7296

2018.1.11.6987

2017.2.10.6745

2017.1.9.6501

2016.2.6.6153

2015.1.9.5624


menu_open

向音频插件中添加媒体

插件媒体系统使插件可利用 Wwise 架构存储工程中的二进制数据文件。

以下是在插件中使用插件媒体相对于使用自定义数据的诸多优势:

  • 内置的数据持久化
  • 集成了版本控制(使用工作组功能)
  • 可以按平台来对数据做转码
  • 终端用户可以选择容纳数据的 SoundBank

Wwise Authoring 插件

管理插件媒体

重载函数 AK::Wwise::IAudioPlugin::SetPluginObjectMedia,存储指针供今后使用。在 Wwise 插件(设计工具部分)初始化时将调用此功能。通过实现此功能,您将收到 IPluginObjectMedia* 的接口,以便您管理媒体文件。

class MyEffect : public AK::Wwise::IAudioPlugin
{
    ...
    virtual void SetPluginObjectMedia( IPluginObjectMedia * in_pObjectMedia )
    {
        m_pObjMedia = in_pObjectMedia;
    }

    AK::Wwise::IPluginObjectMedia * m_pObjMedia;
}

您可以通过调用 AK::Wwise::IPluginObjectMedia::SetMediaSource 来导入媒体文件。在导入媒体时,媒体将被复制到插件的 Originals 目录下,全面由 Wwise 进行管理。 在索引 0 处添加插件媒体:

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

后面您可以调用 AK::Wwise::IPluginObjectMedia::InvalidateMediaSource 来请求转码媒体文件。 重载函数来接收当插件数据改变时的通知

virtual void NotifyPluginMediaChanged()
{
    // 对变化做出反应
    // ...
    
    // 通知 Wwise 需要重新转码数据
    m_pPSet->NotifyInternalDataChanged( AK::IAkPluginParam::ALL_PLUGIN_DATA_ID );
}

请参阅 AK::Wwise::IPluginObjectMedia 的功能文档了解详情。

为运行时组件转码媒体

您可能需要为运行时组件转码您的媒体。要实现转码功能,您需要从 AK::Wwise::IPluginMediaConverter 继承并实现必要的功能(包括 ConvertFile 和 GetCurrentConversionSettingsHash),这些功能可让您将导入的原始 wav 转码成实时组件的相应格式。

class MyEffect : public AK::Wwise::IAudioPlugin , public AK::Wwise::IPluginMediaConverter

一旦实现 AK::Wwise::IPluginMediaConverter 中的所有函数,您就可以重载 GetPluginMediaConverterInterface() 函数来告诉 Wwise 您希望转码您的媒体。

virtual AK::Wwise::IPluginMediaConverter* GetPluginMediaConverterInterface()
{
    return this;
}

以下是 AK::Wwise::IPluginMediaConverter 函数的应用示例:

#include "AK\Tools\Common\AkFNVHash.h"
 
AK::Wwise::ConversionResult YourPlugin::ConvertFile( 
    const GUID & in_guidPlatform,
    LPCWSTR in_szSourceFile,
    LPCWSTR in_szDestFile,
    AkUInt32 in_uSampleRate, 
    AkUInt32 in_uBlockLength, 
    AK::Wwise::IProgress* in_pProgress, 
    AK::Wwise::IWriteString* io_pError ) 
{
    // 将原始源文件转码成经过转码的文件
    // 至少将源始文件复制到已转码的文件中
    ::CopyFile(in_szSourceFile,in_szDestFile, FALSE);
    return AK::Wwise::ConversionSuccess;
}
 
ULONG YourPlugin::GetCurrentConversionSettingsHash( const GUID & in_guidPlatform, AkUInt32 in_uSampleRate ,  AkUInt32 in_uBlockLength ) 
{
    AK::FNVHash32 hashFunc;

    // 利用影响转码的效果器参数生成哈希索引
    // 提取源文件名称
    CString szInputFileName;
    m_pObjMedia->GetMediaSourceFileName( szInputFileName.GetBuffer( _MAX_PATH ), _MAX_PATH );
    szInputFileName.ReleaseBuffer();
    szInputFileName.MakeLower();
    return hashFunc.Compute( (unsigned char *)(LPCTSTR)szInputFileName, szInputFileName.GetLength()*sizeof(TCHAR) ); 
}

插件定义

在插件定义文件中,确保您将 CanReferenceDataFile 元素设为 true。

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

运行时插件

在运行时使用插件媒体

在插件的实时组件中实现 AK::IAkEffectPlugin 时,您将在 Init(...) 函数中收到 AK::IAkEffectPluginContext 指针。从 AK::IAkEffectPluginContext 中,您可以调用 AK::IAkPluginContextBase::GetPluginMedia 来获取经过转码的媒体,这些媒体打包存储于 Wwise 的 SoundBank 中。

AKRESULT RunTimeEffect::Init(
    AK::IAkPluginMemAlloc* in_pAllocator,       // 内存分配器接口。
    AK::IAkEffectPluginContext* in_pFXCtx,      // FX 环境。
    const AkAudioFormat& in_rFormat             // 音频输入格式。)
{
    AkUInt8 * pPluginData = NULL;
    AkUInt32 uPluginDataSize;
    in_pFXCtx->GetPluginMedia( 0, pPluginData, uPluginDataSize );
    if ( pPluginData == NULL )
        return AK_Fail; // 没有冲激响应的时候无需实例化插件
    ...
}

在 Wwise 中的用法

在效果器内部总线中使用插件媒体

在 Wwise 中所有总线效果器存储在 Init.bnk 中。为了避免 Init.bnk 过大,插件媒体不会自动添加到 Init.bnk 中。您需要手动添加效果器 ShareSet(共享集),或者将总线添加到单独的 SoundBank中去。


此页面对您是否有帮助?

需要技术支持?

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

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

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

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

开始 Wwise 之旅