Это должно быть так же просто, как отправлять все файлы в микшер одновременно.Когда какой-либо отдельный файл доходит до конца, просто обработайте его так, как если бы остаток был заполнен нулями.Когда все файлы дойдут до конца, все готово.
Обратите внимание, что пример кода говорит, что возвращает ошибку, если произойдет отсечение (сумма волн больше максимально представимого значения).Это условие более вероятно, если вы смешиваете несколько входов.Лучший способ обойти это - создать некоторый "запас" во входных волнах.Вы можете сделать это либо в предварительной обработке, убедившись, что объем каждой волны не превышает X% от максимального.(~ 80-90%, в зависимости от количества входов.).Другой способ - сделать это динамически в коде микшера, умножив каждый сэмпл на некоторое значение <1,0 при добавлении его в микшер. </p>
Если вы выбираете волны для микширования во время выполнения и неудачи из-за отсечениянедопустимо, вам нужно будет изменить пример кода, чтобы закрепить значения на максимуме / мин, а не возвращать ошибку.Не позволяйте им переполняться, иначе вы получите шумные артефакты.
(Отсечение также создает артефакты, но когда вы не создали достаточный запас до микширования, это определенно предпочтительнее переполнения. Это более знакомый тип искажения, аналогичный тому, который вы получаете, когда выперегрузите ваши динамики. См. эту статью в Википедии об отсечении :
Отсечение предпочтительнее, чем альтернатива в цифровых системах - обтекание - которое происходит, если цифровое оборудование может «переполняться», игнорируя старшие значащие биты величины, а иногда даже знак значения выборки, что приводит к грубым искажениям сигнала.