过去四年来我一直在使用AngularAudioRecorder(AngularJS),在最近的Chrome更新中,出现以下错误:
The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. init @ angular-audio-recorder.js: 861
代码:
getPermission: function () {
navigator.getUserMedia({
"audio": true
}, html5HandlerConfig.gotStream, html5HandlerConfig.failStream);
},
init: function () {
service.isHtml5 = true;
var AudioContext = window.AudioContext || window.webkitAudioContext;
if (AudioContext && !html5AudioProps.audioContext) {
html5AudioProps.audioContext = new AudioContext();
}
if (localStorage.getItem("permission") !== null) {
//to get permission from browser cache for returning user
html5HandlerConfig.getPermission();
}
}
};
请在此处找到完整的代码:Angular Audio Recorder
感谢您提供的任何帮助
答案 0 :(得分:0)
我已解决问题。最后使用以下命令恢复暂停的 AudioContext :
html5AudioProps.audioContext.resume().then(() => {
var audioContext = html5AudioProps.audioContext;
})
在开始录制的功能内。
答案 1 :(得分:0)
在用户按下任意键或触摸任意按钮时执行
if(audio_context.state !== 'running') {
audio_context.resume();
}
答案 2 :(得分:0)
这个问题仅适用于Angular。它更通用,并且与现代浏览器已禁用自动播放声音(直到用户已交互足够的声音)有关,这样您就不会对刚打开的某些网页的声音感到烦恼。>
请参阅这个旧问题here。
我收到了完全相同的“不允许启动”消息,并且我没有使用Angular;我只是想让JavaScript在“足够”的用户交互之前播放声音(以编程方式)。我要解决的问题是要注意... = new AudioContext()
仅在用户按下按钮或与(本机)滑块交互后才执行。上面这个老问题的公认答案暗示了基本相同的策略。
很高兴您已经解决了问题。可能(警告:未经测试),另一种解决方案是将记录器代码的加载和/或初始化延迟到用户按下某个按钮左右为止。
答案 3 :(得分:0)
我解决了我的问题:
setTimeout(() => {
context.close();
}, timenotification);