第一对AudioChunks同时播放

时间:2015-01-19 10:59:44

标签: streaming web-audio

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

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

1 个答案:

答案 0 :(得分:0)

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

创建上下文后,上下文时钟就会启动。我猜测在创建上下文和播放第一个块之间存在一点差距 - 所以它在过去尝试播放它,它只是尽快播放它。下一个或两个进入,同样的事情 - 在那之后,我预计它会降低到一个可预测的模式,或者(更有可能)你总是尝试以过去的时间开始(),所以它只是尽快播放,你只是听不到界限上的故障。