Как получить точную метку времени начала записи звука с помощью PortAudio? - PullRequest
5 голосов
/ 25 октября 2019

Мы используем PortAudio для записи звука в нашем электронном приложении. В качестве оболочки узла мы используем naudiodon.

Приложение должно записывать как аудио, так и видео, но с использованием разных источников. Аудио, как уже было сказано, записывается с помощью Port Audio, с дополнительной логикой приложения сверху. Видео, с другой стороны, записывается с помощью стандартного API MediaRecorder с его собственными форматами, свойствами и кодеками.

Мы используем событие «onstart» для отслеживания фактического начала видео и для синхронизации аудио и видео, мы также должны знать точное время запуска аудио.

Проблема в том, что мы не можем определить точную метку времени запуска аудио. Какой должен быть правильный способ сделать это?

Вот что мы попробовали:

1. Первый вариант - прослушивать события portaudio.AudioIO, такие как «data» и «readable». ». Они вызываются, как только у PortAudio появляется новый блок данных, поэтому отслеживание самого первого блока без его длины в миллисекундах приведет к приблизительному началу звука.

2. Второй вариант - добавить записываемый канал в AudioIO, иделайте то же самое, что и с событиями.

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

Фактический запуск аудио и первый выпуск чанка могут отличаться, вдиапазон около 50 - 500 мс с длиной фрагмента ~ 50 мс. Так что порции могут иногда буферизоваться, а иногда нет. Есть ли способ отследить фактическое время начала первого чанка? Мне не удалось найти какую-либо релевантную информацию при проверке аудиодокументов порта.

Может быть, есть какие-то другие способы продолжать использовать PortAudio и записывать видео по отдельности, но, наконец, добиться той же желаемой функции - синхронизировать их вместе?

PortAudio 19.5, Naudiodon 2.1.0, Electron 6.0.9, Node.js 12.4.0

...