Как измерить задержку записи аудиопотока UserMedia? - PullRequest
0 голосов
/ 23 апреля 2020

Я хотел бы найти точную задержку, которую MediaRecorder берет для вычисления и сохранения MediaStream, предоставляемого методом getUserMedia. Есть ли способ узнать или вычислить его?

Ниже, я передаю constraints, где свойство audio принимает тип ConstrainDouble ideal value (хотя не реально c, в идеале я бы вообще не хотел задержек):

const constraints = {
  video: false,
  audio: {
    latency: {
      ideal: 0
    }
  }
}
const stream = await navigator.mediaDevices.getUserMedia(constraints)
const mediaRecorder = new MediaRecorder(stream)

Свойство ideal простительно и не выдает ошибку, если браузер + аппаратное обеспечение + userMachine не поддерживает его, и мы можем проверьте:

navigator.mediaDevices.getSupportedConstraints().latency

Хотя описанные выше методы демонстрируют самые основы, это тот же самый метод или подход, который я использую при записи stream data с устройства, например microphone.

Для моего текущего варианта использования у меня есть метроном или фоновая дорожка, которая воспроизводится во время записи дорожки. Теоретически, когда треки играют вместе, не должно быть никаких задержек, в противном случае они будут отключены (предположим, что бас-гитара на некоторых барабанах записывается, когда гитара записывается во время прослушивания ударных, на или в ритме, но при воспроизведении записи, вместо того, чтобы начинать с первого такта, он начинает немного выключаться или, скажем, со второго такта).

На этот раз и для компенсации я выбрал input range, пользователь управляет этим, чтобы установить смещение для компенсации задержки. Однако цель состоит в том, чтобы определить это автоматически, а не полагаться на конечного пользователя!

enter image description here

В качестве альтернативы, учитывая, что нет способа определить Задержка с помощью собственных методов, доступных в браузере, я полагаю, что может быть способ рассчитать коррекцию, как описано здесь (https://manual.audacityteam.org/man/latency_test.html), но как рассчитать ее в Javascript или WebAssembly? Как найти и идентифицировать записанный сигнал? Есть еще варианты?

...