Javascript Safari Music.js(WebAudioAPI)在$get内执行问题
以下代码在Chrome和Firefox中运行良好,但在Safari中运行不好。 如果我移动的话,它在狩猎中发挥得非常完美Javascript Safari Music.js(WebAudioAPI)在$get内执行问题,javascript,jquery,safari,web-audio-api,Javascript,Jquery,Safari,Web Audio Api,以下代码在Chrome和Firefox中运行良好,但在Safari中运行不好。 如果我移动的话,它在狩猎中发挥得非常完美 inst.play(document.getElementById("abc").value, function() {}); 超出$。如您在评论中所见 对于可能导致这种情况的狩猎差异,有什么想法吗 播放ABC 此网页演示了如何使用 使用纯脚本标记。 有关使用更多ABC符号功能的歌曲,请参阅 //选择听起来像钢琴的音色。 var instrument
inst.play(document.getElementById("abc").value, function() {});
超出$。如您在评论中所见
对于可能导致这种情况的狩猎差异,有什么想法吗
播放ABC
此网页演示了如何使用
使用纯脚本标记。
有关使用更多ABC符号功能的歌曲,请参阅
//选择听起来像钢琴的音色。
var instrumentType=“piano”;
var inst=新仪器({wave:instrumentType,失谐:0});
//播放歌曲
函数playABC(urlConverted){
//如果在这里播放,则播放在Safari中有效。
//inst.play(document.getElementById(“abc”).value,function(){});
$.get(urlConverted,函数(数据){
//如果在此处播放,则在Safari中播放失败
inst.play(document.getElementById(“abc”).value,function(){});
console.log('到达这里');
}(“文本”)
.fail(函数(){
console.log('failed');
});
}
这是非常简单的代码,用于显示问题,而不是显示用例,它需要$.get读取包含文本区域中信息的外部文件
测试地点是
我尝试过将$.get更改为ajax,并使用$.noConflict();两者都没有区别。我没有主意了
编辑:由于这些有用的评论和链接,解决方案如下:
//insert note, immediately silenced, to keep connection to the original play event for Safari
inst.play("X:1\nL:1/8\nQ:100\nM:6/8\nK:G\n[a4]|", function() {});
inst.silence();
$.get(urlConverted,function(data){
//playback fails in Safari if played here
inst.play(document.getElementById("abc").value, function() {});
它看起来像某种安全限制,只播放音频以直接响应用户操作。在AJAX回调函数中执行此操作会丢失与原始用户事件的连接。这类似于弹出窗口阻止程序的工作方式,可能是为了防止自动播放。但令人惊讶的是,竟然没有日志消息说它被忽略了。非常感谢!不知道没有小费我怎么会知道。事实证明我必须演奏一个音符,而不是休息,但我可以立即让它静音,这样你就听不到了。我应该在我的问题后发布我的解决方案代码吗?无需在此处发布答案,您的问题是重复的,这意味着将面临相同问题的用户也可以通过阅读此处的答案来找到解决方案。然而,你的问题作为一个“标志牌”仍然非常有用,也就是说,用与副本不同的措辞重定向将面临此问题的问题。它看起来像某种安全限制,只播放音频以直接响应用户操作。在AJAX回调函数中执行此操作会丢失与原始用户事件的连接。这类似于弹出窗口阻止程序的工作方式,可能是为了防止自动播放。但令人惊讶的是,竟然没有日志消息说它被忽略了。非常感谢!不知道没有小费我怎么会知道。事实证明我必须演奏一个音符,而不是休息,但我可以立即让它静音,这样你就听不到了。我应该在我的问题后发布我的解决方案代码吗?无需在此处发布答案,您的问题是重复的,这意味着将面临相同问题的用户也可以通过阅读此处的答案来找到解决方案。然而,你的问题作为一个“标志牌”仍然非常有用,也就是说,用不同于副本的措辞重定向将要面对这个问题的人。