Chrome中的AudioBufferSourceNode.start()是否已损坏?如果提供了offset参数,则无法启动

时间:2014-12-10 15:45:39

标签: javascript google-chrome web-audio

我的代码在FF中正常工作但在Ubuntu 14.04(64位)上的Chromium 39.0.2171.65版本中失败。

offset提供AudioBufferSourceNode.start(when, offset, duration)参数会导致无法播放音频。即使偏移量为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中失败的完整代码:

  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);

1 个答案:

答案 0 :(得分:2)

您的.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;});