【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 使用播放是没有效果的
- 音量
音频单元的真实音量等于所属的音频组 *= 音频单元音量
- 添加音频
- 删除音频
架构
睡觉了...
标签:cocos,creator,音频,音效,音量,停止,播放,单元 From: https://www.cnblogs.com/muzzik/p/17020923.html