Unity之音效系统
音频控制
音频文件导入
常用格式
wav、mp3、ogg、aiff
音频文件参数
Force To Mono:多声道转单声道
- Normalize:强制为单声道时,混合过程中被标准化
Load In Background:通常在音效文件较大时使用。在后台加载,不阻塞主线程
Ambisonic:立体混响声(360度视频、XR应用程序时使用)
LoadType:加载类型
- Decompress On Load:不压缩形式存在内存,加载快,但是内存占用高。适用于小音效
- Compress in memory:压缩形式存在内存,加载慢,内存小。适用于较大音效
- Streaming:以流形式存在,使用时解码。内存占用最小,cpu消耗高。
Preload Audio Data:预加载音频。勾选后,进入场景就加载;不勾选,第一次使用时才加载
Compression Format:压缩方式
- PCM:音频以最高质量存储
- Vorbis:相对PCM压缩的更小,根据质量决定
- ADPCM:包含噪音,会被多次播放的声音,如打击音效
Quality:音频质量
Sample Rate Setting:PCM和ADPCM压缩格式允许自动优化或手动降低采样率
- Preserve Sample Rate:保持采样率不变
- Optimize Sample Rate:根据分析的最高频率内容自动优化采样率
- Override Sample Rate:允许手动覆盖采样率,可有效的将其用于丢弃帧率的内容
参数相关
音效系统由两个脚本组成:Audio Source音频源和AudioListener音频监听。
- Audio Source 音频源
- AudioClip:音频文件
- Output:输出装置。默认输出到场景中的音频监听器(MainCamera上的Audio Listener),可以更改为输出到混音器
- Mute:静音开关
- Bypass Effect:开关滤波器效果
- Bypass Listener Effects:快速开关所有监听器
- Bypass Reverb Zones:快速开关所有混响区
- Play On Awake:对象创建时就播放音乐
- Loop:循环
- Priority:优先级。很多音效同时播放时,优先级越高越不容易被覆盖
- Volume:音量大小
- Pitch:音高。游戏加速时可以使用
- Stereo Pan:左右声道
- Spatial Blend:近大远小的效果
- Reverb Zone Mix:到混响区的输出信号量
- 3D Sound Settings:和Spatial Blend参数成正比应用
- AudioListener 音频监听脚本
默认挂载在主摄像机上,一个用来收声的脚本,只用在主摄像机上有就可以了。
代码相关
- 得到音频源脚本
1 | AudioSource audioSource = this.GetComponent<AudioSource>(); |
- 控制播放停止
- 播放音效
1 | audioSource.Play(); |
也可以延迟播放,参数填延迟的秒数:
1 | audioSource.PlayDelayed(5); |
- 停止音效
1 | audioSource.Stop(); |
- 暂停音效
1 | audioSource.Pause(); |
停止暂停和暂停后Play效果是一样的,都会继续播放当前的音效。
停止(Stop)会重置播放状态,暂停(Pause)会保留当前播放位置。
- 检测音频源播放完毕
1 | if(audioSource.isPlaying) |
值得注意的是:一个GameObject可以挂载多个音效源脚本AudioSource,使用时要注意如果挂载多个,一定要自己管理他们,控制他们的播放、停止。
另外,如果你想播放一次性音效,可以采用AudioSource中的静态方法,它的处理逻辑是:Unity帮你创建一个临时的GameObject并为其添加AudioSource组件,播放完音频后自动销毁这个临时对象,全程无需你手动管理。
它的使用API是:
1 | // 参数1:音频文件 |
麦克风相关
- 获取麦克风的名字
1 | String[] str = MicroPhone.devices; |
- 开始录制
1 | // 参数1:设备名,传空使用默认设备 |
- 结束录制
1 | // 参数:设备名 |
- 获取音频数据用于存储或者运输
用于存储数组数据的长度 = 声道数 * 剪辑长度
1 | float[] f = new float[clip.channels * clip.samples]; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 MeiMeiBlog!





