Unity(二)| 音频文件的Load Type
Unity2020中加载音频文件的时候,有三个选项:
- Decompress On Load
- Compressed In Memory
- Streaming
音频播放的基本原理
在说明这三个选项之前,我们来看看Unity是如何播放音频文件的。
大多数音频设备都会把音频文件转换成 PCM 格式(无损、未压缩的格式)。解码器很可能会集成到软件中,或者在极少数情况下,可以用硬件或芯片来接管解码过程以减轻 CPU 负担。
这意味着:为了能够创建播放设备实际理解的音频信号,任何格式都需要将其转换为 PCM再进行播放。
说完播放原理再来说说存储,Unity的音频文件有2种方式存储,一种是在内存中,一种是在存储介质中。
将音频文件存储在内存(或 RAM,代表随机存取存储器)中是一种非常有效的音频数据准备方式,因为与存储介质(即硬盘或 SSD)相比,内存具有更高的读取速率,时间更快;但占用了内存空间。
明白了基本原理,我们再来看看具体的选项。
Decompress On Load
这个选项,是把音频文件完全解压和解码为 PCM 格式,然后再将其加载到内存中。
这样做的主要优点是被调用的音频文件已经准备好播放,只需要非常少的 CPU 来执行此操作。
此选项适合经常播放的一些小音频文件(例如脚步声和 UI 声音),因为它们不会占用太多内存空间,并且在一直播放时不需要额外的 CPU。
Compressed In Memory
这个选项,是把音频文件加载到内存中,但是以你定义的格式压缩(ADPCM、Vorbis、MP3 或其他格式),并不会解码为PCM格式。解压缩和解码仅在播放音频文件时发生。
这样做的优点是音频将保持压缩状态,但每次调用音频时可能都需要 CPU 进行解压缩和解码。
此选项适合不经常播放的音频文件,例如对象交互声音,随机环境声音等。
Streaming
上面2个选项都是把音频文件加载到内存中,而这个选项却是把音频文件放到存储介质中,不加载到内存,只在播放音频文件时才即时读取、解压缩和解码。
这样做的优点显而易见的就是不占用内存,但CPU使用高。
此选项适合那些大的音频文件,例如BGM。
总结
同一个音频文件,三个不同选项的测试结果如下:
Decompress on Load占用内存最大,但CPU使用率最小。
Compressed in Memory更像一个折衷的方案。
Steaming占用内存最小,但CPU使用率最高。