Creando archivos estéreo a partir de dos archivos mono con sox.

5

Estoy usando sox 14.2.0 en Centos 6.0.

tengo dos mono archivos wav, left.wav y right.wav. Necesito combinarlos en uno. stereo.ogg archivo, con left.wav pan 80% a la izquierda, y right.wav pan 80% a la derecha.

No pude encontrar las opciones sox necesarias para esto. ¿Cómo hago esto?

Esto se ejecutará repetidamente para muchos archivos, así que prefiero una solución eficiente. Por lo que entiendo, debería haber una manera de hacerlo en una pasada (una invocación de sox).

haimg
fuente

Respuestas:

4

El comando haimgs no es completamente correcto. De forma clásica, la panorámica se reduce al reducir el volumen de un solo canal. Eso significa que si quiere que su señal se quede en un 80%, el canal izquierdo mantiene el volumen original, mientras que el canal derecho solo obtiene el 20% del volumen original. Al menos, eso es lo que hizo el código de desplazamiento de sox (y lo que Alan Blumlein parece haber propuesto al inventar el estéreo).

También su comando puede acortarse usando la opción de remix.

Por lo tanto el comando corregido y acortado es:

sox left.wav right.wav stereo.ogg remix 1,2v0.2 1v0.2,2

editar en respuesta al comentario de haimgs:

Sox te avisará si se produce clipping. Pero sí, es posible. Con la opción de remezcla, el volumen de cada canal se escala con el factor 1 / n, donde n es el número de canales de entrada. Pero eso solo se usa si NO se especifica VULME OPCIÓN para el canal de salida (por lo que su 100% + 20% es correcto).

sox también tiene una opción para escalar cualquier canal sin información explícita de volumen, solo agregue "-a" después de "remix" (como "remix -a 1,2v0.2 1v0.2,2") y los volúmenes serán como 50 % + 20% = 70%. Es bastante confuso y ahora no estoy seguro de si también tiene que escalar el volumen de los canales panorámicos en 1 / n, lo que daría como resultado "remix -a 1,2v0.1 1v0.1,2", o 50% + 10% = 60%. Tendré que investigar más en esta dirección. Mientras tanto, puedes leer la sección de remixes en la página man de sox (también disponible en página de inicio de sox ).

Editar después de reflexionar más:

Después de pensarlo, estoy bastante seguro de que también tiene que escalar los volúmenes panorámicos en 1 / n.

Sobre el tema del clipping: dividiendo TODOS Los volúmenes por el número de canales, este problema no puede ocurrir. Pero eso no conserva La potencia original de la señal, porque la potencia de una señal es logarítmica, no lineal. Cuantos más canales mezcle, más silenciosa debe ser la señal. Es por eso que sox también tiene opciones para eso, donde los volúmenes se escalan en 1 / sqrt (n). Para usar esto, simplemente tome una "p" en lugar de una "v" en la parte de remix y ajuste los valores en consecuencia, y también agregue una opción "-p" después de la declaración de remix. Puede ver la diferencia de escalado por 1 / n y por 1 / sqrt (n) aquí .

Lo siguiente es cómo pienso calcular los valores de potencia correctos: para cada canal tiene que resolver 20 * log_10 (factor). Un factor de 2 resultará en ~ 6 (dB), un factor de 0.5 resultará en ~ -6 (dB). Eso es exactamente lo que dice el manual de sox, así que supongo que esto es correcto.

Entonces, finalmente, el comando en tu caso debe ser:

sox left.wav right.wav stereo.ogg remix -p -a 1,2p-6 1p-6,2

No tengo sox en esta máquina, así que no puedo probar la sintaxis correcta de este comando, así que dígame si hay algún problema. Probaré toda esta teoría tan pronto como tenga la oportunidad de hacerlo, porque me enfrentaré a un problema similar, pero tendré que mezclar muchos más canales que solo 2, y es por eso que se me ocurrió esa potencia de señal.

causa prima
fuente
¿No sería eso introducir el recorte? P.ej. 100% L + 20% R = 120% volumen, si ambos canales van al máximo?
haimg
No agregas los volúmenes del canal, de lo contrario tendrías un 240% en el volumen máximo, y eso es raro.
Rob
@Rob: Es posible que hayas olvidado que, según tu definición, también teníamos un volumen "200%" al principio.
causa prima
Piénsalo de esta manera, joder. Tienes un máximo de 100% de audio en cada canal. Entonces, cuando remixes el left.wav y el right.wav en stereo.ogg, lo que estás haciendo es hacer un NUEVO left.wav y right.wav, cada uno con el otro MUY TRANQUILAMENTE. Aún es 100% para cada canal, es solo que el canal tiene algunos de los otros canales codificados. No es como si bajara el volumen del canal izquierdo y eliminara completamente el audio del canal derecho.
Rob
"Si ambos canales llegan al máximo", como haimg dijo, tendría razón. Piénsalo de esa manera, Rob. Al combinar los dos canales se agregan los valores de muestra. Asumamos que tenemos audio de 8 bits, entonces el valor de muestra máximo sería 256 (en el caso sin firma). Si agrega CUALQUIER COSA (como 51, el 20% de 256) a este valor de muestra de 256, será más grande que el valor de muestra máximo posible y se producirá el recorte, por lo que no importa si la otra señal es muy silenciosa o no. se cortará
causa prima
3

Así es como se hace:

sox left.wav right.wav --channels 2 --combine merge stereo.ogg mixer 0.8,0.2,0.2,0.8

haimg
fuente
2

De alguna manera todos los errores generados anteriormente para mí. Esto es lo que funcionó para mí (SOX en Ubuntu 14.04):

sox -M -c 1 lef.wav -c 1 right.wav output.mp3 
Roger
fuente
0

Use sox con la opción pan para desplazar un archivo a la derecha dura y el otro a la izquierda dura (1 y -1 respectivamente). Luego usa soxmix para mezclar los dos juntos.

albal
fuente
sox 14.2 no incluye soxmix, la opción pan está en desuso y esperaba hacerlo en una sola pasada.
haimg
Sox tiene una opción de mezclador: mixer [ −l|−r|−f|−b|−1|−2|−3|−4|n{,n} ] ( ver: sox.sourceforge.net/sox.html#SYNOPSIS ). Es difícil decirlo del documento, pero parece que usted especifica -m para mezclar los dos archivos, lo que sucede antes de la cadena de efectos (donde mixer pasa)
horatio