В чем разница между «baseLatency» и «outputLatency» при вызове AudioBufferSourceNode.start()?Javascript

Форум по Javascript
Ответить
Anonymous
 В чем разница между «baseLatency» и «outputLatency» при вызове AudioBufferSourceNode.start()?

Сообщение Anonymous »

Я работаю над браузерным приложением Javascript, которое требует очень точной синхронизации воспроизведения звука с помощью метода AudioBufferSourceNode.start(). Я не уверен, как мне следует относиться к «baseLatency» и «outputLatency» для достижения своей цели. Сначала я опишу свою цель, а затем попытаюсь ответить на свой вопрос, исходя из моего нынешнего понимания этих двух задержек. Однако я ищу подтверждение/исправление своей интерпретации.

Я генерирую звуковой сигнал, используя AudioBufferSourceNode в Javascript. Я хочу, чтобы этот сигнал был «услышан» человеком-слушателем ровно через N секунд в единицах AudioContext.currentTime. Заметьте, я не говорю «играл», а скорее «слышал». Таким образом, я хочу учитывать задержки так, чтобы выводимый звук выстраивался ровно в N секунд на человеческую интерпретацию.
Мои текущие интерпретации «baseLatency» и «outputLatency» следующие:
  • «baseLatency» — это количество времени, необходимое для передачи аудиосигнала из Javascript в аудиобуфер ОС. По сути, если бы я выдал звуковую команду в Javascript во время «сейчас», она была бы получена звуковым буфером моей ОС в «сейчас + baseLatency». НО - если бы я вызвал AudioBufferSrcNode.start(будущее время), тот факт, что я планирую воспроизведение звука в достаточное время в будущем, эта baseLatency по существу игнорируется.
  • 'outputLatency' - это количество времени, в течение которого звуковой буфер ОС будет слышен слушателем. То есть, если предположить, что ОС уже получила мой сигнал и решила воспроизвести его, то потребуется «outputLatency», пока звук не пройдет через динамики.
Итак, вот моя текущая стратегия достижения моей цели с использованием моих интерпретаций: моя функция JavaScript должна «запланировать» воспроизведение моего звука в какой-то момент в будущем, чтобы компенсировать «baseLatency» с помощью метода .start(when). По сути, если бы я планировал заранее, звук попадал бы в ОС независимо от baseLatency. Тем не менее, мне все равно придется корректировать время «когда», чтобы учесть выходную латентность. Таким образом, я должен запланировать свой звук: .start(N - outputLatency).
Подводя итог, я рассматриваю свою baseLatency как меру того, насколько рано мне нужно запустить мой метод .start() относительно N, а затем мне нужно использовать outputLatency для настройки значения, с которым он воспроизводится (т.е. N - outputLatency)

Подробнее здесь: https://stackoverflow.com/questions/798 ... calling-au
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»