AudioContext 无法在 Safari 上运行,但在 Google Chrome 上运行

Posted

技术标签:

【中文标题】AudioContext 无法在 Safari 上运行,但在 Google Chrome 上运行【英文标题】:AudioContext not working on Safari but working on Google Chrome 【发布时间】:2022-01-07 22:55:52 【问题描述】:

我知道我需要在 Safari 中进行用户交互后创建音频上下文。但是,下面的代码还是不行。

html

<button onclick="play">Play</button>

javascript

function play()   
  var AudioContext = window.AudioContext || window.webkitAudioContext
  var ctx = new AudioContext()

  fetch('MP3_URL')
    .then((response) => response.arrayBuffer())
    .then((arrayBuffer) => ctx.decodeAudioData(arrayBuffer))
    .then((audioBuffer) => 
      var source = ctx.createBufferSource()
      source.buffer = audioBuffer
      source.connect(ctx.destination)
      source.start(ctx.currentTime)
    )

在谷歌浏览器 bug safari 上运行相同的代码。

我在这里做错了什么吗?非常感谢!!

【问题讨论】:

【参考方案1】:

对我来说真的没有意义,但在这种情况下,Safari 需要再次推动才能启动AudioContext。在创建 AudioContext 后立即调用 resume() 应该可以工作。

// ...
var ctx = new AudioContext();

ctx.resume();

fetch('MP3_URL')
// ...

【讨论】:

以上是关于AudioContext 无法在 Safari 上运行,但在 Google Chrome 上运行的主要内容,如果未能解决你的问题,请参考以下文章

Safari 上的 AudioContext 问题

createMediaElementSource ios safari 没有音频

尝试运行 AudioContext.createMediaElementSource() 时如何解决“音频无法识别调用‘连接’的对象”错误?

iOS Safari 上的 webkitAudioContext createMediaElementSource 不起作用

解决Image在canvas以及audiovideo在AudioContext下跨域问题

视频无法在Safari和iOS上运行