Это должно быть так же просто, как отправить все файлы в микшер одновременно. Когда какой-либо один файл доходит до конца, просто обработайте его так, как будто остаток заполнен нулями. Когда все файлы дойдут до конца, все готово.
Обратите внимание, что в примере кода говорится, что он возвращает ошибку, если будет отсечение (сумма волн больше, чем максимальное представимое значение). Это условие более вероятно, если вы смешиваете несколько входов. Наилучшим способом создания этого является создание "headroom" во входных волнах. Вы можете сделать это либо при предварительной обработке, гарантируя, что объем каждой волны не превышает X% от максимальной. (~ 80-90%, в зависимости от количества входов). Другой способ - сделать это динамически в коде микшера, умножив каждый образец на некоторое значение < 1.0, когда вы добавите его в микс.
Если вы выбираете волны для смешивания во время выполнения, а отказ из-за отсечения является неприемлемым, вам нужно будет изменить образец кода, чтобы вывести значения с max/min вместо возврата ошибки. Не позволяйте им переполняться, или вы получите шумные артефакты.
(Clipping также создает артефакты, но когда вы не создали достаточный запас высоты перед смешиванием, это определенно предпочтительнее переполнения. Это более знакомое звучание типа искажений, похожее на то, что вы получаете, когда вы перегружаете свой . спикеры См this wikipedia article on clipping:
Отсечение предпочтительнее альтернативы в цифровых системах, оберточной, которая возникает, если цифровой аппаратный разрешено «переполнение», не обращая внимания на наиболее значимые биты величины, а иногда даже знак от величины выборки, что приводит к грубым искажениям сигнала.
Пинчинг до макс/мин звучит довольно ужасно! –