Непонятная микро задержка при воспроизведение audioBufferSourceNode'ов
Начну с идеи. Хочу сделать механизм, похожий на воспроизведение аудио ВК.
У меня есть вебсокет сервер, написанный на Django-Channels. Сервер возвращает мне некий аудио файл чанками по 6144 байта.
Сначала, покажу переменные, которые использую в коде:
const chatSocket = new WebSocket(...);
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var source;
var play = document.querySelector('#play');
var audioQueue = [];
Далее, при получении сообщения от сервера (очередного чанка) я его декодирую, создаю новый буффер, присваиваю некоторые атрибуты и кладу его в очередь:
chatSocket.onmessage = function(e) {
e.data.arrayBuffer().then(buffer => {
audioCtx.decodeAudioData(buffer, (x)=>{
source = audioCtx.createBufferSource();
source.buffer = x;
source.connect(audioCtx.destination);
audioQueue.push(source);
})
})
}
После того как сервер отдал весь файл, остается произвести все накопленные audioBufferSourceNode'а:
play.onclick = function() {
var whenStart = 0;
for (let [index, audioBufferSourceNode] of audioQueue.entries()) {
whenStart = audioBufferSourceNode.buffer.duration + whenOffset;
audioBufferSourceNode.start(when=whenOffset, offset=playOffset);
}
}
Код выше прекрасно выполняется, но, при воспроизведение audioBufferSourceNode'ов существует какая-то микро задержка, которую хотелось-бы убрать.
Аудио, которое я пытаюсь воспроизвести