creator1.3.2声音的一些BUG

本系列声音bug都是在安卓一些不支持webAudio的手机浏览器上发现的,包括荣耀6,小米4,红米等系列安卓手机的webview。苹果系列和安卓5.0手机未见这些问题。应用IDE是cocoscreator1.3.2。
(1)用cc.AudioSource的方法播放背景音,即使在面板设置loop,在安卓手机的webview浏览器上只能播放一遍背景音乐即停止了。当我用playMusic来播放背景声音,单次播放方式,检测isMusicPlaying()当为false又重新播放的方法,在苹果和安卓5.0以上手机上是可以达到循环播放效果的,但是在安卓中低端手机上是需要不断点击屏幕才播放,而且播放时序紊乱。
(2)cc.AudioEngine.playEffect播放音效,在不支持webAudio浏览器上声音加载方式回退到Dom方式,在浏览器network上观察声音都加载失败,造成声音卡顿严重,基本上不具有可播放性。


(3)在安卓系列低端机型上用XmlHttpRequest下载二进制声音,在用audio来播放的思路,
//加载声音
getAudioRequest:function(url)
{
var self = this;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && (xhr.status >= 200 && xhr.status < 400)) {
var blob = new Uint8Array(this.response);
var base = “data:audio/mpeg;base64,” + self.Base64(blob);
var audio = document.createElement(“audio”);
audio.src = base;
audio.play();
}
};
xhr.open(“get”, url);
xhr.responseType = ‘arraybuffer’;
xhr.send(null);
},
在苹果上是可以播放声音的,但是在安卓全系列机型上都不行;把上述代码移植成H5网页代码,可以在安卓全系列和苹果上都能播放声音。

谢谢花费宝贵的时间整理了这么多信息。
这些信息对我们非常有帮助。

现在的音频播放确实是有一些问题的,特别是浏览器上的兼容性非常难取舍。之后我们会尝试上面的代码,并且合并进入引擎测试

谢谢啦~~~~

刚刚测试了一下,转成 base64 确实可以正常播放,但是这个转换时间要很久,期间会造成大量的 cpu 开销。导致从 ArrayBuffer 转成 base64 的时候浏览器卡顿,特别是比较大的音频的时候,可能会造成卡死,play 之后还会有一个小卡顿。还有一个就是 audio 不一定都是 mpeg 编码。

你那里有没有碰到过这些问题哇?

我这里转成base64后,用audio.src=base;在苹果和新版本的chrome是可以播放的,微信也可以播放;但是用chrome30.0.0.0的webview内核,是播放不了的,好像chrome30.0.0.0不支持audio.src=base这种语法。

转成base64只用在初始化加载的时候转换一次,后面用变量保存起来,要播放的时候直接播放就行了