📅  最后修改于: 2023-12-03 15:20:53.607000             🧑  作者: Mango
Unity 音频源是一个可用于 Unity 引擎的 C# 类,它为开发者提供了多种音频操作和数据读取的方法。该类可以帮助开发者控制音频的播放、暂停、停止、循环等行为,同时还可以获取音频的详细信息以及实时数据(如分贝值、频谱等等)。下面是 Unity 音频源的一些常用方法和属性:
类型为 AudioClip,用于指定要播放的音频资源。可以通过代码或编辑器来设置该属性的值。
代码示例:
public AudioClip myClip; // 在编译器中设置或通过代码设置 AudioClip 属性
类型为 bool,用于控制音效处理器是否对音频源进行处理。默认值为 false。
代码示例:
mySource.BypassEffects = true; // 不使用音效处理器
类型为 bool,用于控制 Listener 处理器是否对音频源进行处理。默认值为 false。
代码示例:
mySource.BypassListenerEffects = true; // 不使用 Listener 处理器
类型为 bool,用于控制混响区域是否对音频源进行处理。默认值为 false。
mySource.BypassReverbZones = true; // 不使用混响区域
类型为 AudioClip,在上面已经介绍过,用于指定要播放的音频资源。
类型为 bool,用于判断当前音频是否正在播放。
代码示例:
if(mySource.isPlaying) // 当前音频正在播放
{
// do something
}
类型为 bool,用于控制音频是否循环播放。默认值为 false。
代码示例:
mySource.Loop = true; // 循环播放
类型为 bool,用于判断音频是否静音。默认值为 false。
代码示例:
mySource.Mute = true; // 静音
类型为 float,用于设置音频的立体声平衡。范围为 -1(完全左声道)到 +1(完全右声道),默认值为 0(居中平衡)。
代码示例:
mySource.PanStereo = -0.5f; // 将声音平衡设置为稍微向左
类型为 float,用于设置音频的音调。默认值为 1(原始音调)。
代码示例:
mySource.Pitch = 1.1f; // 音调升高 10%
类型为 int,用于设置音频的优先级。该属性值越高,则该音频将被优先播放。默认值为 128。
代码示例:
mySource.Priority = 256; // 设置优先级为 256
类型为 float,用于控制空间混响和 3D 环境下的音效。该属性值范围为 0 到 1,表示非位置音频和位置音频的比例。默认值为 0(全局模式,无位置音效)。
代码示例:
mySource.SpatialBlend = 0.75f; // 部分使用位置音效
类型为 float,用于获取或设置当前音频的时间。
代码示例:
if(mySource.time >= 10) // 当前音频已经播放了 10 秒
{
// do something
}
mySource.time = 30; // 将当前音频的时间设置为 30 秒
类型为 int,用于获取或设置当前音频的采样数(Sample)。
代码示例:
if(mySource.timeSamples >= 44100) // 当前音频已经播放了 1 秒
{
// do something
}
mySource.timeSamples = 0; // 将当前音频的采样数设置为 0
类型为 AudioVelocityUpdateMode,用于控制音频源是否基于刚体的移动速度计算 Doppler 效应。默认值为 Auto。
代码示例:
mySource.VelocityUpdateMode = AudioVelocityUpdateMode.Fixed; // 不考虑刚体运动速度的影响
类型为 float,用于设置音频的音量大小。范围为 0(静音)到 1(最大音量),默认值为 1。
代码示例:
mySource.Volume = 0.5f; // 将音量设为一半大小
停止当前音频的播放。
代码示例:
mySource.Stop(); // 停止当前音频
暂停当前音频的播放。
代码示例:
mySource.Pause(); // 暂停当前音频
开始播放当前音频。
代码示例:
mySource.Play(); // 开始播放当前音频
当音频源正在播放并需要获取新的音频数据时,该事件将被触发。事件参数 AudioSampleProvider 提供了音频数据的读取和写入。
代码示例:
void OnAudioFilterRead(float[] data, int channels)
{
// data 是一个 float 数组,其中包含 samplesPerFrame 和通道数(由 channels 参数指定)的音频数据
// 做一些处理...
}
通过 Unity 音频源的详细介绍,我们可以看出它是一个非常实用的 C# 类,能够帮助开发者控制音频的各种操作行为,以及获取音频的详细信息和实时数据。在从事音频相关开发的过程中,学习和使用 Unity 音频源将会非常有益。