Me gustaría mezclar dos o más canales de audio PCM (por ejemplo, muestras grabadas) digitalmente de una manera acústicamente fiel, preferiblemente en tiempo casi real (lo que significa poco o ningún adelanto).
La forma físicamente "correcta" de hacer esto es sumar las muestras. Sin embargo, cuando agrega dos muestras arbitrarias, el valor resultante podría ser hasta dos veces el valor máximo.
Por ejemplo, si sus muestras son valores de 16 bits, el resultado será hasta 65536 * 2. Esto da como resultado el recorte.
La solución ingenua aquí es dividir por N, donde N es el número de canales que se mezclan. Sin embargo, esto da como resultado que cada muestra sea 1 / Nth tan alta, lo que es completamente poco realista. En el mundo real, cuando dos instrumentos se tocan simultáneamente, cada instrumento no llega a la mitad de volumen.
A partir de la lectura, un método común de mezcla es: resultado = A + B - AB, donde A y B son las dos muestras normalizadas que se mezclan, y AB es un término para garantizar que los sonidos más fuertes sean cada vez más "suaves".
Sin embargo, esto introduce una distorsión de la señal. ¿Es aceptable este nivel de distorsión en la síntesis de audio de alta calidad?
¿Qué otros métodos hay para resolver este problema? Estoy interesado en algoritmos eficientes de menor calidad, así como algoritmos menos eficientes de alta calidad.
Estoy haciendo mi pregunta en el contexto de la síntesis de música digital, con el propósito de mezclar múltiples pistas de instrumentos. Las pistas pueden ser audio sintetizado, muestras pregrabadas o entrada de micrófono en tiempo real.
fuente
Respuestas:
Es muy difícil señalarle técnicas relevantes sin conocer el contexto de su problema.
La respuesta obvia sería decirle que ajuste la ganancia de cada muestra para que rara vez se produzca recorte. No es tan poco realista suponer que los músicos tocarían más suavemente en un conjunto que cuando se les pide que toquen solo.
La distorsión introducida por A + B - AB simplemente no es aceptable. Crea imágenes especulares de A en cada lado de los armónicos de B, equivalente a la modulación en anillo, lo cual es bastante horrible si A y B tienen un espectro rico con armónicos que no están en relaciones enteras. Pruébelo en dos ondas cuadradas a 220 y 400 Hz, por ejemplo.
Una función de recorte más "natural" que funciona muestra por muestra es la función tanh, que en realidad coincide con el comportamiento limitante suave de algunos elementos analógicos. Más allá de eso, puede analizar las técnicas clásicas de compresión dinámica: si su sistema puede mirar hacia adelante y ver picos por adelantado, esto es aún mejor.
fuente
Esa no es la solución "ingenua", es la única solución. Eso es lo que hace todo mezclador analógico y digital, porque es lo que hace el aire y es lo que hace tu cerebro.
Desafortunadamente, esto parece ser un error común, como lo demuestran estos otros algoritmos incorrectos no lineales de "mezcla" (distorsión):
Mezcla de audio digital(de manera incorrecta)Una técnica de mezcla de muestra de audio rápida y sucia para evitar el recorte(no haga esto)El "dividir por N" se llama altura libre ; El espacio adicional para picos que se asigna por encima del nivel RMS de la forma de onda. La cantidad de espacio libre requerido para una señal está determinada por el factor de cresta de la señal . (La incomprensión de los niveles de señal digital y el espacio para la cabeza probablemente sea en parte responsable de la guerra de Loudness y Elephunk ).
En hardware analógico, la altura libre es quizás de 20 dB. En un DSP de hardware, el punto fijo se usa a menudo, con un margen fijo; SigmaDSP de AD , por ejemplo, tiene 24 dB de altura libre. En el software de la computadora, el procesamiento de audio generalmente se realiza en coma flotante de 32 bits, por lo que el margen de maniobra es enorme.
Idealmente, no necesitaría dividir por N en absoluto, simplemente sumaría las señales juntas, porque sus señales no se generarían a 0 dBFS en primer lugar.
Tenga en cuenta que la mayoría de las señales no están correlacionadas entre sí, de todos modos, por lo que es poco común que todos los canales de un mezclador interfieran de manera constructiva en el mismo momento. Sí, mezclar 10 ondas sinusoidales idénticas en fase aumentaría el nivel de pico en 10 veces (20 dB), pero mezclar 10 fuentes de ruido no coherentes solo aumentará el nivel de pico en 3,2 veces (10 dB). Para señales reales, el valor estará entre estos extremos.
Para obtener la señal mixta de un DAC sin recorte, simplemente reduzca la ganancia de la mezcla. Si desea mantener el nivel RMS de la mezcla alto sin recorte fuerte, deberá aplicar algún tipo de compresión para limitar los picos de la forma de onda, pero esto no es parte de la mezcla, es un paso separado. Primero se mezcla, con mucho margen, y luego se somete a compresión de rango dinámico más tarde, si lo desea.
fuente
la formula
no tiene ningún sentido, incluso si usted se refiere a algo que no sea . Una cosa en la que debe pensar es que el sonido varía por encima y por debajo de cero. Una mejor manera de pensarlo es así:AB=A∗B
donde .g≤1
El enfoque más simple es decir , que es conservador, lineal y siempre funciona, pero puede que no sea tan "ruidoso" como desee. Un enfoque menos conservador que "generalmente funciona" y es "más ruidoso" es . Las extensiones a más canales con este enfoque funcionan mejor.g=0.5 g=1/2–√
Alternativamente, puede cambiar con el tiempo, en cuyo caso suele ser el resultado de un algoritmo de compresor / limitador. Entonces realmente tienes una ecuación de diferencia:g
Quizás esto:
ACTUALIZACIÓN: Como lo sugiere hotpaw2, puede retrasar la señal de entrada pero no la supresión de ganancia. Esto se llama un "limitador de anticipación".
fuente
Una forma en que esto se puede hacer para la mezcla en tiempo no real es usar un AGC anticipado, donde la ganancia de uno o ambos canales se reduce a una velocidad difícil de percibir antes de que la amplitud de la suma exceda el límite de recorte. Mientras menos anticipación esté disponible, el ajuste de ganancia de AGC se volverá más audible o la ganancia máxima para una rampa de ajuste de ganancia más suave se acercará más y más a 0.5 por canal en el límite. Para las fuentes de sonido con cierta previsibilidad, también se podrían usar estadísticas sobre el comportamiento de la envolvente a lo largo del tiempo para adivinar de forma adaptativa un límite de ganancia, pero con alguna probabilidad de falla (que sería un ajuste abrupto de ganancia de AGC).
fuente
Había hablado con un diseñador de mezcladores de finales de los 90 y primeros 2000 que estaba pasando por la ola digital (después de caminar de puntillas). Creo que el tipo fue diseñador para SPL, pero tal vez no tan grande, no recuerdo ni el nombre ni la marca, solo recuerdo cuán realmente grande y costosa era la máquina.
Hablamos mucho y finalmente hablamos sobre las técnicas para garantizar realmente que sus canales de 64/128 @ 24 bits mezclados permanecieran como un canal de salida mezclado preciso de 24 bits sin recorte.
La técnica que explicó fue bastante simple. Las 64 pistas (en 24 bits) se agregaron en un canal de 48 bits, donde el recorte no puede ocurrir. Derecho.
No puedo decir cómo esa señal se desvió 48 a 24 bits. Tal vez ahí es donde se aplican las complicadas recetas de cocina.
Y quizás haya muchas técnicas para lograrlo, sobre todo diferentes, ya sea en tiempo real o con la señal ya registrada con picos altos fáciles de determinar ... creo que todo tipo de normalizaciones.
fuente
Bajar el volumen global. El rastreador de impulsos produce, de forma clásica, canales con aproximadamente un 33% de volumen máximo de forma predeterminada.
Eso parece ser lo suficientemente alto para la música con pocos canales (MOD de Amiga de 4 canales) y lo suficientemente suave para las canciones con 50 canales (ya que los contenidos del canal generalmente no están correlacionados, por lo que el volumen no aumenta tan rápido más allá de cierto nivel ... más pocos canales saldrán al volumen máximo con esa cantidad de cosas que están sucediendo). También deja suficiente espacio para los canales panorámicos de izquierda o derecha (que usan el 66% del rango).
Además, no desea agregar sus canales juntos en 16 bits, desea agregarlos juntos en 32 bits, luego recortar el resultado y reducirlo a 16 bits al final. Necesitará el rango más alto para que no se ajuste mientras hace los cálculos. Otra opción es usar un punto flotante de 32 bits (que es conveniente para hacer filtros, efectos, etc.).
fuente
Creo que la clave es que, si tiene valores de 16 bits y está sumando 2 valores juntos que potencialmente podrían ser más que el valor máximo, entonces tiene 2 opciones:
1) convierta ambos a la suma de 32 bits y luego devuelva el valor máximo si la suma excede ese valor. Luego vuélvalo a 16 bits. Por ejemplo, si sus valores son 32768 y 34567, excede 65535 y la clave es devolver 65535. Haría lo mismo si usara valores firmados en el extremo de valor mínimo.
2) comprima ambos valores, luego agréguelos juntos.
El primero es esencialmente un recorte duro, el segundo es un recorte suave. Los sistemas analógicos son todo recorte duro.
fuente
Solo serán el doble del espacio si las frecuencias en ambas pistas ocupan la misma frecuencia espacial. Use la ecualización y la compresión para evitar esto, esculpiendo áreas del espectro de frecuencia para cada sonido y controlando los transitorios y los sostenidos de los sonidos para que todo salga donde debería. Quizás eso no responda la pregunta sin embargo. Puede retrasar las señales de baja frecuencia hasta 2 ms. No se cancelará a través de la fase porque las longitudes de onda son más largas que las frecuencias más altas y agregará espacio porque los transitorios no están completamente a tiempo con las señales de graves que necesitan mucha potencia. Algo que agregue linealmente más demora cuanto menor sea la señal sería interesante probar.
fuente
Es decir, si A y B comparten un signo, aplique un desplazamiento limitante. La magnitud del desplazamiento es el producto de A y B. La dirección del desplazamiento es opuesta a la de A y B.
Si A y B no comparten un signo, no se aplica ningún límite, ya que no hay forma de desbordamiento.
fuente
Mi sugerencia:
Es posible que el usuario desee procesar esta secuencia mixta con compresión y / o limitación antes del tramado y la reconversión al formato de punto fijo de 16 bits (suponiendo que esta conversión ... la mezcla para entregar a los ingenieros de masterización generalmente se deja en un formato de resolución más alta)
fuente