Audio In Unity

Unity中支持的音频格式

MPEG layer 3 .mp3
Ogg Vorbis .ogg
Microsoft Wave .wav
音频交换文件格式 .aiff / .aif
Ultimate Soundtracker 模块 .mod
Impulse Tracker 模块 .it
Scream Tracker 模块 .s3m
FastTracker 2 模块 .xm
  • WAV:微软公司开发的一种声音文件格式,简单的编/解码、普遍的认同/支持以及无损耗存储,目前Windows上最流行的声音文件格式,资源大,不推荐
  • MP3:是MPEG标准中的音频部分,大小只有WAV文件的1/10,是一种有损压缩数字音频格式,失真小,适合音质要求高的文件,例如BGM
  • OGG:是一种新的音频压缩格式,类似MP3的音乐格式,它是完全免费、开放和没有专利限制的。压缩比高,适合人声、音效等

Unity Audio设置

image-20220113152429032

Unity音频优化实践 - 知乎 (zhihu.com)

ProjectSetting-音频 - 哔哩哔哩 (bilibili.com)

音频系统(一)_weixin_30432179的博客-CSDN博客

导入设置

LoadType

Load Type 类型 特点
Decompress On Load 加载时解压缩 解压完整的数据进内存,需要的内存最多,适合小音频,不要对大型文件使用,会消耗最高的内存。在加载时解压缩 Vorbis 编码的声音所使用的内存量是保持压缩状态时内存使用量的 10 倍(ADPCM 编码约为 3.5 倍)
Compressed In Memory 压缩在内存中 压缩后的音频剪辑存储在RAM中,播放时将解压缩,CPU消耗比较大(尤其是对于Ogg / Vorbis压缩文件),适合对较大的文件。较大的声音(保持解压的状态)
Streaming 即时解码 播放音频的时候流式加载,好处是文件不占用内存,坏处是加载的时候对IO、CPU都会有开销。即使没有加载任何音频数据,每个音频片段也会有大约200KB的过载

音频剪辑 - Unity 手册

Preload Audio Data:预加载音频数据

如果启用,音频剪辑将在场景加载时预先加载。如果未设置该标志,音频数据将加载到第一个 AudioSource.Play()/AudioSource.PlayOneShot(),或者它可以通过加载AudioSource.LoadAudioData(),并通过再次卸载的AudioSource .UnloadAudioData()。

预加载音效数据,这个是在进入场景的时候进行预加载的,会占用内存,我们项目一般对大于10秒的文件都不进行预加载,除非有特殊情况。知道这个文件在这个场景内肯定会用到,需要提前进行预加载。其他文件都勾选预加载。

Compression Format

Compression Format 在运行时将用于声音的特定格式。请注意,可用选项取决于当前选定的构建目标。
PCM(Pulse-Code Modulation) 此选项提供高质量,代价是文件内存变大,适合内存小的声音效果。
ADPCM 此格式适用于大量噪音和需要大量播放的声音(例如脚步声、撞击声、武器声音)。较之于 PCM,压缩能力提高 3.5 倍,但 CPU 使用率远低于 MP3/Vorbis 格式,因此成为上述声音类别的最佳压缩方案。
Vorbis/MP3 压缩使文件减小,但与 PCM 音频相比,质量降低。可通过 Quality 滑动条来配置压缩量。此格式最适合中等长度的音效和音乐。

优化方案

20180815204948831

20180815205002197

总结:

  1. 音频导出都是44100HZ,进入Unity可以使用22050HZ,质量(Quality )一般不调节,会模糊,具体可以让音频师听.

  2. 导出可以直接使用OGG格式,MP3格式在对于Loop循环播放的时候会有中断现象

  3. 原始使用wav格式,导入到unity会直接压缩

    image-20220113142102271

  4. 压缩格式选择

    除非高要求使用PCM,否则都是用Vorbis(手机上对这个支持好)

    之前2021版本之前说 MP3比vorbis格式好

    iOS 开发入门 - Unity 手册

    音频压缩

    Unity 支持导入各种源格式的声音文件。但是,在导入这些文件时(音轨文件除外),它们始终会重新编码为构建目标格式。默认情况下,此格式为 Vorbis,但如果需要,可以根据平台改用其他格式(ADPCM、MP3 等)。与 Vorbis 播放相比,MP3 播放在 iPhone 上的性能稍好一些。

    后面在2022之后又说Vorbis更好些

    Unity - Manual: iOS requirements and compatibility (unity3d.com)

    Audio compression

    Unity supports importing a variety of source format sound files. However, when importing the sound files (except tracker files), they’re always re-encoded to the build target format. By default, these files are in Vorbis format, but you can override them to other formats (such as ADPCM, MP3) for each platform, if required. Vorbis playback provides better compression and quality for iOS compared to MP3 playback.

  5. 加载格式选择

    • 小音频 0-2s 使用 Decompress On Load
    • 中等音频 >2-10s 使用 Compressed In Memory
    • 大音频 使用 Steaming
  6. 一旦声音不使用,直接删除AudioSource组件是最好的方式

  7. 一般文件都启用Preload Audio Data预加载 大文件不用(如果设置成Steaming Unity自动默认不勾选) 由于播放延迟和性能消耗,不建议在播放的瞬间加载。应该控制加载在播放之前的某些方便的时间使用AudioClip对象的LoadAudioData()方法加载。也可以用AudioClip对象的UnloadAudioData()方法手动控制声音文件的内存释放。如果Preload Audio Data不勾选 默认在使用Play方法后加载

遇到的问题以及解决方案

  1. 循环声音有中断现象 把MP3声音改成OGG格式
  2. 播放声音有延迟 Edit → Project Settings → Audio → 设置DSP Buffer size为Best latency(设置 dsp 缓冲区大小以优化延迟或性能,设置一个不合适的值会导致安卓设备的电流音)[unity 音效延迟](https://blog.csdn.net/dfgjava/article/details/47105503) 不要使用这个 经验证部分手机会出现音频无法播放或者音速变慢或音调奇怪现象

参考链接

3分钟就能掌握的视频/音频优化技巧! - UWA Blog (uwa4d.com)

移动游戏优化指南 - Unity中文课堂 (u3d.cn)

【内存优化】Unity音频资源优化 - 知乎 (zhihu.com)

Unity音效文件Audio Clip 导入设置 - 知乎 (zhihu.com)

浅谈Unity中Android、iOS音频延迟 - 简书 (jianshu.com)

音频(一)_音频认知(3.音频采样) - RainPainter雨画 - 博客园 (cnblogs.com)