版本:Unity 6 (6000.0)
语言:English
在 Unity 中使用您的原生音频 DSP 插件和 GUI
音频空间化 SDK

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

音频插件 SDK包含各种不同的音频插件在 Unity 外部创建的一组代码,用于在 Unity 中创建功能。在 Unity 中可以使用两种类型的插件:托管插件(使用 Visual Studio 等工具创建的托管 .NET 程序集)和原生插件(特定于平台的原生代码库)。更多信息
参见术语表
类型。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 > mixers

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

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

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

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

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

没有自定义 GUI 的示例插件

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

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

Simple plug-ins without custom GUIs.
没有自定义 GUI 的简单插件。

NoiseBox 插件

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

环形调制器示例插件

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

立体声扩展器示例插件

立体声扩展器插件将立体声输入信号分解成单声道和侧向分量,并使用可变延迟,然后重新组合这些分量以增强感知到的立体声效果。

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(用户界面)允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。更多信息
参见术语表
或原生代码的性能即可。

对于均衡器和多频段代码,一个名为FFTAnalyzer的实用程序类可以轻松地将输入和输出数据从插件馈送进来并获取频谱。然后,GetFloatBufferCallback对该频谱数据进行重新采样并将其发送到 C# GUI 代码。

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

相关性计示例插件

相关性计插件的 DSP 代码最少。此插件将左通道的幅度与右通道的幅度进行绘制,以显示信号的立体声效果。

Custom GUI of the CorrelationMeter plugin.
相关性计插件的自定义 GUI。
Equalizer GUI with overlaid spectrum analysis (green curve is source, red is processed).
带有叠加频谱分析的均衡器 GUI(绿色曲线是源,红色是处理后的)。

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

响度监控工具

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

与 DSP 时钟同步

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

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

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

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

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

如果要通过此类效果播放具有已知速度的预录制音乐片段,请使用计时信息对音乐应用与速度同步的滤波器效果或延迟。

空间化

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

其他资源


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