我的代码在 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/