Unity2020中加载音频文件的时候,有三个选项:

  1. Decompress On Load
  2. Compressed In Memory
  3. 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使用率最高。

4+

本文为原创文章,转载请注明出处,欢迎访问作者网站(和而不同)

发表评论

error: Content is protected !!
blank