html audio添加回调,webAudio和domAudio的区别(部分移动浏览器内,Audio 的回调缺失)...

DOM Audio

一般的浏览器都支持 Audio 标签的方式播放音频。引擎内的 DOM Audio 模式通过创建 Audio 标签来播放一系列的声音。但是在某些浏览器上可能会出现下列情况:

部分移动浏览器内,Audio 的回调缺失,会导致加载时间偏长的问题。所以我们尽量推荐使用 WebAudio。

iOS 系统上的浏览器,必须是用户主动操作的事件触发函数内,才能够播放这类型的音频。使用 javascript 主动播放可能会被忽略。

WebAudio

WebAudio 的兼容性比 DOM 模式好了不少,不过也有一些特殊情况:

iOS 系统上的浏览器,默认 WebAudio 时间轴是不会前进的,只有在用户第一次触摸并播放音频之后,时间轴才会启动。也就是说页面启动并播放背景音乐可能做不到。最好的处理方式就是引导用户点击屏幕,然后播放声音。

---------------------------------------------上面的是官方文档的介绍--------------------------------------------------

进入正题,目前在做web端时候遇到一个问题,在ios的设备上,如果用户把静音键打开了,那这个时候播放音频的话,如果是webAudio是没有声音的(在播没有出错可以正常结束)如果是domAudio的话就是正常的播放,有声音。

看了一下audio相关的代码发现dom模式的话 引擎是去创建了一个audio标签来播放音频的,而web模式则是利用AudioContext来播放的

所以目前有个疑问,为什么web模式下在静音状态不能正常发声呢,而dom就可以正常播放,是因为AudioContext本身的设计就是这样么,原理又是什么?

问题已经解决,修改引擎源码

罪魁祸首是settimeout,目前处理方案是针对微信平台直接callback.

https://forum.cocos.org/t/cocos-web-audio-dom-audio-ios/78331/6

因为部分手机加载dom audio有问题,无法进入游戏,如果需要直接加载可以按上面修改源码,也可以延迟加载,这样就可以进入游戏,这些处理都有问题,修改源码则升级时需要自己维护,而延迟加载则会导致有时显示不全从而无法操作,我觉得如果是背景音最好使用dom audio,最好用loader动态加载

哈喽..因为我自己很早就做了一套资源加载机制,所以我把音效都剥离到一个文件夹里,不影响我的其他资源和流程.

然后有问题的机型都是可以正常游戏,只是没有音效.

MP3解码兼容问题

之前遇到过一次这样的问题不过是在 ios 上, vivo 还是少见,遇到这种问题,一般是因为你选择的音频无法通过浏览器解码,我之前的解决方案是手动的将资源解码,使用工具是 Audacity

目前的推论是, vivo浏览器是拿开源的chromium来改的, 而mp3格式有些专利问题, 所以Chrome能解码的, chromium解不了. 在mp3的专利失效了之后, chromium就有mp3解码能力了,不过这个也得要vivo更新才行.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值