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

Nir*_*kku 3 javascript audio web-audio-api

我期待数据追加到已经存在的AudioBuffer正在被使用的网络音频播放。


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

    var audioBuffer = context.createBuffer(1, audioToPlay.length, 16000);
    audioBuffer.getChannelData(0).set(audioToPlay);
Run Code Online (Sandbox Code Playgroud)

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

    var source = context.createBufferSource();
    source.buffer = audioBuffer;
    source.connect(context.destination);
    source.start(0);
Run Code Online (Sandbox Code Playgroud)

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

有什么办法吗?据我所知,这似乎不受支持。

cwi*_*lso 5

你不能做这个。通过start()将播放缓冲区移交给音频线程后,您将无法对其进行修改。

但是,也就是说,您也绝对不应使用onended。您应该做的是跟踪计划的最后一个音频缓冲区及其启动的currentTime,并在时间= lastCurrentTimeStart + lastBufferDuration的情况下创建并播放新的音频缓冲区。您应该能够获得流畅,连续的播放。

  • 感谢您的验证。所以听起来我还必须跟踪玩家的状态?(即,如果用户暂停,如果播放速率不同等) (2认同)