正在将数据追加到已存在的AudioBuffer对象

Appending data to an already existing AudioBuffer object

本文关键字:存在 AudioBuffer 对象 数据 追加      更新时间:2023-09-26

我希望将数据附加到已经使用web音频播放的现有AudioBuffer中。


收到要播放的音频数据后,我创建一个AudioBuffer,然后将数据分配给ArrayBuffer响应。

    var audioBuffer = context.createBuffer(1, audioToPlay.length, 16000);
    audioBuffer.getChannelData(0).set(audioToPlay);

然后我创建一个缓冲区源节点,并将音频缓冲区连接到web音频上下文。

    var source = context.createBufferSource();
    source.buffer = audioBuffer;
    source.connect(context.destination);
    source.start(0);

现在,我想做的是将更多数据(另一个ArrayBuffer)附加到当前正在播放缓冲区的,同时避免必须使用onended回调来创建新的缓冲区。。

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

您不能这样做。一旦播放缓冲区通过start()移交给音频线程,就不能修改它

然而,也就是说,你绝对不应该使用onended。您应该做的是跟踪计划的最后一个音频缓冲区和它启动的currentTime,并在time=lastCurrentTimeStart+lastBufferDuration创建和播放一个新的音频缓冲区。您应该能够获得流畅、不间断的播放。