3.4 KiB
#unity/日常积累
一个2MB的音频文件,在内存中却变成了20+MB
研究:
音频加载有多种模式: 造成这种现象是因为选择了Decompress On Load这种模式。
为什么会造成这种现象呢?这就要学习一下unity的音频的导入选项了。
一、LoadType
1. Streaming:流
动态解码声音。此方法使用==最小量的内存==来缓冲从磁盘逐渐读取并在运行中解码的压缩数据。请注意,解压缩发生在分析器窗口的音频面板的“Streaming CPU”部分中可监视其CPU使用率的单独流式线程上。注意:即使没有加载任何音频数据,流式片段也会有大约200KB的过载。
2. Decompress On Load:加载时解压缩(适用于小音效)
音频文件一经加载就会被解压缩。对较小的压缩声音使用此选项可避免即时解压缩的性能开销。==请注意,在加载时解压缩Vorbis编码的声音比使用它压缩大约多十倍的内存(对于ADPCM编码大约是3.5倍)==,所以不要将此选项用于大文件。
3. Compressed In Memory:压缩在内存中
保持声音在存储器中压缩并在播放时解压缩。这个选项有一个小的性能开销(尤其是对于Ogg / Vorbis压缩文件),所以==只能用于较大的文件==,因为在加载时解压缩会使用大量的内存。解压缩在混音器线程上发生,并可在Profiler窗口的音频面板中的“DSP CPU”部分进行监视。
4. Preload Audio Data:预加载音频数据
如果启用,音频剪辑将在场景加载时预先加载。默认情况下,这反映了在场景开始播放时所有音频剪辑已完成加载的标准Unity行为。如果未设置该标志,音频数据将要么被上加载的第一个的AudioSource.Play()/ 的AudioSource .PlayOneShot(),或者它可以通过加载的AudioSource.LoadAudioData(),并通过再次卸载的AudioSource .UnloadAudioData()。
总结:小文件音频建议使用预加载,大文件音频建议使用将Load Type修改为 Streaming ,这样在播放完毕后会自动释放对应文件。
二、Compression Format:压缩格式
- PCM :提供高品质但牺牲文件大小最适合使用在很短的音效上。
- ADPCM: 这种格式适用于大量音效上如脚步爆破和武器,它比PCM小3.5倍但CPU使用率远低于Vorbis/MP3
- Vorbis/MP3: 比PCM小但是品质比PCM低,比ADPCM消耗更多CPU。但大多数情况下我们还是应该使用这种格式,这个选择还多了个Quality可以调节质量改变文件大小 (Quality测试1和100对内存影响并不大)
三、音道
强制音效用单声道
只有少数的手机装置真的有立体声喇叭,而将音效强制设定为单声道能让内存的消耗减半。就算游戏会输出部份的立体声,有些单声道像是 UI 音效还是可以开启这个选项。
详细策略见下面这篇文章,具体的工具实现已上传github