Я хотел бы микшировать два или более аудиоканалов ИКМ (например, записанные сэмплы) в цифровой форме с акустической точностью, предпочтительно почти в реальном времени (то есть с небольшим прогнозом или вообще без него).
Физически «правильный» способ сделать это - суммирование образцов. Однако при добавлении двух произвольных выборок результирующее значение может быть вдвое больше максимального значения.
Например, если ваши выборки имеют 16-битные значения, результат будет до 65536 * 2. Это приводит к отсечению.
Наивным решением здесь является деление на N, где N - это количество каналов, которые микшируются. Тем не менее, это приводит к тому, что каждый сэмпл громко звучит 1 / Nth, что совершенно нереально. В реальном мире, когда два инструмента играют одновременно, каждый инструмент не становится наполовину менее громким.
Из прочтения можно сказать, что распространенным методом микширования является: result = A + B - AB, где A и B - это две нормализованные выборки, которые микшируются, а AB - это термин, гарантирующий, что более громкие звуки становятся все более «мягкими».
Однако это приводит к искажению сигнала. Является ли этот уровень искажения приемлемым при высококачественном синтезе звука?
Какие есть еще методы для решения этой проблемы? Я заинтересован в эффективных алгоритмах низкого качества, а также в менее эффективных алгоритмах высокого качества.
Я задаю свой вопрос в контексте синтеза цифровой музыки, чтобы смешать несколько инструментальных треков вместе. Треки могут быть синтезированным звуком, предварительно записанными сэмплами или микрофонным входом в реальном времени.