Safari 和移动浏览器上的 Soundjs

Posted

技术标签:

【中文标题】Safari 和移动浏览器上的 Soundjs【英文标题】:Soundjs on safari and mobile browsers 【发布时间】:2013-12-05 13:19:38 【问题描述】:

目前我的音频无法在 Safari 和移动设备上播放。 它在 FireFox、Chrome 和 IE 上的普通电脑上运行良好

var manifest = [
     id: "correct", src: 'assets/correct.mp3|assets/correct.ogg' ,
     id: "wrong", src: 'assets/wrong.mp3|assets/wrong.ogg' 
];

var queue = new createjs.LoadQueue();
queue.installPlugin(createjs.Sound);
queue.loadManifest(manifest, true);

我这样调用播放函数;

createjs.Sound.play("correct");

这个函数写在一个当用户按下 div 时被调用的函数中。

【问题讨论】:

【参考方案1】:

该代码看起来应该可以工作。 Web Audio 在 ios 设备上最初是静音的,但是当在用户事件中调用 play 时它会取消静音。

有几种可能性(没有看到其余的代码):

    您使用的 iPad 1 不支持网络音频,并且由于严重限制默认禁用 html 音频。

    在调用 play 之前,您无需等待音频完成加载:

    queue.addEventListener("完成", loadComplete);

    音频文件路径不正确,因此加载失败,您可以通过侦听错误事件来检测。

    您正在对 Safari 不支持的 mp3 文件使用非默认编码。通常,这也会在其他浏览器中中断。

    Safari 需要 quicktime 才能播放 html 音频,所以这可能是个问题。

    使用 createjs.Sound.registerPlugins,SoundJS 被设置为使用不受支持的移动插件,例如 FlashPlugin。您可以通过以下方式检查您当前的插件:

    createjs.Sound.activePlugin.toString();

您可能会发现Mobile Safe Tutorial 很有用。希望对您有所帮助。

【讨论】:

【参考方案2】:

有办法破解它,播放一个空的 mp3 然后播放音频。

它必须首先加载mainfest数组中的空mp3:

var manifest = [
    ...
     id: "empty", src: 'assets/empty.mp3|assets/empty.ogg' 
];

...

在播放声音之前,先播放空mp3:

createjs.Sound.play("empty");

createjs.Sound.play("correct");

【讨论】:

以上是关于Safari 和移动浏览器上的 Soundjs的主要内容,如果未能解决你的问题,请参考以下文章

iOS 移动浏览器和 OS X Safari 上的 Flexbox 奇怪行为

移动 Safari/Chrome 上的 Angular 应用程序中出现严重的键盘延迟

HTML5 视频标签在移动 Chrome 上的奇怪行为,但适用于 SAFARI

在视口中检测元素不适用于移动 Safari

移动 safari (iOS) 中的 javascript 不会下载日历邀请

移动 Safari,scrollIntoView 不起作用