Audio
基础
- Unity 内部使用的是
FMOD
- 音频的解析和 playback 是放在不同的线程上的
下面是 Unity 支持的不同音频编码
- PCM
- ADPCM
- Vorbis
- MP3
音频组件干了啥
下面的描述是每一帧,且都是工作在软件上,并没有硬解
- 遍历计算所有
active
的AudioSource
- 计算与
AudioListener
的距离
- 计算与
FMOD
会混合已经active
的AudioSource("voices")
- 真正的
volume
= Volume setting 乘以 与AudioListener
的距离 乘以 clip- 如果 clip 是被压缩过的,
FMOD
必须重新解码
- 如果 clip 是被压缩过的,
- 选择 X loudest voices 混合在一起
- X = "Real Voices" 音频设置
- 真正的
如果 AudioSource
是 acitve
状态,但是勾选了 Muted
,这个组件仍然会参与到上述计算中
Audio 解码并不会出现在
Unity CPU Profiler
中!
性能测试
下面是测试用例:
测试结果如下:
使用的原则
- 避免使用
AudioSource
设置为Mute
- 使用
Disable/Stop
代替Mute
- 使用
- 如果可以承受没存开销,那么在
Load
时进行解码- 对需要反复播放的短音频是最好的
- 避免播放需要解码的 clip,尤其在手机平台上