Eu gostaria de misturar dois ou mais canais de áudio PCM (por exemplo, amostras gravadas) digitalmente de maneira acústica, de preferência em tempo quase real (o que significa pouco ou nenhum peek-ahead).
A maneira fisicamente "correta" de fazer isso é somar as amostras. No entanto, quando você adiciona duas amostras arbitrárias, o valor resultante pode ser até o dobro do valor máximo.
Por exemplo, se suas amostras tiverem valores de 16 bits, o resultado será de até 65536 * 2. Isso resulta em recorte.
A solução ingênua aqui é dividir por N, onde N é o número de canais que estão sendo misturados. No entanto, isso resulta em cada amostra sendo 1/5 de altura, o que é completamente irreal. No mundo real, quando dois instrumentos tocam simultaneamente, cada instrumento não fica com a metade do volume.
Da leitura ao redor, um método comum de mixagem é: resultado = A + B - AB, onde A e B são as duas amostras normalizadas sendo mixadas, e AB é um termo para garantir que sons mais altos sejam cada vez mais "cortados suavemente".
No entanto, isso introduz uma distorção do sinal. Esse nível de distorção é aceitável na síntese de áudio de alta qualidade?
Que outros métodos existem para resolver esse problema? Estou interessado em algoritmos eficientes de menor qualidade e em algoritmos de alta qualidade menos eficientes.
Estou fazendo minha pergunta no contexto da síntese de música digital, com o objetivo de misturar várias faixas de instrumentos. As faixas podem ser áudio sintetizado, amostras pré-gravadas ou entrada de microfone em tempo real.