Сжатие динамического диапазона при нормализации громкости звука

Я уже спрашивал о нормализации громкости звука. При использовании большинства методов (например, ReplayGain, который меня больше всего интересует) я могу получить пики, превышающие PCM. ограничение (о чем также можно прочитать здесь).

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

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

Оставив это в стороне, функции, обсуждаемые в статье в Википедии, кажутся несколько не тем, что мне нужно (во многих случаях в конце я все равно получил бы случай отсечения). Я думаю об использовании чего-то вроде tanh. Это плохая идея? Это немного уменьшит громкость, но гарантирует, что я не получу отсечения.

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


person Albert    schedule 30.09.2012    source источник


Ответы (2)


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

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

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

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

person learnvst    schedule 30.09.2012
comment
Спасибо за Ваш ответ. Я думаю, что пока буду использовать плавный ограничитель с нулевой атакой и нулевым временем восстановления. Это в основном тривиально для реализации и, вероятно, достаточно хорошо (в основном незаметно, если порог высок). - person Albert; 01.10.2012
comment
Я настоятельно предостерегаю от ограничителя с нулевой атакой и нулевым сбросом. Это функция обрезки. - person Bjorn Roche; 01.10.2012
comment
Этот ответ сбивает с толку. например, боковая цепь является неотъемлемой частью компрессора, поэтому компрессора с боковой цепью не существует. Все компрессоры имеют боковую цепь. - person Bjorn Roche; 01.10.2012
comment
Неправильно. У вас может быть компрессор с обратной связью или волновой компрессор. Кроме того, я нигде не утверждал, что у ограничителя должен быть нулевой релиз. - person learnvst; 01.10.2012

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

Время от времени вы все еще сталкиваетесь с песней, которая требует достаточного усиления, чтобы в какой-то момент она попала в клип. У вас есть два варианта: 1. Не добавляйте столько усиления. Эта песня будет звучать немного тише. Такова жизнь. (это распространенный подход), или 2. применить небольшое сжатие и/или ограничение динамического диапазона. Конечно, вы также можете использовать комбинацию 1 и 2. Я считаю, что iTunes использует комбинацию 1 и 2, но они очень усердно работали над № 2, и они применяются очень мало.

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

Сжатие динамического диапазона использует огибающие, которые со временем применяются к сигналу: http://en.wikipedia.org/wiki/Dynamic_range_compression Это сложно сделать правильно, и вы никогда не сможете создать действительно «прозрачный» компрессор. Ограничитель можно рассматривать как экстремальную версию компрессора, который (по крайней мере, теоретически) предотвращает превышение сигналом определенного уровня. Цифровой ограничитель с опережением может сделать это без заметного ограничения. При разумном использовании он довольно прозрачен.

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

person Bjorn Roche    schedule 01.10.2012
comment
Также спасибо за ваш ответ. У меня есть как регулятор громкости, так и плавное ограничение определенного порога. Порог очень высокий (и в любом случае настраиваемый), и я по умолчанию уменьшаю громкость на коэффициент 0,9, поэтому мне очень редко приходится достигать этого порога. Я немного поэкспериментировал с ним (используя коэффициенты громкости > 1), и он звучит все еще нормально, так что пока это, вероятно, хорошее решение. - person Albert; 01.10.2012
comment
Вы должны попробовать музыку, начиная от современной поп-музыки и заканчивая классикой. Я говорю это, потому что 0,9 кажется мне очень высоким. (может быть, это и хорошо, но опыт подсказывает мне, что, вероятно, это не так) - person Bjorn Roche; 01.10.2012