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.
fonte
Respostas:
É muito difícil apontar para técnicas relevantes sem conhecer nenhum contexto para o seu problema.
A resposta óbvia seria pedir para você ajustar o ganho de cada amostra para que o corte raramente ocorra. Não é tão irreal assumir que os músicos tocariam mais suave em um conjunto do que quando solicitado a tocar solo.
A distorção introduzida por A + B - AB simplesmente não é aceitável. Ele cria imagens espelhadas de A em cada lado dos harmônicos de B - equivalente à modulação em anel - o que é bastante terrível se A e B tiverem um rico espectro com harmônicos que não estão em proporções inteiras. Experimente em duas ondas quadradas a 220 e 400 Hz, por exemplo.
Uma função de recorte mais "natural", que funciona amostra a amostra, é a função tanh - na verdade, corresponde ao comportamento de limitação suave de alguns elementos analógicos. Além disso, você pode analisar as técnicas clássicas de compactação dinâmica - se o seu sistema puder olhar para frente e ver os picos chegarem com antecedência, isso é ainda melhor.
fonte
Essa não é a solução "ingênua", é a única solução. É o que todo mixer analógico e digital faz, porque é o que o ar faz e o que seu cérebro faz.
Infelizmente, isso parece ser um equívoco comum, como demonstrado por esses outros algoritmos não lineares de "mistura" (distorção) não lineares incorretos:
Misturando áudio digital(da maneira errada)Uma técnica de mixagem de amostra de áudio rápida e suja para evitar cortes(não faça isso)A "divisão por N" é chamada de altura livre ; o espaço extra para picos alocados acima do nível RMS da forma de onda. A quantidade de margem necessária para um sinal é determinada pelo fator de crista do sinal . (O mal-entendido dos níveis de sinal digital e da margem de lucro provavelmente é parcialmente responsável pela guerra do Loudness e pela Elephunk .)
No hardware analógico, o espaço livre é talvez 20 dB. Em um DSP de hardware, o ponto fixo é frequentemente usado, com um headroom fixo; O SigmaDSP da AD , por exemplo, possui 24 dB de altura livre. No software de computador, o processamento de áudio geralmente é realizado em ponto flutuante de 32 bits, portanto, o espaço livre é enorme.
Idealmente, você não precisaria dividir por N, basta somar os sinais, porque seus sinais não seriam gerados a 0 dBFS em primeiro lugar.
Observe que a maioria dos sinais não está correlacionada entre si, portanto, é incomum que todos os canais de um mixer interfiram construtivamente no mesmo momento. Sim, misturar 10 ondas senoidais idênticas em fase aumentaria o nível de pico em 10 vezes (20 dB), mas misturar 10 fontes de ruído não coerentes aumentará o nível de pico em 3,2 vezes (10 dB). Para sinais reais, o valor estará entre esses extremos.
Para obter o sinal misto de um DAC sem cortar, você simplesmente reduz o ganho do mix. Se você deseja manter alto o nível RMS da mixagem sem cortes, precisará aplicar algum tipo de compactação para limitar os picos da forma de onda, mas isso não faz parte da mixagem, é uma etapa separada. Você mistura primeiro, com bastante espaço livre e, em seguida, coloca-o na compressão da faixa dinâmica mais tarde, se desejado.
fonte
a fórmula
Talvez isto:
ATUALIZAÇÃO: Conforme sugerido pelo hotpaw2, você pode atrasar o sinal de entrada, mas não a supressão de ganho. Isso é chamado de "limitador de antecipação".
fonte
Uma maneira de fazer isso na mixagem em tempo não real é usar um AGC antecipado, em que o ganho de um ou de ambos os canais é reduzido a uma taxa difícil de perceber antes que a amplitude da soma exceda o limite de recorte. Quanto menos previsão disponível, o ajuste de ganho do AGC se tornará mais audível ou o ganho máximo para uma rampa de ajuste de ganho mais suave se aproximará cada vez mais de 0,5 por canal no limite. Para fontes sonoras com alguma previsibilidade, também é possível usar estatísticas sobre o comportamento do envelope ao longo do tempo para adivinhar adaptativamente um limite de ganho, mas com alguma probabilidade de falha (o que seria um ajuste abrupto do ganho do AGC).
fonte
Eu tinha conversado com um designer de mixagem do final dos anos 90 e primeiro dos anos 2000 que estava entrando na onda digital (depois de ter andado na ponta dos pés). Eu acho que o cara era um designer da SPL, mas talvez não seja tão grande, eu absolutamente não me lembro nem do nome nem da marca, mas apenas do tamanho e do tamanho da máquina.
Conversamos muito e finalmente falamos sobre as técnicas para realmente garantir que seus canais de 64/128 @ 24bits misturados continuassem sendo um canal de saída misto preciso de 24 bits sem recorte.
A técnica que ele explicou era bastante simples. As 64 faixas (em 24 bits) foram adicionadas em um canal de 48 bits, onde o recorte não pode ocorrer. Direto.
Não sei dizer como esse sinal foi desviado de 48 para 24 bits. Talvez seja aí que as complicadas receitas da cozinha sejam aplicadas.
E talvez haja muitas técnicas para conseguir isso, acima de tudo diferente, seja em tempo real ou com todos os sinais já gravados com altos picos simples de determinar ... todo tipo de normalização que eu imagino.
fonte
Abaixe o volume global. O rastreador de impulso emite canais normalmente em cerca de 33% do volume máximo por padrão.
Isso parece alto o suficiente para música com poucos canais (MODs Amiga de 4 canais) e suave o suficiente para músicas com 50 canais (já que o conteúdo do canal normalmente não está correlacionado, de modo que o volume não aumenta tão rapidamente após um certo nível ... mais alguns canais serão emitidos no volume máximo com tanta coisa acontecendo). Também deixa espaço suficiente para os canais panorâmicos da esquerda ou da direita (que usam 66% da faixa).
Além disso, você não deseja adicionar seus canais em 16 bits, mas em 32 bits, recortar o resultado e reduzir para 16 bits no final. Você precisará da faixa mais alta para que ela não se enrole enquanto faz as contas. Outra opção é usar o ponto flutuante de 32 bits (o que é conveniente para fazer filtros, efeitos etc.).
fonte
Eu acho que a chave é que, se você tiver valores de 16 bits e adicionar 2 valores que poderiam ser mais do que o valor máximo, então você tem 2 opções:
1) converter ambos em 32 bits add e retornar o valor máximo se a adição exceder esse valor. Em seguida, converta-o para 16 bits. Por exemplo, se seus valores forem 32768 e 34567, excederem 65535 e a chave será retornar 65535. Você faria o mesmo se usasse valores com sinal no final do valor mínimo.
2) comprima ambos os valores e adicione-os juntos.
O primeiro é o recorte essencialmente rígido, o segundo é o recorte suave. Os sistemas analógicos são todos difíceis de cortar.
fonte
Eles terão apenas o dobro do espaço se as frequências de ambas as faixas ocuparem a mesma frequência espacial. Use eq e compressão para contornar isso, esculpindo áreas do espectro de frequências para cada som e controlando os transientes e sustentações dos sons, para que tudo saia onde deveria. Talvez isso não responda à pergunta. Você pode atrasar os sinais de frequência mais baixa em até 2 ms. Ele não cancela a fase porque os comprimentos de onda são maiores que as frequências mais altas e adiciona espaço porque os transientes não estão completamente em sintonia com os sinais graves de falta de energia. Algo que linearmente adicionasse mais atraso, quanto menor o sinal, seria interessante testar.
fonte
Ou seja, se A e B compartilharem um sinal, aplique um deslocamento limitador. A magnitude do deslocamento é o produto de A e B. A direção do deslocamento é oposta à de A e B.
Se A e B não compartilharem um sinal, nenhum limite será aplicado, pois não há como transbordar.
fonte
Minha sugestão:
O usuário pode desejar processar esse fluxo misto com compactação e / ou limitação antes do pontilhamento e reconversão para o formato de ponto fixo de 16 bits (supondo que esta conversão ...
fonte