第一对音频块同时播放

First couple AudioChunks are played simultaneously

我正在使用 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 秒,之后音频将正常播放。

有人知道为什么会这样吗? 谢谢,新陈代谢!

startTime不应该初始化为0,应该初始化为context.currentTime。实际上,可能是 currentTime + slop 的一些轻微延迟。

上下文时钟在创建上下文后立即启动。我猜在创建上下文和播放第一个块之间有一点差距 - 所以它试图在过去播放它,并且它只是尽快播放它。接下来的一两个块,同样的事情 - 在那之后,我希望它稳定到一个可预测的模式,或者(更有可能)你总是试图以过去的时间开始(),所以它只是尽快播放,您只是听不到边界处的故障。