[英]How to initialise SoundJS for IOS 9
我们一直在使用CreateJS套件,但刚刚意识到我们的音频不适用于IOS9。 不幸的是,我们只有一台运行IOS9.2.4的IOS9测试设备,但是音频播放结果却是混合的。
我正在使用的粗糙过程是;
能够在呈现该闪屏之前预加载所有音频将是有利的。 最初添加启动画面以允许音频在移动Safari上播放,点击时播放空声。 这当然适用于IOS7 / 8,但不适用于9。
我在codepen上创建了这个测试用例,试图找出问题并尝试一些选项。
<p id="status">Hello World</p>
<canvas id="canvas" width="200" height="200"></canvas>
var canvas, stage, rect;
function init() {
canvas = document.getElementById('canvas');
canvas.style.background = "rgb(10,10,30)";
stage = new createjs.Stage("canvas");
createjs.Touch.enable(stage);
rect = new createjs.Shape();
rect.graphics.f("#f00").dr(50,75,100, 50);
rect.on("mousedown", handleStart, null, true);
rect.on("touchend", handleStart, null, true);
//rect.on("click", handleStart, null, true);
stage.addChild(rect);
stage.update();
$('#status').text("Touch to Start");
createjs.Sound.initializeDefaultPlugins();
//createjs.Sound.alternateExtensions = ["ogg"];
createjs.Sound.registerSound("https://www.freesound.org/data/previews/66/66136_606715-lq.mp3", "ding1");
}
function handleStart(event) {
createjs.WebAudioPlugin.playEmptySound();
$('#status').text("Touch to Play");
rect.graphics._fill.style = '#0f0';
rect.removeAllEventListeners();
rect.on('click', handlePlay);
stage.update();
}
function handlePlay(){
createjs.Sound.play("ding1");
$('#status').text("Playing");
}
init();
对于缺少ogg版本的道歉,正在努力让测试文件加载到x-domain。
有了这个,音频在IOS9上部分适用于我们。 如果我们点击红色矩形(图形开始按钮)并保持约20秒,则单击绿色按钮不播放音频。 如果我们立即点击它,音频播放正常。
我一直在审查这个错误/线程,并试图遵循格兰特的建议。 我收集SoundJS v0.6.2现在自动尝试播放插件初始化时适当的空声,但是将initializeDefaultPlugins和registerSounds调用移动到handleStart函数似乎没有任何区别。 如果我正确理解了这个问题,那么调用WebAudioPlugin.playEmptySound方法应该足够了吗?
一直在看事件绑定,尝试mousedown / touchend而不是点击,但结果与20秒等待相同。 事件似乎也会发生两次,尽管我可能会深入研究,如果我能让它正常工作的话。
我知道针对此问题的移动安全方法文章,但是在此级别需要命名空间意味着对我们现有内容的重大改写。 有人可能会建议是否完全有必要采取这种方法? 我认为通过在初始处理程序中正确播放一些空音频应该是可行的。
实际上无法获得主要项目到这一点,但如果我能得到一个有效的例子,也许我会更近一步。
任何想法将不胜感激!
自从0.6.2中的更新以来,移动安全教程不再具有真正的相关性。 它可能会在不久的将来更新或删除。
initializeDefaultPlugins()
DefaultFlugins initializeDefaultPlugins()
,除非你想对结果采取行动(即,在做某事之前检查activePlugin)。 第一次尝试注册声音时,此方法会自动触发。 playEmptySound
也不再需要了。 SoundJS将侦听mousedown / click的第一个文件,并在后台自动执行此操作。 基于此,无论您是否聆听,您都应该能够在单击文档的任何位置播放声音。
这并不是说没有错误,只是说你所采取的步骤不是必需的。 我做了一些测试,它似乎在iOS9中工作。 这是一个简化的小提琴。 https://jsfiddle.net/lannymcnie/b4k19fwc/ (链接更新于2018年12月3日)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.