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