将数据附加到现有的AudioBuffer对象

时间:2014-09-26 21:01:20

标签: javascript audio web-audio

我希望将数据附加到正在使用网络音频播放的已经现有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回调创建一个新的缓冲区..

有没有办法做到这一点?据我所知,这似乎不受支持。

1 个答案:

答案 0 :(得分:4)

你不能这样做。一旦播放缓冲区通过start()传递给音频线程,您就无法对其进行修改。

然而,那说,你绝对不应该使用onended。您应该做的是跟踪最后安排的音频缓冲区和启动它的当前时间,并在time = lastCurrentTimeStart + lastBufferDuration创建并播放一个新的音频缓冲区。您应该能够顺利,不间断地播放。