我使用WebAudio api播放来自服务器的流。我这样做的方式如下:
var d2 = new DataView(evt.data);
var data = new Float32Array(d2.byteLength / Float32Array.BYTES_PER_ELEMENT);
for (var jj = 0; jj < data.length; ++jj) {
data[jj] = d2.getFloat32(jj * Float32Array.BYTES_PER_ELEMENT, true);
}
var buffer = context.createBuffer(1, data.length, 44100);
buffer.getChannelData(0).set(data);
source = context.createBufferSource();
source.buffer = buffer;
source.start(startTime);
source.connect(context.destination);
startTime += buffer.duration;
startime初始化为0。 这工作正常,但它接缝给我,前几个块同时播放... 这需要大约1秒钟,之后音频播放正常。
有人知道为什么会这样吗? 谢谢,代谢!
答案 0 :(得分:0)
startTime不应该用0初始化,它应该用context.currentTime初始化。实际上,可能是currentTime +一些轻微的延迟。
创建上下文后,上下文时钟就会启动。我猜测在创建上下文和播放第一个块之间存在一点差距 - 所以它在过去尝试播放它,它只是尽快播放它。下一个或两个进入,同样的事情 - 在那之后,我预计它会降低到一个可预测的模式,或者(更有可能)你总是尝试以过去的时间开始(),所以它只是尽快播放,你只是听不到界限上的故障。