# 虚拟音频和真实音频

播放音频和实时混音会占用额外的 CPU 资源。为减少音频处理对游戏渲染的影响,小游戏音频系统支持虚拟音频。
相对于真实音频,虚拟音频 CPU 使用率更低。但是虚拟音频的声音不会被听到,因为音频系统并没有真正处理虚拟音频的数据,其数据不会被音频硬件设备所处理。
对于开发者,真实音频和虚拟音频几乎是一模一样的。开发者同样可使用相关 API 获取虚拟音频的播放状态和播放信息,同样会收到相关音频事件回调。因此在实际游戏开发中,一般情况下开发者并不需要关心音频的虚拟状态,交由系统处理即可。

虚拟音频策略如下:

  • 真实音频数量上限 —— 表示能同时被听到的声音的数量上限,默认值为20。可以在Project Setting面板设置真实音频数量上限,详情可参考这里
    音频源AudioSource的 audioPriority 属性为0时,实际的真实音频数量可能会超过此上限。
    可以通过 API 获取和设置真实音频数量上限。当重新设置了该上限,并不会立刻对当前播放中的音频产生任何影响,它只会影响后续音频的播放、暂停、停止等处理。
  • audioPriority = 0
    当 AudioSource 的audioPriority属性设置为0,此音频一定为真实音频。也就是说该音频声音一定会被听到。
    当重新设置 audioPriority 属性值时,并不会立刻影响该音频的虚拟状态。只会影响后续音频系统对该音频的处理。
  • 播放、计划播放、续播
    当对音频执行上述处理时,音频系统会根据真实音频数量上限和各个音频的优先级,重新计算音频的虚拟状态(若该音频已经存在对应虚拟状态,不会重新计算)。低优先级的音频虚拟状态可能会从真实音频转变为虚拟音频。
  • 暂停和停止播放
    当暂停和停止音频播放时,此音频虚拟状态将被重置。高优先级的其他音频虚拟状态可能会从虚拟音频转变为真实音频。
  • seek
    当音频在播放过程中被执行seek,由于此音频已经有对应的虚拟状态,因此并不会重新计算其虚拟状态。