Задержки после воспроизведения нескольких последовательных аудиофайлов

В настоящее время я разрабатываю среду типа рации. Запись и ресэмплирование звука теперь работают нормально (спасибо за помощь), воспроизведение работает.. вроде.

Мои данные поступают в виде (WAV-) блобов, так что вот что я делаю:

audioPlay(blob)
{
        var fileReader = new FileReader();
        fileReader.onload = function() {
                theContext.decodeAudioData(this.result, function(buffer) {
                        var source = theContext.createBufferSource(); 
                        source.buffer = buffer;
                        source.connect(theContext.destination);
                        source.start(0);
                        });
                };
        fileReader.readAsArrayBuffer(blob);
}

Но каждое новое аудио добавляет небольшую задержку запуска, которая увеличивается с каждым новым аудио. После нескольких аудио задержка прибавляет почти 2-3 секунды. Ведение журнала не показывает каких-либо задержек, программа проходит нормально до.source.start.

Есть идеи?

2 ответа

Микаэла, это больше похоже на то, что это может быть проблемой в источнике - вы уверены, что каждый входящий BLOB-объект корректен (имеет правильную длину и имеет звук в начале?) Похоже, что вы просто добавляете новый запись в конец пустого буфера на этом конце. Если бы не эта конкретная проблема, я бы посмотрел на входящий аудиоблок - может быть, по некоторым причинам декодирование слишком дорого? (То есть, если у вас есть кумулятивная задержка в 2-3 секунды, вы сможете по журналу определить, находится ли задержка в получении данных, их декодировании или в самом буфере.

Не начинайте воспроизведение с 0 для каждого семпла. Вместо этого отследите время.

 if (nextTime == 0) { nextTime = context.currentTime }
 source.start(nextTime);
 nextTime+=source.buffer.duration; 
Другие вопросы по тегам