我的代码在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);
答案 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;});