Что такое AudioContext currentTime для первого записанного сэмпла? - PullRequest
0 голосов
/ 01 ноября 2018

Используя API Web Audio, я создаю bufferSource и использую новый MediaRecorder для одновременной записи. Я записываю звук, исходящий из моих динамиков, со встроенным микрофоном.

Если я воспроизведу оригинал и новую запись, между ними будет существенная задержка. (Для меня это звучит примерно через 200 мс.) Если я console.log о значении globalAudioCtx.currentTime в момент вызова двух методов «start», эти два числа абсолютно совпадают. Значения Date.now () также точно такие же.

Где вводится эта задержка? Задержка из-за скорости звука примерно в 1000 раз меньше, чем то, что я слышу.

Короче говоря, как я могу заставить эти два семпла воспроизводиться в одно и то же время?

Я работаю в Chrome на Linux.

1 Ответ

0 голосов
/ 01 ноября 2018

Где вводится эта задержка?

Как на воспроизведение, так и на запись.

Ваша звуковая карта имеет буфер, и программное обеспечение должно записывать аудио в этот буфер небольшими порциями за раз. Если программное обеспечение не может идти в ногу, слышен прерывистый звук. Таким образом, размеры буфера устанавливаются достаточно большими, чтобы этого не происходило.

То же самое относится и к концу записи. Если буфер недостаточно велик, записанные аудиоданные будут потеряны, если программное обеспечение не сможет прочитать из этого буфера достаточно быстро, что приведет к прерывистому и потерянному звуку.

Браузеры не используют режим работы с самой низкой задержкой для вашей звуковой карты. Вы можете применить некоторые настройки (такие как использование WASAPI и эксклюзивный режим в Windows с Chrome), но вы находитесь в зависимости от разработчиков браузеров, которые не разработали это, имея в виду таких людей, как вы и я.

Независимо от того, насколько низок вы, хотя в размере буфера, все равно будет отставание. Такова природа компьютерного цифрового звука.

как я могу заставить эти два семпла воспроизводиться в одно и то же время?

Вам придется отложить один из семплов, чтобы привести их в синхронизированное состояние.

...