cocos creator教程:框架 - 音频

【muzzik 教程】:框架 - 音频

此处仅谈思想,代码后续会发布

在很多代码框架中、其实 audio 这一块的逻辑一直都没有更新、永远都只有管理音乐、音效的状态控制
在我看来这些逻辑已经不符合 3d 游戏的需求了,那么我们需要什么?

不妨想想 3d 游戏的设置内的音效控制,比如特定类型音量控制(例如人声、背景音)、但是还会受到全局的音乐,音效影响
例如人声设置为 50%,音效设置为 50%, 那么最终音效的音量就等于 1 * 0.5 * 0.5 = 0.25,接下来看看我们怎么实现这些控制

需求

  • 多平台适配(原生、微信)

  • 属性面板可设置音频资源、类型(音乐、音效)

  • 全局暂停、停止

  • 特定音频类型控制

  • 重叠播放

  • 等待播放(等待播放完成才开始下次播放,而不是默认的从头开始,可累计等待播放次数)

音频单元

单个音频的控制对象,必须属于某个音频类型

# 属性描述

  • 音频资源:AudioClip

  • 音频类型:默认定义的音乐、音效其中之一

  • 事件对象:用于监听音频事件(播放、暂停、停止...)

  • 分组列表:其所属的分组,音频类型也在其中

  • 状态:停止、暂停、播放其中之一

  • 等待播放次数:-1:关闭,0-n:等待播放次数

  • AudioSource对象:用于音频播放

  • 使用 play 状态:play 和 playOneShot 的接口选择

使用 play 接口将导致同时播放数量超出 AudioSource.maxAudioChannel 时会停止之前的音频播放
使用 playOneShot 将导致音频不能暂停、播放中途修改音量不会生效

  • 音量
  • 循环
  • 当前时长
  • 总时长
  • 克隆

# 重叠播放

克隆最大重叠数量的音频单元存储至数组,每次播放时寻找停止状态的音频播放


音频组

音频组是对多个音频的统一控制器
默认存在音乐、音效两个音频组,使用 enum 定义

说明

  • 单个音频组可包含多个音频单元

  • 单个音频单元可属于多个音频组

属性描述

  • 优先级

值越小优先级越大

  • 播放

  • 暂停

  • 停止

组内音频单元的停止状态由其所属的分组内优先级最大的控制(例如 g1 = 0, g2 = 1 两个分组,g1 调用了停止接口,g2 使用播放是没有效果的

  • 音量

音频单元的真实音量等于所属的音频组 *= 音频单元音量

  • 添加音频
  • 删除音频

架构

睡觉了...

posted @ 2023-01-03 00:41  Muzzik  阅读(387)  评论(0编辑  收藏  举报