#unity/日常积累 一个2MB的音频文件,在内存中却变成了20+MB ![[Pasted image 20231117153942.png]] ![[Pasted image 20231117153946.png]] ## 研究: > 音频加载有多种模式: 造成这种现象是因为选择了Decompress On Load这种模式。 ![[Pasted image 20231117154003.png]] 为什么会造成这种现象呢?这就要学习一下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](https://link.zhihu.com/?target=https%3A//github.com/Aver58/Tools/blob/master/UnityProject/Assets/Editor/Import/ImporterAudio.cs) ![[Pasted image 20231117154031.png]] ![[Pasted image 20231117154034.png]] ![[Pasted image 20231117154126.png]] ![[Pasted image 20231117154142.png]] ![[Pasted image 20231117154153.png]]