[更新demo] [支付宝小游戏] 音效莫名丢失

版本: 3.8.3 / 3.8.7

具体表现

在支付宝小游戏的实机测试下:
某个音效会播放失效

  • 既没有关闭设备音量
  • 也没有关闭游戏内的音效开关
  • 其他音效依旧正常播放

举个例子:

游戏内有ABCD等若干音效
随着游戏进行, 会在各自合适的时机播放

然后就会出现某个音效失效
比如A失效了, BCD还是正常播放
或者B失效了, ACD正常播放

然后慢慢的, 越来越多 音效会失效
整个游戏都会变得 静悄悄
然后进入结算界面, “当当当” 的奖励声音还能正常播 :upside_down_face:

相关代码

我最早是使用这份代码:

这个代码本质就是

  • 每个 Clip 占用1个 AudioSource, 可独立调节
  • 在各个平台 (web/ios/安卓/微信/抖音/快手) 上运行正常

后来改为这份代码:

1762504683694

这份代码有相当程度的简化:

  • 仅使用1个公用的 AudioSource
  • 使用 playOneShot 来播放音效
  • 事实上业务也没有需要细微控制

使用新代码之后的情况

用了新的代码之后, 大部分的音效问题得到了改善
无论如何混播都没有出现失效的问题

但是

还有一个 特殊 的音效:

  • 它是 循环音效
  • 不能用 playOneShot 来播放
  • 于是我还是创建了一个 AudioSource 来给它专用
  • 因为我还需要监听它播放结束, 来暂停循环

于是情况变成

这个唯一的特殊音效
它自己播着播着, 就会没声音了
有时候能扛几关, 有时候玩1关就没声音了

然后其他的音效和bgm都是正常的

总结

  1. 其他平台运行正常的代码, 在支付宝小游戏上出现问题
  2. 虽然使用 playOneShot 可以回避, 但是问题依旧存在
  3. 怀疑和 AudioSource 相关

录屏及Demo

Demo.rar (571.3 KB)
录屏.rar (808.3 KB)

不知道你的onLoadRes是怎么写的.但如果是先get缓存,如果为null,再load的话,可能有问题
反正我的音效每次都重新load.
你可以尝试一下.

load就是cocos自己的那个动态加载
我只是中间拼接了目录路径而已
返回值都是原封不动的返还: (e, res)

至于重复加载, 应该不会的
赋值null只是一个表示’加载中’的标记
目的就是防止重复加载

null区分于undefined
由于我用了===判断
是可以判断出来的

在回调里打印log也可以验证

已增加demo