原理
Compression Format 压缩格式
文件体积=原始文件体积x压缩率
- Vorbis
压缩率大(3-40:1),解码慢 - ADPCM
压缩率小(3.5:1),解码速度较快 - PCM
未压缩,解码速度最快,体积最大
Load Type 加载方式
内存占用取决于加载音频的方式。以下方式,内存占用从大到小,cpu消耗从小到大。还是时间和空间的抉择。
- Decompress On Load
加载后直接全部解压到内存中,所以内存占用最多,直接就是音频资源大小(未压缩),也因此后续再播放时cpu性能消耗最小。只用于很小的音效。 - Compressed In Memory
加载文件到内存中,不解压,用到时再解压,所以内存占用一般,就是音频文件大小(压缩后),外加解压缩用的缓存。 - Streaming
播放时,循环从磁盘读取一部分,解压,播放。内存占用只有用于缓存的200KB左右,cpu消耗最大,内存占用最小。
目标
以下应该根据项目体量,权衡一个具体值。
- 文件体积尽可能小
ImportedSize多大,文件体积就是多大。 - 内存占用尽可能小
合理设定音频导入设置,常用短音频可以考虑牺牲一部分内存来换取加载速度。 - 效果能接受
实践
- forceMono=true
- 如果加载方式不是Streaming, 则loadInBackground=false
这个选项虽然不会阻塞线程,但是音效可能延迟出现,音效一般都频繁且短,延迟播放那不乱套了 - preloadAudioData=false
不要让声音加载阻塞场景 - 压缩格式和加载方式(伪代码)
长度>10: Streaming, Vobis, quality=0.01
1<=长度<=10: CompressedInMemory
需要很快响应: ADPCM
不需要很快响应: Vorbis, quality=0.01
长度<1:
需要很快响应: DecompressedOnLoad
不需要很快响应: CompressedInMemory, ADPCM
参考
Unity官方文档-Audio Profiler module 性能分析器
Unity官方文档-Audio Clip
Unity音频优化总结脑图