Version: 6000.3
语言: 中文
在 Unity 中使用原生音频 DSP 插件和 GUI
音频空间化器 SDK

SDK 中包含的原生音频插件示例

音频插件SDK包含多种不同的音频插件在 Unity 外部创建的一组代码,用于在 Unity 中创建功能。可以在 Unity 中使用两种插件:托管插件(使用 Visual Studio 等工具创建的托管 .NET 程序集)和本机插件(特定于平台的本机代码库)。更多信息
请参阅术语表
类型。SDK 中的插件代码在公共领域可用,因此您可以将此代码用作模板。该项目包含带有和不带有自定义 GUI 的本机 DSP 插件示例。

如果要使用 IDE 编辑和编译示例插件代码,SDK 包含多个 IDE 的项目。下表显示了在何处可以找到每个 IDE 的项目:

IDE 位置
视觉工作室 NativeAudioPlugins-master\NativeCode\VisualStudio\AudioPluginDemo.sln(插件项目)。
视觉工作室 NativeAudioPlugins-master\GUICode\AudioPluginDemoGUI\AudioPluginDemoGUI.sln(GUI 项目)。
XCode NativeAudioPlugins-master\NativeCode\Xcode\AudioPluginDemo.xcodeproj
UWP NativeAudioPlugins-master\NativeCode\UWP\AudioPluginDemo.sln

要访问 Unity 中的示例插件,请执行以下作:

  1. 打开demosUnity 项目(文件夹:NativeAudioPlugin > Assets)。

  2. 在 Unity 项目中,转到 Assets > mixers

  3. 单击某些混音器旁边的箭头以展开它们。

  4. 单击任何混音器组控制器。在检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
    请参阅术语表
    ,它显示附加到混音器组控制器的任何效果。

  5. 要添加效果,请单击“添加效果”按钮。这列出了您可以添加的所有示例插件效果。

  6. 选择要添加的效果。Unity 在检查器中显示您的效果。

如果在检查器打开的情况下进入播放模式,某些效果会随着声音的变化而更新。

没有自定义 GUI 的插件示例

本节列出了AudioNativePlugin具有默认 Unity 滑块而不是自定义 GUI 的项目。

要直接访问插件代码文件,请在 SDK 文件夹中,转到NativeAudioPlugins/NativeCode.

没有自定义 GUI 的简单插件。
没有自定义 GUI 的简单插件。

NoiseBox 插件

NoiseBox 插件是一种插件,可将输入信号与可变频率的白噪声相加和相乘。您可以将其与 Lofinator 插件和动画参数结合使用,以模拟手机声音、无线电接收不良和扬声器损坏等效果。

环形调制器示例插件

环形调制器示例插件是一个简单调制器的示例,它将任何输入信号乘以正弦波。这会产生无线电噪声或信号丢失效应。要增加效果,请将多个不同频率的环形调制效果链接在一起。

StereoWidener 示例插件

StereoWidener 插件将立体声输入信号分解为具有可变延迟的单声道和侧声量,然后重新组合这些分量以增加感知到的立体声效果。

Lofinator 插件

Lofinator 插件对信号进行简单的下采样和量化。您可以将其与 NoiseBox 插件和动画参数结合使用,以模拟手机声音、无线电接收不良和扬声器损坏等效果。

具有自定义 GUI 的音频插件示例

本部分提供高级插件用例,包括均衡和多频段效果压缩一种存储数据的方法,可减少所需的存储空间量。请参阅纹理压缩动画压缩音频压缩构建压缩
请参阅术语表
.这些插件的参数数量比上一节中的插件要多。某些插件参数对于默认滑块来说过于复杂。

要直接访问示例自定义 GUI 代码,请在 SDK 文件夹中导航到NativeAudioPlugins-master\GUICode\AudioPluginDemoGUI.

均衡器示例插件

均衡器插件包括一个显示图表,显示结果曲线和各个滤波器的贡献。要更改一个或多个参数值,请单击并拖动控制图上的参数。这样,您就不需要单独更改每个滑块。

“检查器”窗口显示“均衡器”插件,其中包含控制图表和用于单个可配置参数的滑块。
“检查器”窗口显示“均衡器”插件,其中包含控制图表和用于单个可配置参数的滑块。

若要更改滤波器曲线的增益和频率,请拖移控制图上的三个波段。要更改每个波段的形状,请按住 Shift 键并单击并拖动波段。

您可以使用 Unity 的内部 API 函数绘制曲线并绘制频率响应的抗锯齿曲线。

用于分析插件数据和 GUI 性能的代码

均衡器和多频段插件还提供代码来叠加输入和输出频谱,以可视化插件的效果。GUI 代码的运行更新速率远低于音频处理,并且无法访问音频流。因此,为了读取这些数据,本机代码提供了以下函数:

UNITY_AUDIODSP_RESULT UNITY_AUDIODSP_CALLBACK GetFloatParameterCallback(
    UnityAudioEffectState* state,
    int index,
    float* value,
    char *valuestr)
{
    EffectData::Data* data = &state->GetEffectData<EffectData>()->data;
    if(index >= P_NUM)
        return UNITY_AUDIODSP_ERR_UNSUPPORTED;
    if(value != NULL)
        *value = data->p[index];
    if(valuestr != NULL)
        valuestr[0] = 0;
  return UNITY_AUDIODSP_OK;
}

此功能使 GUI 能够从本机插件Unity 外部创建以在 Unity 中使用的特定于平台的本机代码库。允许您访问作系统调用和第三方代码库等功能,否则 Unity 无法使用这些功能。更多信息
请参阅术语表
.还有一个数组变体,称为GetFloatBufferCallback.插件系统接受任何数据,只要请求不影响 UI 或本机代码的性能。

对于均衡器和多频段代码,一个名为FFTAnalyzer可以轻松地从插件输入和输出数据并返回频谱。然后GetFloatBufferCallback对此频谱数据进行重新采样并将其发送到 C# GUI 代码。

必须对数据进行重新采样,以便FFTAnalyzer以固定频率分辨率运行分析。GetFloatBufferCallback仅返回请求的样本数,该样本数由显示数据的视图的宽度决定。

CorrelationMeter 示例插件

CorrelationMeter 插件具有最少量的 DSP 代码。此插件将左声道的幅度与右声道的幅度绘制,以显示信号的立体声效果。

CorrelationMeter 插件的自定义 GUI。
CorrelationMeter 插件的自定义 GUI。
具有叠加频谱分析的均衡器 GUI(绿色曲线为源,红色为处理)。
具有叠加频谱分析的均衡器 GUI(绿色曲线为源,红色为处理)。

均衡器和多频段效果都故意保持简单且未经优化,但它们是插件系统支持的更复杂 UI 的良好示例。

响度监听工具

这是响度监测工具在 3 个不同时间尺度上测量电平的示例。 这仅用于演示目的,但允许您构建一个监视工具,该工具 符合现代响度标准化。曲线渲染代码内置于 Unity 中。

“检查器”窗口显示响度监听工具插件,其中包含用于单个可配置参数的图形和滑块。
“检查器”窗口显示响度监听工具插件,其中包含用于单个可配置参数的图形和滑块。

同步到 DSP 时钟

您还可以使用插件系统来生成声音而不是处理声音。

Plugin_TeeBee.cppPlugin_TeeDee.cpp是简单的合成器,它们: * 生成带有随机音符的图案 * 具有用于调整合成引擎中的滤波器和包络的参数

ProcessCallback读取state->dsptick参数来确定歌曲中的位置。此计数器是全局样本位置。要使所有插件效果与相同的基于采样的时钟保持同步:

  1. 将计数器除以样本中指定的每个音符的长度。

  2. 当此除法的余数为零时,向合成引擎触发音符事件。

如果您想通过此类效果以已知速度播放预先录制的音乐,请使用时间信息对音乐应用速度同步滤波器效果或延迟。

空间

空间化 SDK 是使用原生音频插件 SDK 作为基础的插件示例。空间化 SDK 允许你开发自定义空间化效果,以实例化每个音频源场景中的音频剪辑播放到音频监听器或通过混音器播放的组件。更多信息
请参阅术语表
. 有关详细信息,请参阅音频空间化器 SDK

其他资源

在 Unity 中使用原生音频 DSP 插件和 GUI
音频空间化器 SDK