Реклама

studio /

Что такое задержка (latency) и откуда она берется?

Превью топика

Не хочешь смотреть рекламу? Зарегистрируйся!

Недавно я писал обзор аудиоинтрефейса ESI UGM96, котором вплотную коснулся темы задержки (latency) аудио-сигнала, которая неизбежна при использовании цифровых устройств. Там я «измерял» задержку основываясь на данных, которые выдавал софт: Logic Pro X и Guitar Rig.

Углубляясь в вопрос, стало понятно, что некоторые звуковые карты могут сообщать неправильные значения задержки в DAW и другие программы, поэтому задержку стоит измерять отдельно. Забегая вперед, скажу, что есть определенная методика измерения латенси, есть даже специальный тестовый софт под Win. Прежде чем приступить непосредственно к описанию методики измерения задержки, я бы хотел поподробней остановиться на более общем вопросе: «Что же такое latency? Откуда она берётся?» Есть еще самый главный вопрос: «И какая задержка приемлема?», но, когда я писал эту статью, я понял, что ответ на этот вопрос довольно широк, неоднозначен. В общем, ждите еще одной статьи. Точнее, как минимум 2х. В одной мы поговорим о том, как же-таки измерить задрежку (latency), а в другой поговорим, о том какая задержка приемлема.

Собственно, сегодня речь как раз про латэнси применительно к аудио-интрефейсам.

Скорость распространения звука
Если вы не прогуливали школьные уроки физики, то должны помнить, что скорость распространения звука (т.е. скорость распространения упругих волн) в воздухе составляет 331 м/с. Нетрудно подсчитать, что за одну 1мс звук проходит расстояние равное 0,331 м. Запомним эту цифру, она нам пригодится в будущем для оценки величины латенси.

Распространение звука

Нетрудно догадаться, что ВСЕ звуки, которые мы слышим доходят до нашего уха с определенной задержкой, которая зависит от того, насколько далеко находится источник звука от уха слушателя.

Теперь представим себе, источник воспроизводит один и тот же короткий звук с определенным временным промежутком. Так вот, человек будет различать звуки, как раздельные, если между ними прошло от 20 мс до 30 мс. Если один звук отстоит от другого на интервал менее 10 мс, то большинство людей будут думать, что звук вовсе не прерывался. На интервале от 12 мс до 15 мс, человек не способен различить два отдельных звука, но будет это чувствовать, что что-то тут не так. Конечно, конкретные цифры будут индивидуальны для каждого человека, но в среднем – примерно так.

Исходя из вышесказанного, можно сделать вывод, что верхняя граница латенси при работе со звуком на компьютере – это 12 мс. И для справки, 12 мс – это тоже самое, как если бы источник звука находился от вас на расстоянии 3,97 м.

12 мс — цифра довольно спорная, но об этом подбробней будем говорить в следующей статье.

Чем плоха задержка?

Представим довольно распространенную и очевидную ситуацию. Вы играете дома в компьютер через Guitar Rig, например. Так вот, в этом случае мы имеем дело полной задержкой. И вот представьте себе, что задержка у нас больше 12 мс. В этом случае, мы чувствуем или даже слышим, что между тем, как мы дёрнули струну на гитаре и тем, как мы её услышали в наушниках, прошло какое-то время. Это, мягко говоря, некомфортно, особенно при переходе с полностью аналоговой аппаратуры. Впрочем, «порог комфорта» тут сугубо индивидуален – кому-то все хорошо и при 17 мс задержки, а кому-то некомфортно и при 10 мс.

В общем, представьте себе, что вы играете на старом, раздолбанном пианино, к которого есть дефект. Большой дефект, надо сказать, — когда вы нажимаете клавишу, молоточку нужно время в три раза больше обычного, чтобы ударить по струне. Возможно вы всё еще сможете сыграть свои любимые этюды Шопена или соло Professor Longhair, но вот «ощущения» будут уже не те, потому что вам придется компенсировать задержку молоточка.

Или вот наглядный пример с барабаном.

Задержка звука

Задержка звука


Это была первый, довольно понятный и очевидный вред от задержки. Есть же и менее очевидный, но от этого не менее неприятный побочный эффекты от латенси. О втором вредном (да и вредном ли?) аспекте лэтанси мы поговорим позже.

Задержка (latency) при использовании цифрового интерфейса
Полная задержка (roundtrip latency) – это то время, которое нужно сигналу, на то, что бы пройти путь от аналогового входа аудио интерфейса (на который поступает сигнал с микрофона, гитары итп), через аналого-цифровой преобразователь, в DAW, обратно в интерфейс и в цифро-аналоговый преобразователь, а затем на аналоговый выход интерфейса.

Теперь же давайте поговорим по поподробнее о пути сигнала.

Преобразователи (АЦП/ЦАП)
Первое с чем встречается аналоговый сигнал на входе в наш интерфейс – это аналого-цифровой преобразователь, который, собственно, и делает из аналога набор битов и байтов. Этот довольно сложный процесс в среднем занимает около 0,5 мс. Не забываем, что на другой стороне цепочки стоит цифро-аналоговый преобразователь, который делает из битов и байтов аналоговый сигнал, то есть еще примерно 0,5 мс.

Буферы
Буфер – это специальная область памяти, которая используется для временного хранения (накопления) информации, перед тем, как передать её из одного места в другое. Буферы используются, когда существует разница между скоростью получения данных и скоростью их обработки, или в случае, когда эти скорости переменны. Буфер – это неотъемлемое зло с точки зрения скорости обработки, но, с другой стороны, именно он делает так, что данные обрабатываются точно и без различных артефактов и искажений.

Roundtrip latency. Задержка аудиосигнала

В нашей цепи сигнал буферизируется несколько раз:

  • Входной буфер шины USB
  • Входной буфер ASIO или Core Audio (Driver)
  • Выходной буфер ASIO или Core Audio (Driver)
  • Выходной буфер шины USB

Быстрые драйверы и медленные драйверы
Самая большая переменная, влияющая на общую задержку — это производительность (скорость) драйвера.

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

Именно поэтому, один и тот же интерфейс может давать разную задержку, в зависимости от операционной системы и производителя материнской платы, точнее контроллера, отвечающего за шину USB.

Одна из основных задач разработчиков аудио-интерфейсов – это обеспечить лучшую производительность драйверов (следовательно, меньшую задержку) при сохранении стабильности всей системы.

Разработчики драйверов для аудио-интерфейсов позволяют нам менять размер буфера. Уменьшая буфер в настройках драйверов, либо в настройках любимой DAW, мы можем уменьшить общую задержку, но увеличить нагрузку на процессор, либо – наоборот, увеличивая буфер, мы увеличим общую задержку, но уменьшим нагрузку на процессор и сделаем систему стабильнее (это может быть актуально при работе на больших и сложных проектах в DAW).

Давайте поговорим об этом поподробнее.

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

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

Представьте ситуацию. Вы играете на своём любимом виртуальном инструменте и пытаетесь дописать еще одну партию к проекту уже почти законченной композиции. При этом одновременно играют все 42 дорожки, причем на каждой дороже еще понавешано плагинов. Ну и, собственно, вот оно: звук начинает искажаться, вы слышите щелчки и дёргания звука, а то и того хуже — DAW виснет и/или падает, т.к. процессор сильно перегружен. Таким образом, получается, что выставленный вами буфер размером 64 сэмла, который бы в обычных условиях давала приемлемую величину задержки при нормальном быстродействии компьютера, в условиях сложного проекта, слишком сильно нагружает ваш компьютер.

Если увеличить размер буфера, то, возможно, ваша DAW перестанет виснуть и падать, и даже пропадут щелчки и прочие звуковые артефакты. Но не все так просто.

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

Давайте еще разок вернемся к примеру с пианино. Теперь у нас отличный новый рояль, который не нуждается в каком-либо ремонте. Для простоты давайте примем, что у нас нет механической задержки между тем, как мы ударили по клавише и тем, как молоточек ударил по струне. Скорость звука в воздухе 331 м/с. Это значит, что если мы находимся на расстоянии 1 м от молоточка, то звук до нас дойдет примерно за 3 мс. Так как же получается, что задержка в 3 мс тут нам совершенно некритична, а при выставлении буфера в 2,9 мс (128 сэмплов на 44,1 кГц) в DAW делает фактически невозможным мониторинг гитары, пропущенной через любимый моделирующий плагин?

Расшифровываем латенси
Как мы уже говорили выше, полная задержка — это то время, которое требуется сигналу (например, гитарному соло), чтобы пройти от аналогового выхода аудио-интерфейса, через АЦП, потом в DAW, снова в интерфейс, через ЦАП на аналоговый выход. Мы можем влиять лишь на один параметр в этой цепочке – входную задержку, то есть то время, которое нужно сигналу, чтобы попасть в DAW.

Именно тут в дело вступает драйвер, точнее его производительность. В любом изохронном драйвере (а именно такой используется, как в USB, так и в Fire Wire при передачи потоковой информации, например, аудио сигнала) есть два слоя. Второй слой обеспечивает буфер для Core Audio или ASIO приложений, например, DAW. И это именно тот слой, которым мы можем управлять.

Чтобы всё еще больше запутать, обычно, нам нельзя выставлять размер буфера во временной величине (например, 2,9 мс), вместо этого у нас есть список, привязанный к сэмплам, и мы можем выбирать числа из списка (например, 128 сэмплов). Всё это делает вычисление времени задержки более сложным. А большинство музыкантов скорее запомнят все тексты Rush, нежели то, что 512 сэмплов примерно равно 11-12 мс задержки на частоте дискретизации 44,1 кГц! (Чтобы получить миллисекунды из сэмплов нужно просто разделить число сэмплов на частоту дискретизации. Например, 512 сэмплов / 44100 Гц = 11,6 мс)

Размер буфера, который мы устанавливаем в DAW или настройках драйверов относится сразу и к входному и выходному буферу. То есть, если вы выставили буфер в 128 сэмплов, то и входной и выходной буфер будут равны 128 сэмплов. Таким образом, в самом лучшем случае фактическая задержка будет в два раза больше, выставленного нами буфера. Однако, самый лучший случай – это не всегда то, о чём стоит говорить в контексте передачи аудио данных драйвером.
Например, если в настройках ASIO вы выставили буфер в 128 сэмплов, то только выходная задержка может быть равной 256. В таком случае, может получиться так, что два буфера дадут общую задержку в 384 сэмпла. Что означает, что наши 2,9 мс (128 сэмплов) превратятся в 8,7 мс на частоте 44,1 кГц.

У аналого-цифровых и цифро-аналоговых преобразователей тоже есть своя задержка, т.к. они тоже имеют свой буфер. Эта задержка обычно составляет от 0,2 мс до 1,5 мс в зависимости от качества преобразователя. 1 мс – это не так много и вряд ли повлияет на качество испольнения, но это всё равно вносит вклад в общую задержку. Для нашего примера с буфером в 128 сэмплов, 0,5 мс на каждый преобразователь добавляют к общей задержке 1 мс, то есть из 8,7 мс мы получаем 9,7 мс. Но все равно, 9,7 – это всё еще ниже порога человеческого восприятия и не должно ни на что влиять.

Так откуда берется дополнительная задержка?
Причина кроется в том таинственном первом слое аудио-драйвера, про который обычно никто не говорит. Этот нижний слой (уровень) не имеет отношение ни к аудио-сэмплам, ни к частоте дискретизации. В случае с USB, там есть синхронизатор времени, который называется USB Bus Clock (Синхронизатор шины USB). (В случае с Fire Wire все примерно так же, но тут мы говорим только про USB).

Синхронизатор времени шины USB использует 1-миллисекундные интервалы. По этому интервальному синхронизатору возникает прерывание, инициирующее обработку аудио. Проблема в том, что большинство аудио-производителей, сталкиваясь с этим, не обеспечивают управление над этим низкоуровневым буфером, и пользователи не могут настроить драйвер так точно, как бы им этого хотелось. Объяснение отсутствию доступа к этому уровню довольно простое – пользователь может установить слишком маленький буфер, что может вызвать обрушение драйвера.

Чтобы этого не произошло, большинство производителей фиксирует буфер на величину примерно в 6 мс. В зависимости от аудио-драйвера это даёт нам 6 мс входной задержки и 6 мс выходной задержки. Но тут происходит ровно тоже, о чём мы говорили применительно к ASIO-драйверу, — даже если выставлен одинаковый размер буфера на вход и на выход, выходная задержка может отличаться от входной.

Например, для простоты возьмём, что у латенси в обоих направлениях у нас 6 мс. И вот наша загадка решена – в большинстве аудио-интерфейсов получается по крайней мере 12 мс задержки, которая сидит только в драйверах, и это, не считая тех 9,7 мс, о которых мы говорили выше.

Таким образом получаем, что выставляю задержку в DAW на уровне 2,9 мс, мы получаем общую задержку в 21,7 мс. (Все цифры в этом примере усредненные. Конечно, некоторые разработчики оптимизируют драйверы, чтобы уменьшить эти цифры).

Как же решить проблему латенси?
Многие производители аудио-интерфейсов делают на своих устройствах функцию прямого мониторинга. Это когда сигнал отводится сразу на выход еще до АЦП, да плюс к этому к нему подмешивает выходной сигнал с компьютера. Да, в этом случае задержки никакой нет и мы слышим, минусовку и свой сигнал, и это – очевидный плюс. Минус же тут в том, что сигнал, например, от гитары мы слышим «как есть». Если мы решили записать гитару «в линию», а потом обработать её различными плагинами, то на выходе прямого мониторинга мы будем слышать чистый и тусклый гитарный звук. Никакого вам дж-дж, компрессии или панорамирования. Ну и, само собой, функция прямого мониторинга бесполезна для тех, кто хочет заниматься, используя Amlitube или Guitar Rig, например.

Прямой мониторинг

Другие производители встраивают DSP в свои интрефейсы. С помощью этих специальных процессоров можно обрабатывать входной сигнал еще до того, как он попал в шину USB и далее. Управление эффектами обычно производится с панели управления драйверами/микшерно панели, т.е. программно с компьютера. Это уже лучше, но все равно не то. Обычно карты с набортным чипом несколько дороже, да и набор эффектов не поражает воображение (хотя это больше зависит от цены).

Многие производители пошли дальше (например, PreSonus или Line6 с их технологией Tone Direct). Они не заводят сигнал в DAW, а для обработки и мониторинга используют свои приложения, минуя прослойку ASIO. Это кстати, отлично работает в случае Line 6 и использования их отдельного приложения Pod Farm. Ну, а если, плюс к этому еще и поработать над оптимизацией драйвером, то и вовсе всё становится неплохо.

Минуя ASIO

К слову, те же PreSonus, говорят, что на современных компьютерах буфер шины USB можно уменьшить вплоть до 1 мс. Но это в идеале, в среднем – это 2–4 мс.

Ну вот теперь, вроде всё или почти всё понятно с латенси.

Жаль, конечно, что такой подход не работает с любым аудио-интерфейсом и Guitar Rig, например. Но насколько я понимаю, тут нужно чтобы разработчик сам писал и драйвер, и приложение с эффектами и эмуляцией.

Вывод
Ну а в целом, можно сделать вывод, что, во-первых, от задержки все равно никуда не деться, а во-вторых, общая задержка при использовании интерфейса с грамотно оптимизированными драйверами в части USB и ASIO (Core Audio) может дать на круг задержку менее 10 мс, а то и чуть ли не вдвое меньше на частоте дискретизации 44.1 кГц. Что, конечно, не может не радовать, т.к. общая задержка 7-10 мс лично для меня абсолютно незаметна.

PS: В следующей статье мы поговорим о том, какая-таки задержка приемлема? Ответ не так однозначен, как об этом можно подумать. Следите за новостями. =)

[В основном по материалам PreSonus]

Не хочешь смотреть рекламу? Зарегистрируйся!

  • CraSS,  
  • 24 апреля 2015, 18:20,  
  • +2

Комментарии (5)

RSS свернуть / развернуть
Александр, по-моему это шедевр, я даже прочитать все с первого раза не успел. Вопрос возник, возможно в гугле тонны информации по этому поводу, которую я не удосужился посмотреть, почему на маке в гараж бенде при игре на миди клавиатуре можно обойтись без внешней звуковой карты?
0
Ну, наверно, потому, что встроенная в мак карта тоже использует драйвера Core Audio, которые уже по дефолту с низкой задержкой.

Плюс, клава подключается по USB, так что проблем не вижу.

Думаю, что если для любой встроенно звуковухи на PC поставить ASIO4ALL, то тоже можно обойтись без внешней звуковой карты. Но тут я не знаю, не проверял.

Кроме того, в случае с миди-клавы у нас только выходная задержка, входной нет, как при подключении гитары, например. Так что с лэтенси в этом случае все лучше.
+1
Язь!
0
Монументально!
0
Программа для замера задержки
www.centrance.com/downloads/ltu/
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.