我希望将数据附加到正在使用网络音频播放的已经现有AudioBuffer。
收到要播放的音频数据后,我创建一个AudioBuffer,然后将数据分配给ArrayBuffer响应。
var audioBuffer = context.createBuffer(1, audioToPlay.length, 16000);
audioBuffer.getChannelData(0).set(audioToPlay);
然后我创建一个buffer source node并将音频缓冲区连接到Web音频上下文。
var source = context.createBufferSource();
source.buffer = audioBuffer;
source.connect(context.destination);
source.start(0);
现在,我想要做的是将更多数据(另一个ArrayBuffer)附加到当前正在播放的缓冲区,而避免必须使用onended
回调创建一个新的缓冲区..
有没有办法做到这一点?据我所知,这似乎不受支持。
答案 0 :(得分:4)
你不能这样做。一旦播放缓冲区通过start()传递给音频线程,您就无法对其进行修改。
然而,那说,你绝对不应该使用onended。您应该做的是跟踪最后安排的音频缓冲区和启动它的当前时间,并在time = lastCurrentTimeStart + lastBufferDuration创建并播放一个新的音频缓冲区。您应该能够顺利,不间断地播放。