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

2023-12-30

我正在寻找将数据附加到already现存的音频缓冲区 https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createBuffer正在使用网络音频播放。


收到要播放的音频数据后,我创建一个音频缓冲区 https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createBufferSource然后将数据分配给 ArrayBuffer 响应。

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

然后我创建一个缓冲源节点 https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createBufferSource并将音频缓冲区连接到网络音频上下文。

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

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

有什么办法可以做到这一点吗?据我所知,这似乎不受支持。


你不可以做这个。一旦播放缓冲区通过 start() 移交给音频线程,您就无法修改它。

然而,也就是说,你绝对不应该使用 onend。您应该做的是跟踪最后安排的音频缓冲区及其启动的当前时间,并在时间=lastCurrentTimeStart+lastBufferDuration 时创建并播放新的音频缓冲区。您应该能够获得流畅、不间断的播放。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将数据附加到已存在的 AudioBuffer 对象 的相关文章