该音频插件 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 中的示例插件
打开demos
Unity 项目(文件夹:NativeAudioPlugin > Assets)。
在 Unity 项目中,转到Assets > mixers。
单击某些混音器旁边的箭头以展开它们。
单击任何音频混音器组控制器。在检查器一个 Unity 窗口,显示有关当前选定的游戏对象、资源或项目设置的信息,允许您检查和编辑值。更多信息
参见术语表中,它显示附加到音频混音器组控制器的任何效果。
要添加效果,请单击添加效果按钮。这将列出您可以添加的所有示例插件效果。
选择要添加的效果。Unity 会在检查器中显示您的效果。
如果在检查器打开的情况下进入播放模式,则某些效果会随着声音的变化而更新。
本节列出了AudioNativePlugin
项目中包含的一些示例插件,这些插件使用默认的 Unity 滑块而不是自定义 GUI。
要直接访问插件代码文件,请在 SDK 文件夹中转到NativeAudioPlugins/NativeCode
。
NoiseBox 插件是一个插件,它以可变频率将输入信号乘以白噪声并将其相加。您可以将其与 Lofinator 插件和动画参数结合使用,以模拟手机声音、收音机信号不良和扬声器损坏等效果。
环形调制器示例插件是一个简单的调制器示例,它将任何传入信号乘以正弦波。这会产生无线电噪声或信号丢失的效果。要增强效果,请将多个具有不同频率的环形调制效果链接在一起。
立体声扩展器插件将立体声输入信号分解成单声道和侧向分量,并使用可变延迟,然后重新组合这些分量以增强感知到的立体声效果。
Lofinator 插件对信号进行简单的降采样和量化。您可以将其与 NoiseBox 插件和动画参数结合使用,以模拟手机声音、收音机信号不良和扬声器损坏等效果。
本节提供了高级插件用例,包括均衡和多频段压缩一种存储数据的方法,可减少其所需的存储空间。请参阅纹理压缩、动画压缩、音频压缩、构建压缩。
参见术语表的效果。这些插件的参数数量比上一节中的插件多。某些插件参数对于默认滑块来说过于复杂。
要直接访问示例自定义 GUI 代码,请在 SDK 文件夹中导航到NativeAudioPlugins-master\GUICode\AudioPluginDemoGUI
。
均衡器插件包含一个显示图形,显示结果曲线和各个滤波器的贡献。要更改一个或多个参数值,请单击并拖动控制图上的参数。这样,您就不需要单独更改每个滑块。
要更改滤波器曲线的增益和频率,请拖动控制图上的三个频段。要更改每个频段的形状,请按住 Shift 并单击并拖动该频段。
您可以使用 Unity 的内部 API 函数来绘制曲线并为频率响应绘制抗锯齿曲线。
均衡器和多频段插件还提供代码来叠加输入和输出频谱,以可视化插件的效果。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 代码最少。此插件将左通道的幅度与右通道的幅度进行绘制,以显示信号的立体声效果。
均衡器和多频段效果都故意保持简单且未经优化,但它们是插件系统支持的更复杂 UI 的良好示例。
这是一个响度监控工具的示例,它测量 3 个不同时间尺度的电平。这仅用于演示目的,但允许您构建符合现代响度标准的监控工具。曲线渲染代码内置于 Unity 中。
您还可以使用插件系统来生成声音而不是处理声音。
Plugin_TeeBee.cpp
和Plugin_TeeDee.cpp
是简单的合成器,它们:* 使用随机音符生成模式 * 具有用于调整合成引擎中的滤波器和包络的参数
ProcessCallback
读取state->dsptick
参数以确定歌曲中的位置。此计数器是全局样本位置。要使所有插件效果与相同的基于样本的时钟同步
将计数器除以样本中指定的每个音符的长度。
当此除法余数为零时,向合成引擎触发音符事件。
如果要通过此类效果播放具有已知速度的预录制音乐片段,请使用计时信息对音乐应用与速度同步的滤波器效果或延迟。
空间化 SDK 是一个插件示例,它使用原生音频插件 SDK 作为基础。空间化 SDK 允许您开发自定义空间化效果,以每个音频源一个组件,在场景中将音频剪辑回放到音频监听器或通过音频混音器。更多信息
参见术语表实例化。有关更多信息,请参阅音频空间化 SDK。