У меня есть несколько работающая система, которая
- Воспроизводит звук на сервере в 1-секундном файле WAV
- Считывает файл WAV и отправляет его через веб-сокет
- Websocket отправляет двоичные данные в AudioContext.decodeAudioData
- Декодированное аудио буферизуется до 4 пакетов (4 секунды)
- Буфер обрабатывается и отправляется в AudioBufferSourceNode.start (время), где время = (clip_count * duration)
Так что, если у меня есть 4 аудиоклипа, вызовы будут выглядеть как
AudioBufferSourceNode.start(0);
AudioBufferSourceNode.start(1);
AudioBufferSourceNode.start(2);
AudioBufferSourceNode.start(3);
Я думал, что это будет идеально запланировать 4 секунды звука, но мне кажется, чтобы столкнуться с проблемами с часами, возможно, потому что я ожидаю, что аудио часы будут идеальными. Я уже использовал узел усиления для удаления щелчков между каждым звуковым клипом (1 секунда), но у меня появляются проблемы с синхронизацией сразу или по прошествии длительного времени. По сути, в худшем случае мой звук звучит так:
---------------------- ----------- ----------- -----------
| 1 second | 1 second | | 950ms | | 900ms | | 850ms |
---------------------- ----------- ----------- -----------
gap gap gap
На этой диаграмме "1 секунда" и "#ms" - это количество воспроизводимого звука. Это всегда должно быть 1 секунда. По мере прохождения звука, похоже, также появляются пробелы. Я предполагаю, что даже когда я говорю звуковому контексту, что файл воспроизводится точно с 0, это нормально, но другие запланированные аудиоклипы могут быть или не быть вовремя.
Это правильно, или в моей системе что-то не так? Есть ли 100% -ная достоверность того, что я мог запланировать воспроизведение аудиоклипа в нужное время или мне нужно добавить в некоторые расчеты значение +/- нескольких мсек при воспроизведении?