Задержки после воспроизведения нескольких последовательных аудиофайлов
В настоящее время я разрабатываю среду типа рации. Запись и ресэмплирование звука теперь работают нормально (спасибо за помощь), воспроизведение работает.. вроде.
Мои данные поступают в виде (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;