Unity 之 音频类型和编码格式介绍
一,加载音频文件
Unity 可通过以下 3 中设置可以指定音频文件的加载方式:
Preload Audio Data(预加载音频数据):开启则音频数据在场景初始化期间自动加载,禁用则键加载推迟到需要使用音频文件时。
Load In Background (在后台加载):开启则在后台加载完成之前是阻塞主线程,关闭则是后台异步加载。
Load Type(加载类型):通过加载类型近一步控制加载音频文件,后面会详细说。
二,Load Type:加载类型
Decompress On Load(加载时解压缩): 此设置压缩磁盘上的文件以节省空间,并在首次加载时将其解压到内存中。这是加载音频文件的标准方法,应该在大多数情况下使用。
解压文件需要一段时间,这会导致加载过程中的额外开销,但会减少播放音频文件时所需的工作量。
Compressed In Memory(内存中保持压缩状态):此设置在加载音频时只是将其从磁盘复制到内存中。只有在播放音频文件时,才会在运行期间对其进行解压缩。
这将在播放音频剪辑是牺牲运行时 CPU,但在音频剪辑保持休眠状态是,提高了加速度,减少了运行时内存消耗。
因此,此选项最适合频繁使用的大型音频文件,或者在内存上晕倒难以置信的瓶颈,并且愿意牺牲一下 CPU 周期来播放音频剪辑
Streaming(流): 此设置将在运行时加载,加密和播放文件,具体做法是逐步将文件推过一个小缓冲区,在缓冲区中一次只存在整个文件的一小部分。
此方法对特定音频剪辑使用的内存量最小,但运行时 CPU 使用的内存量最大。由于文件的每个回放实例都需要自己的缓冲区,因此此设置有一个不幸的缺点,即多次引用音频剪辑,会导致内存中同一音频剪辑的多个副本必须单独处理,如果胡乱使用,会导致运行时 CPU 成文。因此此选项最后用于定期播放的单实例音频剪辑,这种音频剪辑不需要与自身的其他实例或甚至与其他流式音频剪辑重叠。例如,此设置最后与背景音乐和环境音效一起使用,这些音效需要在场景的大多数时间里播放。
小结: 默认情况下,弃用Preload Audio Data
,禁用Load In Background
以及使用Decompress On Load
的加载类型会导致场景加载时间过长,但可以确保在需要时理解准备好场景中的每个音频剪辑。当需要音频剪辑时,不会有加载延迟,音频剪辑将在调用Play()
时播放。缩短场景加载时间的一个很好的折中方法是,为以后才需要的音频剪辑弃用Load In Background
,但这不应该用于场景初始化后不久就需要的音频剪辑。然后通过AudioClip.LoadAudioData()
和 AudioClip.UnloadAudioData()
手动控制音频数据加载的时间。可以在一个场景中使用所有方法,已达到最佳性能。
三,编码格式与品质级别
Unity 支持 3 种音频剪辑编码格式,在 Inspector 面板汇总查看音频剪辑属性是,由 Compression Format 选项决定哪种格式:
Compressed :压缩算法取决于使用目标平台
Vorbis:有损压缩。Ogg 全称应该是 OGG Vorbis 是一种新的音频压缩格式,类似于 MP3 等现有的音乐格式。但有一点不同的是,它是完全免费、开放和没有专利限制的
MP3:有损压缩。同样位速率(Bit Rate)编码的 OGG 与 MP3 相比听起来更好一些。MP3 格式是受专利保护的。
PCM:无损未压缩,提供接近模拟音频效果。它以更大的文件大小换取更高的音频质量,适用于极短且需要高清晰度是。
ADPCM:有损压缩,此格式在大小和 CPU 消耗方面比 PCM 高效的多,但压缩会产生相当大的噪声。适用于爆炸,冲击声音,则可以忽略噪声。
版权声明: 本文为 InfoQ 作者【陈言必行】的原创文章。
原文链接:【http://xie.infoq.cn/article/ef8330dec936ae5231c0d9b63】。未经作者许可,禁止转载。
评论