Непонятная микро задержка при воспроизведение 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'ов существует какая-то микро задержка, которую хотелось-бы убрать.

Аудио, которое я пытаюсь воспроизвести


Ответы (0 шт):