Поскольку в вашем профиле указано, что вы работаете во встроенных системах, я предполагаю, что операции с плавающей запятой не всегда возможны.
> So what's the correct method to add these sounds together in my software mixer?
Как вы уже догадались, добавление и отсечение - это правильный путь, если вы не хотите терять громкость на источниках. Для сэмплов int16_t
необходимо, чтобы сумма составляла int32_t
, затем ограничить и преобразовать обратно в int16_t
.
> Am I wrong and the correct method is to lower the volume of each by half?
Да. Половина громкости несколько субъективна, но вы можете видеть, что вдвое громкость (громкость) уменьшается примерно на 10 дБ (деление мощности на 10 или выборочных значений на 3,16). Но вы, очевидно, имеете в виду понизить выборочные значения вдвое. Это уменьшение на 6 дБ, заметное уменьшение, но не настолько, как уменьшение вдвое громкости (таблица громкости там очень полезна).
С этим уменьшением на 6 дБ вы избежите всякого ограничения. Но что происходит, когда вам нужно больше входных каналов? Для четырех каналов вам нужно будет разделить входные значения на 4, то есть уменьшить на 12 дБ, что приведет к уменьшению половины громкости для каждого канала.
> Do I need to add a compressor/limiter or some other processing stage to
get the volume and mixing effect I'm trying for?
Вы хотите микшировать, а не обрезать и не терять громкость на входных сигналах. Это невозможно, не без каких-либо искажений.
Как предложил Марк Рэнсом, решение, позволяющее избежать ограничения, не теряя при этом 6 дБ на канал, заключается в том, чтобы попасть где-то между «добавлением и ограничением» и «усреднением».
Это для двух источников: сложение, деление где-то между 1 и 2 (уменьшите диапазон от [-65536, 65534] до чего-то меньшего), затем ограничение.
Если вы часто обрезаете это решение, и оно звучит слишком резко, то вам может понадобиться смягчить ограничивающее колено компрессором. Это немного сложнее, так как необходимо сделать коэффициент деления зависимым от входной мощности. Сначала попробуйте ограничитель в одиночку, и рассматривайте компрессор, только если вы недовольны результатом.