在ios设备上,如果用户把静音开关打开,这个时候,H5游戏用WebAudio播放音频是没有声音的,用Audio标签就能正常播放音频,因此为了解决标题阐述的问题,我们需要使用webAudio API来播放音频文件。
cocoscreator使用WebAudio
在资源管理器中选中一个audio,属性检查器内会有加载模式的选项。这个选项只对 Web 平台有效
Web Audio
通过 Web Audio 方式加载的声音资源,在引擎内是以一个 buffer 的形式缓存的。
这种方式的优点是兼容性好,问题比较少。缺点是占用的内存资源过多。
DOM Audio
通过生成一个标准的 audio 元素来播放声音资源,缓存的就是这个 audio 元素。
使用标准的 audio 元素播放声音资源的时候,在某些浏览器上可能会遇到一些限制。比如:每次播放必须是用户操作事件内才允许播放(Web Audio 只要求第一次),且只允许播放一个声音资源等。 如果是比较大的音频如背景音乐,建议使用 DOM Audio
因此如果游戏中使用Dom Audio,可以通过加载模式改成Web Audio来解决静音下还能播放音乐的问题
动态选择加载模式
有时候我们可能不会使用场景的自动加载或是预加载功能,而是希望自己在脚本中通过 cc.assetManager 进行加载。
默认加载模式
音频默认以编辑器中设定的模式来进行加载,在某些浏览器上不支持 WebAudio 模式,将退化为 DomAudio 模式。
cc.assetManager.loadRemote('http://example.com/background.mp3', callback);
强制使用 WebAudio 模式加载
你可以传入 audioLoadMode 参数,使其强制使用 WebAudio 模式加载音频。
cc.assetManager.loadRemote('http://example.com/background.mp3', { audioLoadMode: cc.AudioClip.LoadMode.WEB_AUDIO }, callback);
Laya使用WebAudio
由于Laya默认使用Audio标签这种方案来播放音频,因此游戏中必须切换成WebAudio
具体做法 需要在游戏初始化之后,首次播放音乐之前,添加以下代码:
// 切换成webAudio
Laya.SoundManager.useAudioMusic = false;