UPL2-7——Audio 模块

关于 Unity 自带的音频播放相关,详见:U1L14——音效系统相关

Audio 模块

Audio(音频)模块 是用来分析和监控音频系统的性能表现的,包括音频播放、混音、音量、CPU 占用等关键信息

在游戏中如果出现以下问题时,可以着重观察这里的内容:

  1. 声音异常(音量小、失真、播放顺序错误等等)、缺失
  2. 声音卡顿、延迟、音画不同步
  3. 声音内存占用过高

等等

总之,几乎所有和音频相关的问题,我们都可以通过该模块进行排查

Audio 中各参数功能的含义和作用

image

  • 音效(Audio)分析窗口

    image

    • Playing Audio Sources:场景中在该帧播放的音频源的总数。此信息可用于监测音频是否过载。

      该帧播放的音频源的总数超过 20~30 个时,在移动端可能导致声音丢失或性能下降
      如果你听不到声音、某些音效丢失,可以看这里是否 AudioSource 数量太多

    • Audio Voices:该帧中使用的音频(FMOD 通道)语音数

      若 AudioSource 多但 Voices 少,说明部分声音被“抢占”或“没被调度”

    • Total Audio CPU:音频在该帧中使用的 CPU 使用量

      一般 < 10% 属于健康,> 20% 则需排查

    • Total Audio Memory:音频引擎在该帧中使用的内存量

      持续增长或过大可能是资源未释放,或内存音频太多

  • Simple 该帧音频简单信息

    image

    • Total Audio Sources:场景中音频源的总数

    • Playing Audio Sources:场景中播放的音频源的总数

      该帧播放的音频源的总数超过 20~30 个时,在移动端可能导致声音丢失或性能下降
      如果你听不到声音、某些音效丢失,可以看这里是否 AudioSource 数量太多

    • Paused Audio Sources:场景中暂停的音频源的总数

    • Audio Clip Count:场景中音频剪辑的总数

    • Audio Voices:项目使用的音频通道(FMOD 通道)的总数

      若 AudioSource 多但 Voices 少,说明部分声音被“抢占”或“没被调度”

    • Total Audio CPU:音频使用的 CPU 总量

    • DSP CPU:项目在加载类型为 Compressed In Memory(内存压缩) 的非流式声音的混音、音频效果和解压缩中使用的 CPU 量

      这不包括 Unity 在后台对加载类型为 Decompress On Load(加载时解压) 并且选中 Load In Background 标志的声音进行解码所需的 CPU 量
      一般 < 10% 属于健康,> 20% 则需排查

    • Streaming CPU:项目在应用程序中流式传输音频所使用的 CPU 量

    • Other CPU:上文未涵盖的常规 CPU 开销

    • Total Audio Memory:项目中音频使用的内存量

      持续增长或过大可能是资源未释放,或内存音频太多

    • Streaming File Memory:从磁盘渐进读取加载类型为 Streaming 的音频文件时,音频文件用于短期缓冲已压缩音频数据的内存量。

    • Streaming Decode Memory:加载类型为 Streaming 的音频文件用于缓冲已解码样本流的内存量

    • Sample Sound Memory:加载类型为 Decompress On Load 的音频文件用于已解压缩样本数据的内存量

      注意:Unity 汇集了音频系统分配的内存,并且该内存在应用程序的运行时间内一直增长,直到达到饱和。音频系统会在内部重用分配的内存,在运行时无法压缩该内存

    • Other Memory:音频系统中各种子系统造成的开销

  • 详细(Detailed)视图 中不仅包含 简单(Simple)视图 中的所有信息 还包含音频事件等详细记录

    image

    • 上方的几个选项分别代表

      image

      • Channels:频道信息
      • Groups:分组信息
      • Channels and groups:频道和分组信息
      • Reset play count on play :当开始运行或链接到新目标设备时,会重置列表中的数字
    • 下方详细信息

      image

      • Object:包含播放音频的音频源的游戏对象

      • Asset:相应的游戏对象音频源正在播放的音频资源

      • Volume:音频源应用于音频的音量。

      • VU Level:VU Level 显示的是音频音量电平(音量强度),类似于你在混音器上看到的“音量表”

        可用于判断:某个音频是否实际在播放、音量是否被设置为非常低、或是否被静音。为0则表示没有声音输出

      • Audibility:音频播放的实际音量级别。 这是音频源的音量与混音器通道应用的其他衰减量之和

      • Group:该音频所属的 Audio Mixer Group,即 Unity 中音频的混音分组

      • Priority:这是 Unity 用于管理音频播放资源(尤其在移动端设备声道有限的情况下)的播放优先级值(范围 0~256,数值越小表示优先级越高)

        如果你发现某些音效“播放失败”或“被打断”,查看是否优先级过低。如果值高于128,容易被系统剔除

      • Playes:Unity 播放音频的次数。

      • Paused:如果音频在此帧中暂停,则显示 YES

      • Muted:如果音频在此帧中已静音,则显示 YES

      • Virtual:如果音频由于达到 Max Real Voice Count(最大真实语音数)而暂停,则显示 YES

        其中 Max Real Voice Count 可以设置 Unity 同时播放的音频源的最大数量,可以在音频项目设置 (Audio Project Settings) 中设置此属性
        如果此处显示 true,则 Unity 会对该帧中具有更高可听度或优先级的其他音频设置更高优先级。
        虚拟化后,音频不会被播放

        image

      • OneShot:如果 AudioSource.PlayOneShot() 播放了音频,则显示 YES。

      • Looped:如果 AudioSource.Play() 播放了音频,则显示 YES。

      • Distance:音频源到音频监听器 (AudioListener) 的距离。

      • MinDist:音频源曲线编辑器中定义的最小距离。此参数在音频周围定义一个球形区域;在该区域中,音量保持在恒定水平。

      • MaxDist:音频源曲线编辑器中定义的最大距离。此参数在音频周围定义一个球形区域;在该区域外,音量保持在恒定水平。

      • Time:音频播放中的当前相对时间。音频暂停播放时,此时间也会停止。

      • Duration:音频的长度(以秒为单位)。

Audio 对于我们的意义

音频虽然不像渲染那样直观,但它是游戏体验的重要组成部分,Audio(音频)模块可以让我们:

  1. 看到当前有哪些声音正在播放
  2. 明确系统使用了多少音频资源
  3. 判断音频是否超出平台承受能力

这对音频逻辑正确性、音效设计、平台兼容性都至关重要

我们可以通过它定位音频相关的性能问题

  1. 声音卡顿、延迟:可以着重查看 DSP CPU 是否过高,音频处理性能不足
  2. 声音播放失败:检查 Playing Audio Sources(播放音频源)数量,是否达到系统上限
  3. 音频加载慢:查看 Streaming Load Time(流式加载),确认是否未预加载
  4. 音频占用太多内存:看 Total Audio Memory 和 Streaming 状态相关,分析未释放的资源

等等