Version: Unity 6.0 (6000.0)
语言 : 中文
在 Unity 中使用原生音频 DSP 插件和 GUI
空间音响 SDK

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

音频插件 SDK 包含各种不同的音频插件类型。SDK 中的插件代码在公共领域可用,因此您可以将此代码用作模板。该项目包含带有和不带自定义 GUI 的原生 DSP 插件示例。

如果要使用集成开发环境 (IDE) 编辑和编译示例插件代码,SDK 会包含多个 IDE 的项目。下表显示了每个 IDE 的项目位置:

IDE 位置
Visual Studio NativeAudioPlugins-master\NativeCode\VisualStudio\AudioPluginDemo.sln(插件项目)。
Visual Studio NativeAudioPlugins-master\GUICode\AudioPluginDemoGUI\AudioPluginDemoGUI.sln(GUI 项目)。
XCode NativeAudioPlugins-master\NativeCode\Xcode\AudioPluginDemo.xcodeproj
UWP NativeAudioPlugins-master\NativeCode\UWP\AudioPluginDemo.sln

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

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

  2. 在 Unity 项目中,转到资源 (Assets) > 混合器 (Mixer)

  3. 单击一些混合器旁边的箭头以展开。

  4. 单击任何混音器组控制器。在检视面板中,将显示附加到混音器组控制器的任何效果。

  5. 要添加效果,请单击添加效果 (Add Effect) 按钮。这将列出您可以添加的所有示例插件效果。

  6. 选择要添加的效果。Unity 将在检视面板中显示您的效果。

如果在打开检视面板的情况下进入运行模式,某些效果会随着声音的变化而更新。

没有自定义 GUI 的插件示例

本节列出了 AudioNativePlugin 项目中包含的一些示例插件,这些插件具有默认的 Unity 滑动条,而不是自定义 GUI。

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

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

NoiseBox 插件

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

Ring Modulator 示例插件

Ring Modulator 示例插件是一个简单的调制器示例,它可将任何输入信号乘以正弦波。这会产生无线电噪声或信号丢失效果。要增加效果,请将具有不同频率的多个振铃调制效果串联在一起。

StereoWidener 示例插件

StereoWidener 可将立体声输入信号分解为具有可变延时的单声道分量和侧向分量,然后重新组合这些分量以改善感知的立体声效果。

Lofinator 插件

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

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

本节提供高级插件用例,包括均衡和多频段压缩的效果。这些插件的参数数量多于上一部分中的插件。某些插件参数对于默认滑动条而言过于复杂。

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

Equalizer 示例插件

Equalizer 插件包含一个显示图表,用于显示结果曲线和各个滤波器贡献值。要更改一个或多个参数值,请单击并拖动控制图上的参数。这样就无需单独更改每个滑动条。

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

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

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

Equalizer 和 Multiband 插件还提供代码来覆盖输入和输出频谱,以可视化插件的效果。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 能够从原生插件读取浮点数据。此外还有一个名为 GetFloatBufferCallback 的数组变体。只要请求不影响__ UI__(即用户界面,User Interface)让用户能够与您的应用程序进行交互。Unity 目前支持三种 UI 系统。更多信息
See in Glossary
或本机代码的性能,插件系统就会接受任何数据。

对于 Equalizer 和 Multiband 代码,有一个名为 FFTAnalyzer 的实用程序类,可轻松从插件中馈入输入和输出数据并获得频谱。然后,GetFloatBufferCallback 会重新采样此频谱数据,并将其发送到 C# GUI 代码。

必须重新采样数据,以便 FFTAnalyzer 以固定的频率分辨率运行分析,而 GetFloatBufferCallback 只返回请求样本的数量,这取决于显示数据的视图宽度。

CorrelationMeter 示例插件

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

CorrelationMeter 插件的自定义 GUI。
CorrelationMeter 插件的自定义 GUI。
覆盖了频谱分析的 Equalizer GUI(绿色曲线表示源,红色表示已处理)。
覆盖了频谱分析的 Equalizer GUI(绿色曲线表示源,红色表示已处理)。

Equalizer 效果和 Multiband 效果都是有意保持简单并且未进行优化,但我们认为它们是插件系统支持的更复杂 UI 的参考典范。

响度监控工具

这是在 3 个不同时间标度测量响度的响度监测工具的示例。这仅用于演示目的,但可以让您构建符合现代响度标准的监测工具。Unity 中内置了曲线渲染代码。

与 DSP 时钟同步

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

Plugin_TeeBee.cppPlugin_TeeDee.cpp 是简单的合成器,具有以下功能: * 使用随机音符生成图案 * 具有用于调整合成引擎中的滤波器和波封的参数

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

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

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

如果要通过这样的效果播放具有已知节奏的预录制音乐,请使用时间信息对音乐应用节奏同步滤波器效果或延迟。

空间化

Spatialization SDK 是使用原生音频插件 SDK 作为基础的插件示例。空间化 SDK 允许您开发自定义空间化效果,以实例化每个音频源。有关更多信息,请参阅空间音响 SDK

其他资源


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