javascript - AudioBufferSourceNode.start() 在 Chrome 中是否损坏?如果提供offset参数则启动失败

标签 javascript google-chrome web-audio-api

我的代码在 FF 中运行良好,但在 Ubuntu 14.04(64 位)上的 Chromium 版本 39.0.2171.65 中失败。

AudioBufferSourceNode.start(when、offset、duration) 提供 offset 参数会导致不播放音频。即使偏移量是 0 这显然是默认值。

以下内容在 FF 和 Chrome 中成功播放音频:

AudioBufferSourceNode.start(0)

以下内容在 FF 中播放音频,但在 Chrome 中失败且未引发任何错误

AudioBufferSourceNode.start(0, 0)

源节点似乎根本就没有启动过。如果我尝试调用 .stop() 我会收到错误

InvalidStateError: Failed to execute 'stop' on 'AudioBufferSourceNode': cannot call stop without calling start first. 

这篇文章主要是一个健全性检查,以确保我没有疯……可能是一个 chrome bug?以下是 Chrome 中失败的完整代码:

  var audioCtx = this.audioCtx,
      audioSource = audioCtx.createBufferSource();

  var fileReader = new FileReader();

  fileReader.onload = function() {
    var arrayBuffer = this.result;

    audioCtx.decodeAudioData(arrayBuffer, function(buffer) {
      audioSource.buffer = buffer;
      audioSource.connect(audioCtx.destination);
      audioSource.loop = false;
    }, function(e){ throw "Error with decoding audio data" + e.err;});

    audioSource.start(0, 0);
  };

  fileReader.readAsArrayBuffer(audioDataBlob);

最佳答案

您的.start应该位于decodeAudioData处理程序中,只有在设置缓冲区后才能启动:

audioCtx.decodeAudioData(arrayBuffer, function(buffer) {
  audioSource.buffer = buffer;
  audioSource.connect(audioCtx.destination);
  audioSource.loop = false;
  audioSource.start(0, 0);
}, function(e){ throw "Error with decoding audio data" + e.err;});

关于javascript - AudioBufferSourceNode.start() 在 Chrome 中是否损坏?如果提供offset参数则启动失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27405126/

相关文章:

javascript - 为音频添加混响会使其失真且响亮

Javascript:在特定时间段后再次调用函数

javascript - ko.toJSON 和计算可观察值的问题

javascript - 如何在导航到不同选项卡或窗口时关闭事件

css - 摆脱用户代理样式表规则?

ruby-on-rails - html5网络音频api在服务器上应用过滤器后保存输出

javascript - 将 coffeescript 合并到您的 Node 项目中?

html - 背景附件 :fixed not working in chrome

google-chrome - TravisCI 上的 Selenium with Headless Chrome(2016)

javascript - AudioBuffer/AudioBufferSourceNode播放速率? (网络音频)