Как рассчитать задержку звука

от admin

Задержка звукового сигнала: что это и как она возникает? Добавлено: Фев 26, 2020

Современные компьютеры – идеальные устройства записи. Они могут работать с большим количеством аудио и MIDI-треков, чем нам когда-либо понадобится, а управление и настройка звука с компьютера шагнула далеко вперед. Но важно понимать, что изначальной задачей ПК была вовсе не работа со звуком. Существуют сложности, не свойственные при записи на ленту. Самой большой из таких проблем является задержка: временная разбежка между записываемым звуком и его прослушиванием через наушники или мониторы.

Как образуется задержка звука

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

Затем устройство, называемое аналого-цифровым преобразователем (АЦП), измеряет или семплирует колеблющееся напряжение с регулярными интервалами – 44,100 раз в секунду (в случае звука с CD — качеством) и сообщает об этих измерениях в виде последовательности чисел.

Секвенция чисел упаковывается в соответствующий формат и отправляется по электрической линии на компьютер. Программное обеспечение на ПК записывает эти данные в память и на диск, обрабатывает их и «отдает» обратно, чтобы их можно было преобразовать обратно в аналоговый сигнал. Такой процесс выполняется с помощью цифро-аналогового преобразователя (ЦАП).

Это довольно сложная последовательность действий, которая зависит от скорости и надежности передачи сигнала. Идеальная ситуация выглядит следующим образом: каждая секвенция, полученная с АЦП отправлена на компьютер, сохранена и отправлена обратно на ЦАП незамедлительно. Но на практике такая схема невозможна. Даже малейшая задержка при отправке хотя бы одного из миллионов семплов в аудиозаписи может привести к дроп-ауту сигнала.

Буферизация сигнала

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

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

Задержка становится слышимой при интервале в несколько миллисекунд.

Настройка размера буфера

Размер буфера обычно измеряется в количестве семплов, хотя некоторые интерфейсы предлагают настройку в миллисекундах. Варианты, как правило, увеличиваются в 2 раза: типичная звуковая карта может предлагать настройки 32, 64, 128, 256, 512, 1024 и 2048 семплов.

Вы можете рассчитать теоретическую задержку конкретного варианта размера буфера, удвоив это число (чтобы отразить обработку на входе и выходе) и разделив результат на частоту дискретизации. Так, например, при стандартной частоте дискретизации 44,1 кГц и размере буфера в 32 семпла, задержка составит 1,45 мс.

(32 x 2) / 44100 = 1,45

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

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

Какая допупстимая длина задержки?

Простого ответа на этот вопрос нет. Звук распространяется со скоростью примерно 0,3 метра в миллисекунду. Поэтому задержка в 10 мс должна ощущаться на расстоянии 3 метров от источника звука, а гитаристы на сцене часто находятся на значительно большем расстоянии от усилителей. Бывают ситуации, когда слышны даже гораздо меньшие задержки. Например, когда музыкант слышит одновременно прямой и записанный звук, любая задержка вызовет гребенчатую фильтрацию между ними. Поэтому, принцип простой: чем меньше – тем лучше.

При использовании MIDI контроллера для игры на виртуальном синтезаторе, звук, который генерируется на компьютере, должен проходить только через выходной буфер. Теоретически это должно означать, что влияние буферизации звука на задержку уменьшается вдвое. Но на практике передача MIDI -данных на компьютер также увеличивает задержку в системе. Объем данных незначителен по сравнению с аудио, но их также необходимо генерировать на MID I инструменте, передавать на компьютер (обычно по USB ) и подавать на виртуальный инструмент.

Все эти шаги занимают небольшое количество времени, но существует вероятность джиттера, при котором задержка не постоянна, а плавает на несколько миллисекунд. Задержка MIDI вряд ли будет заметна, если вы играете на виртуальном синтезаторе партии струнных с пэдов или клавиатуры. Но это может быть проблемой при запускаете семплов ударных. Кроме того, любая система, в которой используется обнаружение высоты тона в MIDI (например, MIDI -гитара) также склонна к заметной задержке на низких нотах, поскольку ей необходимо «видеть» весь цикл сигнала, чтобы обнаружить высоту тона.

Задержка звука Android — как рассчитать задержку

Я понимаю, что есть некоторые проблемы, из-за которых Android не может воспроизводить звук с низкой задержкой и имеет задержку> 100 мс для всего (ну. на самом деле вибрации быстрее, чем звук. Позор вам!).. но есть ли какая-то возможность выяснить, насколько раньше мне нужно запустить звук, чтобы быть вовремя?

например как рассчитать задержку звука?

Я создаю ритм-игру, и мне нужно играть «тики» синхронно с музыкой. Я использую libGDX Sound — например, звуковой пул — play () сейчас.

Вы ее как-то решили? Я только нашел много тем, указывающих на то, что звуковая система Android очень плохая (на некоторых устройствах довольно серьезно сломана): например badlogicgames.com/forum/viewtopic.php?p=60775#p60775. — monnef

Нет, я не делал. Нет обходного пути для задержки, и я не нашел способа выяснить значение задержки. Пользователь должен калибровать вручную 🙁 — Marek Halmo

1 ответы

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

Несмотря на то, что задействовано много переменных (микрофон также будет иметь задержку), вы можете заставить устройство калибровать себя, постоянно пытаясь угадать, сколько времени потребуется, чтобы звук был обнаружен, и излучая его снова и снова, пока ваше предположение не будет получено. «тонкая настройка».

Правда о цифровой задержке в музыке. ⁠ ⁠

Оригинал материалов для этого поста можно найти в следующей статье:

Я не стану прямо переводить, но постараюсь кратко и понятно изложить русским языком все что вам нужно о цифровой задержке в музыке.

Много картинок не ждите, ждите много текста, и помните у птиц беда с пунктуацией.

В английском языке слова Latency и Delay на русский переводятся одинаково, и означают задержку. Хотя latency в основном употребляют, когда говорят об аудио задержке. Под аудио задержкой понимают промежуток времени между тем как звук был извлечен и тем моментом в который он попал к вам в уши. Обычно задержка измеряется в миллисекундах (мс).

Если говорить о природной/физической задержке, то вот её пример: Представьте что сидите за пианино и хотите извлечь звук нажатием его клавиши. Что произойдет когда вы её нажмете? Ваш палец нажимает на клавишу, клавиша приводит в движение молоток, молоток бьет по струне, звук от струны путешествует к вашим ушам. Вот промежуток между тем как вы нажали на клавишу и тем как вы услышали ноту и есть задержка.

Эхо — также является природной задержкой звука, с ним чуть посложнее поскольку вы слышите и «исходный» сигнал и задержанный. Ученые, проведя опыты, подсчитали, что задержка менее

10 мс не воспринимается человеческим ухом. В промежутке между 12 и 15 мс вы начнете «чувствовать» эффект задержанного сигнала, и только задержка от 20мс заставит ваш мозг разделить между собой исходный и задержанный сигнал.

Теперь подойдем к цифровой записи, представим что мы пишем злой такой, мощный соляк, на компьютере. В аудиостанции(аудиохост, DAW) играет минусовка, стучит метроном, гитара подключена к интерфейсу и включен мониторинг (прослушка) сигнала через аудиостанцию. Но вот беда, мы играем как будто с каким то эхом, звук который мы слышим сильно запаздывает от наших пальцев, как правило исполнителя это сильно дизориентирует и записать партию в таких условиях практически невозможно. Мы кидаемся к настройкам нашего аудио интерфейса, видим загадочное значение какого то буфера в 128 семплов, и подпись в 2.9 мс задержки.

Но постойте, стоя на сцене в метре от усилителя, при скорости звука 340 м/с, мы будем слышать наш звук с задержкой минимум 3мс! Так почему на сцене 3 мс мы не замечаем, а в студии 2.9 мешают нам нормально работать?

Все не так как кажется

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

Мы начинаем с того момента как звук нашей гитары или вокала например, оказывается на аналоговых входах нашего интерфейса.

Далее наш сигнал попадает в аналого-цифровой преобразователь (АЦП) аудио интерфейса, который занимается тем что преобразовывает непрерывную звуковую волну в массив битов и байтов. Процесс невероятно сложен, но занимает немногим более половины миллисекунды. Забегая вперед скажу,что на другом конце всей этой цепочки звук будет поступать на цифро-аналоговый преобразователь вашего интерфейса (ЦАП), который в свою очередь будет преобразовывать дискретный сигнал в электрические импульсы, для того чтобы вы могли услышать его на своих динамиках или наушниках. Ещё пол миллисекунды или типа того.

Читать:
Имя wsl не распознано как имя командлета

Далее за дело берется ваш ASIO (в случае windows) или CoreAudio (Mac) драйвер. Он осуществляет «доставку» сигнала со входа USB в ваш аудиохост и обратно.

Все это «расстояние» сигнал преодолевает путешествуя из одного буфера в другой.

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

*Входной буфер USB шины

*Входной буфер ASIO драйвера

*Выходной буфер ASIO драйвера

*Выходной буфер USB шины

Здесь нам придется ещё раз прерваться, и кратко объяснить зачем вообще эти буферы нужны.

Зачем нужны буферы

Дело в том что «многозадачность» компьютера это всего лишь иллюзия, процессор в один момент времени работает только с какой-то одной задачей, но за счет того что он очень (ОЧЕНЬ) быстро переключается между ними, выполняя то часть одной, то часть другой, кажется что процессы протекают одновременно.

В нашем случае процессор по большей части выполняет задачу по переносу данных с нашего интерфейса в аудиостанцию, и обратно. Так как он не может постоянно этим заниматься, он делает это кусками. Отправил кусок, занялся делом, ещё отправил кусок, ещё чем то занялся. Чем больше размер буфера, тем больше мы можем позволить процессору тратить времени на системные задачи, но вместе с тем мы будем задерживать сигнал. Чем буфер меньше, тем ближе к «реальному времени» будут выполнятся задачи, но это может отрицательно сказаться на стабильности всей системы. А кто, спросите вы, устанавливает размер этих буферов? -драйверы, поговорим о них!

ASIO и CoreAudio драйверы

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

И звук с вашего интерфейса ваш хост принимает также посредством драйвера. Все эти драйверы пишут инженеры фирмы, которая ваш аудио интерфейс выпустила. Различают два «слоя» таких драйверов. Первый «слой» взаимодействует с USB шиной, второй — с вашим хостом. Давайте начнем с простого и поговорим для начала о втором. Подробнее о различиях ASIO и Core Aduio, зачем вообще ASIO нужен на Windows мы поговорим в другом посте.

Задержка декодирования

Итак, ваш сигнал преодолел USB шину, и вам нужно направить его на вход к вашему хосту. Здесь на сцену выходит входной ASIO буфер. Это и есть тот самый буфер, размер которого вам позволено менять, и задержку на котором вам так радостно отображает контрольная панель интерфейса, и ничуть не врет. Если разделить 441000 Герц (частота дискретизации) на 128 семплов (размер буфера), то получим как раз 2.9 мс задержки. Но мы то теперь знаем, этот буфер не один! С другой стороны хоста стоит ещё один, выходной ASIO буфер, размер которого как правило выставляется равным входному. Итого мы имеем 2.9 + 2.9 = 5.8 мс задержки, в лучшем случае. И лучший случай это только на бумаге. На практике в самом хосте и на пути к выходу происходят и другие процессы, которые в целом могут увеличить выходную задержку до 256 семлов, что в целом сложится в 384 семпла, и на частоте 44100 Гц будут давать задержку в 8.7 мс. Добавьте сюда ещё 1 мс которую мы посчитали для работы преобразователей и получим 9.7 мс. Но 9.7 мс это все ещё слишком мало чтобы человек различал разницу.

Откуда берется дополнительная задержка

Сейчас то вы уже наверное догадались, потому что Я решил не путать ваш лишний раз, но на самом деле об этом виновнике редко где встретишь разговоры. А речь конечно о буфере USB шины. USB шина работает на основе миллисекундного таймера, как только таймер отсчитывает определенный интервал, происходит остановка и все что было записано в буфер отправляется на аудио процессинг. Точная настройка этого буфера под характеристики вашего компьютера могла бы дать возможность значительно ускорить процесс работы с аудио, но инженеры умышленно прячут её от вас, а все дело в том что, если пользователь случайно поставит достаточно малое значение этого драйвера, он рискует «уронить» драйвер (при чем как пишут в presonus «crash the driver—a lot.») Как правило большинство (но не все!) производителей значение этого драйвера устанавливают в безопасное для большинства компьютеров значение, которое на деле приводит к лишним 6 мс на входе и выходе. (Также часто можно встретить и 4 мс) Теперь когда мы знаем все этапы цепочки, сложим наши найденные 12 мс с прежде посчитанными 9.7 мс (помните что все значение мы брали в среднем, но результаты на практике сильно не отличаются) и получим 21.7 мс задержки, и вот это уже реальная помеха.

Заключение. Как жить и что делать

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

Правда о цифровой задержке в музыке. Музыка, Теория, Физика, Длиннопост, Текст

Значение хоть и приблизительное, но по нему действительно можно ориентироваться. При 64 семплах получим задержку

10 мс, что для большинства инструментов не должно стать помехой. И нет, это — не реклама, хотя это явно камень в огород всяким фокусрайтам.

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

В большинстве дейвайсов сейчас предусмотрена функция Direct Monitoring, которая пробрасывает сигнал с АЦП сразу к ЦАП. В результате мы все равно имеем около 1мс задержки, но её пока никто «прочувствовать» не смог. Ественно в этом случае мы лишаемся возможности обрабатывать сигнал на хосте.

Кроме этого есть ветвители сигналов, например большинство DI-боксов для гитар выдают балансный сигнал который можно направить в интерфейс и небалансный который можно воткнуть в усилитель.

Вы можете экспериментировать с ещё меньшей задержкой на Windows приобретя например RME Hammerfall, которая позволяет работать под ASIO с буфером в 32 семпла. А на Mac тот же Ur22 будет работать в 32 семпла в силу иной природы устройства их CoreAudio.

Также некоторые карточки, например из линейки presonus AVL позволяют таки изменять размер USB буфера, выбирая между 6, 4 и даже 2 мс. Ещё часть их карточек имеет на борту DSP процессор который позволит проводить direct monitoring с небольшой обработкой для вашего комфорта.

Постскриптум

Как видите зверь не так страшен, если с ним разобраться. И Я надеюсь, что мир цифровой аудиозаписи стал на миг прозрачней и понятней.

Павлин рад тратить свое время на помощь вам, и готов отвечать на ваши вопросы. Свои вопросы задавайте в комментариях.

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

Свои замечания по поводу анкеты вы можете оставлять под предыдущим постом.

Утилита для измерения уровня задержек аудиосигнала

Программа RTL Utility для измерения уровня задержек аудиосигнала. Официальный релиз принёс большие улучшения.

По словам создателя, версия RTL Utility 1.0.0 получила ряд изменений и улучшений.

Утилита для измерения уровня задержек аудиосигнала измеряет общий суммарный уровень задержек (англ. round trip latency) при работе с аудиоинтерфейсом. С её помощью пользователи могут узнать, какое время требуется аудиосигналу, чтобы пройти через аудиоинтерфейс, компьютер и DAW, и вернуться обратно. Чем меньше уровень задержки, тем быстрее сигнал возвращается к слушателю, и тем легче вам будет записывать музыку.

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

RTL Utility игнорирует любые буферы и замеряет время прохождения сигнала напрямую. Для измерения уровня достаточно подключить выход аудиоинтерфейса к его входу, а затем запустить тестирование в утилите. Программа отправляет по схеме тестовый сигнал и замеряет время, потребовавшееся на полное прохождение цепочки «Аудиоинтерфейс — компьютер — DAW — компьютер — аудиоинтерфейс».

Утилита RTL Utility позиционируется разработчиками как честный и независимый способ тестирования звуковых карт. Создатели отмечают, что с её помощью можно не переживать о производительности компьютера, так как алгоритм программы построен таким образом, чтобы отсечь любые влияющие на задержку факторы и выдать реальное время задержки.

Первая стабильная версия программы получила обновлённый алгоритм определения времени пути прохождения звукового сигнала. Разработчик также улучшил логирование, благодаря чему программа подробнее рассказывает о проделанном пути и предоставляет больше данных для анализа. Среди других изменений отмечается более плавная реакция утилиты на смену разрядности тестового сигнала и улучшенную поддержку CoreAudio.

RTL Utility распространяется бесплатно для компьютеров под управлением Windows и macOS. Получить больше подробностей о новинке и загрузить стабильную версию утилиты можно на официальном сайте Oblique Audio.

Похожие статьи