Я хотел бы микшировать два или более аудиоканалов ИКМ (например, записанные сэмплы) в цифровой форме с акустической точностью, предпочтительно почти в реальном времени (то есть с небольшим прогнозом или вообще без него).
Физически «правильный» способ сделать это - суммирование образцов. Однако при добавлении двух произвольных выборок результирующее значение может быть вдвое больше максимального значения.
Например, если ваши выборки имеют 16-битные значения, результат будет до 65536 * 2. Это приводит к отсечению.
Наивным решением здесь является деление на N, где N - это количество каналов, которые микшируются. Тем не менее, это приводит к тому, что каждый сэмпл громко звучит 1 / Nth, что совершенно нереально. В реальном мире, когда два инструмента играют одновременно, каждый инструмент не становится наполовину менее громким.
Из прочтения можно сказать, что распространенным методом микширования является: result = A + B - AB, где A и B - это две нормализованные выборки, которые микшируются, а AB - это термин, гарантирующий, что более громкие звуки становятся все более «мягкими».
Однако это приводит к искажению сигнала. Является ли этот уровень искажения приемлемым при высококачественном синтезе звука?
Какие есть еще методы для решения этой проблемы? Я заинтересован в эффективных алгоритмах низкого качества, а также в менее эффективных алгоритмах высокого качества.
Я задаю свой вопрос в контексте синтеза цифровой музыки, чтобы смешать несколько инструментальных треков вместе. Треки могут быть синтезированным звуком, предварительно записанными сэмплами или микрофонным входом в реальном времени.
источник
Ответы:
Очень сложно указать вам соответствующие методы, не зная контекста для вашей проблемы.
Очевидным ответом было бы сказать вам отрегулировать усиление каждой выборки так, чтобы ограничение происходило редко. Весьма нереально предположить, что музыканты будут играть в ансамбле мягче, чем когда их просят играть соло.
Искажение, вносимое A + B - AB, просто недопустимо. Он создает зеркальные изображения A на каждой стороне гармоник B - эквивалентно кольцевой модуляции - что довольно ужасно, если A и B имеют богатый спектр с гармониками, которые не имеют целочисленных соотношений. Попробуйте это на двух прямоугольных волнах, например, при 220 и 400 Гц.
Более «естественной» функцией отсечения, которая работает на основе выборки за образец, является функция tanh - она фактически соответствует мягкому ограничению поведения некоторых аналоговых элементов. Помимо этого, вы можете взглянуть на классические методы динамического сжатия - если ваша система может смотреть вперед и видеть пики, приходящие заранее, это еще лучше.
источник
Это не «наивное» решение, это единственное решение. Это то, что делает каждый аналоговый и цифровой микшер, потому что это то, что делает воздух, и то, что делает ваш мозг.
К сожалению, это, как представляется, распространенное заблуждение, как демонстрируют эти другие некорректные нелинейные алгоритмы "смешивания" (искажения):
Микширование цифрового звука(неправильный путь)Быстрая и грязная техника микширования сэмплов, чтобы избежать отсечения(не делайте этого)«Деление на N» называется запасом ; дополнительная комната для пиков, которая расположена над среднеквадратичным уровнем сигнала. Величина запаса, необходимого для сигнала, определяется коэффициентом амплитуды сигнала . (Непонимание уровней цифрового сигнала и запаса мощности, вероятно, частично является причиной войны за громкость и Elephunk .)
В аналоговом оборудовании запас составляет, возможно, 20 дБ. В аппаратном DSP часто используется фиксированная точка с фиксированным запасом; Например, AD SigmaDSP имеет запас по уровню 24 дБ. В компьютерном программном обеспечении обработка звука обычно выполняется с 32-битной плавающей запятой, поэтому запас по громадности огромен.
В идеале вам вообще не нужно делить на N, вы просто суммируете сигналы вместе, потому что ваши сигналы не будут генерироваться при 0 дБFS в первую очередь.
Обратите внимание, что большинство сигналов, в любом случае, не коррелируют друг с другом, поэтому нередко все каналы микшера конструктивно создают помехи в одно и то же время. Да, смешивание 10 идентичных синфазных синусоидальных волн увеличит пиковый уровень в 10 раз (20 дБ), но смешивание 10 источников некогерентного шума увеличит пиковый уровень только в 3,2 раза (10 дБ). Для реальных сигналов значение будет между этими крайностями.
Чтобы получить смешанный сигнал из ЦАП без ограничения, вы просто уменьшаете усиление микса. Если вы хотите поддерживать среднеквадратичный уровень микширования на высоком уровне без жесткого ограничения, вам необходимо применить некоторый тип сжатия, чтобы ограничить пики формы сигнала, но это не часть микширования, это отдельный шаг. Сначала вы микшируете с большим запасом мощности, а затем, если хотите, применяете сжатие динамического диапазона позже.
источник
формула
Возможно это:
ОБНОВЛЕНИЕ: Как предлагает hotpaw2, вы можете задержать входной сигнал, но не подавление усиления. Это называется «ограничитель прогнозирования».
источник
Одним способом это можно сделать для микширования не в реальном времени, чтобы использовать упреждающую АРУ, где усиление одного или обоих каналов снижается с трудно воспринимаемой скоростью до того, как суммарная амплитуда превышает предел ограничения. При меньшем упреждении либо регулировка усиления АРУ станет более слышимой, либо максимальное усиление для более мягкой рампы регулировки усиления будет становиться все ближе и ближе к 0,5 на канал на пределе. Для источников звука с некоторой предсказуемостью можно также использовать статистику, касающуюся поведения огибающей во времени, чтобы адаптивно угадать предел усиления, но с некоторой вероятностью отказа (что будет резкой регулировкой усиления АРУ).
источник
Я разговаривал с дизайнером микшеров конца 1990-х и первых 2000-х, который шел на цифровой волне (после того, как на цыпочках). Я думаю, что этот парень был дизайнером для SPL, но, возможно, не таким уж большим, я абсолютно не помню ни названия, ни бренда, я просто помню, насколько действительно большой и дорогой была машина.
Мы долго говорили и, наконец, поговорили о методах, позволяющих действительно гарантировать, что их 64/128 @ 24-битные каналы, смешанные вместе, остаются 24-битным точным смешанным выходным каналом без отсечения.
Техника, которую он объяснил, была довольно проста. 64 дорожки (по 24 бита) были добавлены в 48-битном канале, где отсечение не может произойти. Прямо.
Я не могу сказать, как этот сигнал затем сместился с 48 до 24 бит. Может быть, именно здесь применяются хитрые рецепты кухни.
И, возможно, есть много методов для достижения этого, прежде всего, различных, будь то в режиме реального времени или с использованием уже записанного сигнала с высокими пиками, которые легко определить ... все виды нормализаций, которые я могу себе представить.
источник
Уменьшите общий объем. Импульсный трекер по умолчанию выводит каналы с максимальной громкостью около 33%.
Кажется, что это достаточно громко для музыки с несколькими каналами (4-канальные модемы Amiga) и достаточно тихо для песен с 50 каналами (поскольку содержимое канала обычно не коррелируется, поэтому громкость не достигает такого уровня выше определенного уровня ... плюс несколько каналов будут выводиться на максимальной громкости при таком большом количестве происходящего). Это также оставляет достаточный запас для жестких левых или жестких правых панорамируемых каналов (которые используют 66% диапазона).
Также вы не хотите добавлять свои каналы вместе в 16 бит, вы хотите добавить их вместе в 32 бита, а затем обрезать результат и сократить до 16 бит в самом конце. Вам понадобится более высокий диапазон, чтобы он не оборачивался при выполнении математических операций. Другим вариантом является использование 32-битной плавающей запятой (что удобно для создания фильтров, эффектов и т. Д.).
источник
Я думаю, что ключ в том, что если у вас есть 16-битные значения и вы добавляете вместе 2 значения, которые потенциально могут быть больше максимального значения, то у вас есть 2 варианта:
1) привести оба к 32-битному сложению, а затем вернуть максимальное значение, если сложение превышает это значение. Затем приведите его к 16 битам. Например, если ваши значения равны 32768 и 34567, оно превышает 65535, а ключ должен затем вернуть 65535. Вы бы сделали то же самое, если бы использовали подписанные значения в конце минимального значения.
2) сжать оба значения, затем сложить их вместе.
Первый по сути является жестким, второй - мягким. Аналоговые системы все жесткие.
источник
Они будут только вдвое больше, если частоты на обеих дорожках будут занимать одинаковую пространственную частоту. Используйте эквалайзер и сжатие, чтобы обойти это, вырезая области частотного спектра для каждого звука и управляя переходными процессами и сустейнами, чтобы все высовывалось там, где и должно. Может быть, это не отвечает на вопрос, хотя. Вы можете задержать низкочастотные сигналы до 2 мс. Это не отменит через фазу, потому что длины волн длиннее, чем более высокие частоты, и это добавит пространство, потому что переходные процессы не полностью совпадают с потребляемыми энергией басовыми сигналами. Что-то линейно добавляющее больше задержки, чем меньше сигнал, было бы интересно проверить.
источник
То есть, если и A, и B совместно используют знак, примените ограничивающее смещение. Величина смещения является произведением A и B. Направление смещения противоположно направлению A и B.
Если A и B не разделяют знак, ограничение не применяется, поскольку переполнение невозможно.
источник
Мое предложение:
Пользователь может захотеть обработать этот смешанный поток со сжатием и / или ограничением до сглаживания и реконверсии в 16-битный формат с фиксированной запятой (при условии, что это преобразование ... микширование для передачи мастеринг-инженерам обычно оставляют в формате с более высоким разрешением)
источник