不允许启动 AudioContext。 AngularJS录音机Chrome71

The AudioContext was not allowed to start. AngularJS Recorder Chrome 71

过去 4 年我一直在使用 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

感谢您提供的任何帮助

我解决了问题。最后恢复暂停的 AudioContext 与:

html5AudioProps.audioContext.resume().then(() => {
     var audioContext = html5AudioProps.audioContext;
})

在开始录制的函数中。

当用户按下任意键或触摸任意按钮时执行此操作

if(audio_context.state !== 'running') { audio_context.resume(); }

这个问题没什么,只适用于Angular;它更通用,并且与现代浏览器禁用自动播放声音(直到用户交互'enough')这样一个事实有关,这样您就不会被刚打开的某些网页的声音所困扰。

看到这个老问题here

我收到了完全相同的 'not allowed to start' 消息,但我没有使用 Angular;我只是想让 JavaScript 在 'enough' 用户交互之前(以编程方式)播放声音。我所做的修复是注意 ... = new AudioContext() 仅在用户按下按钮或与(本机)滑块交互后才执行。对上述旧问题的公认答案表明了基本相同的策略。

很高兴看到您已经解决了问题。可能(注意:未测试)另一种解决方案是延迟加载 and/or 记录器代码的初始化,直到用户按下某个按钮左右。

我解决了我的问题:

setTimeout(() => {
  context.close();
}, timenotification);