Sincronizar dos pistas de audio

9

Me gustaría implementar un algoritmo que sincronice dos pistas de audio.

Las dos pistas son muy similares; Puedes imaginar que son dos grabaciones de sonido (no necesariamente música) de dos micrófonos en la misma habitación. Esto significa que aparecen como una señal que pasa a través de dos canales diferentes (lineales), con un ruido aditivo diferente.

Entiendo que la primera idea podría ser buscar el pico de su correlación cruzada, pero soy particularmente interesante para encontrar literatura sobre el tema, pero todos los documentos que pude encontrar están sincronizando dos pistas musicales (usando características de audio basadas en croma) ), o sincronizando audio con una partitura. También suponen que puede haber deformación del tiempo, lo cual es una suposición innecesaria en mi caso.

Sinan Taifour
fuente

Respuestas:

4

Los enfoques basados ​​en croma se usan cuando las pistas para alinear son dos interpretaciones del mismo material con instrumentaciones muy diferentes, en cuyo caso necesita encontrar el "mínimo común denominador", que es armonía, melodía, progresión de acordes, etc. eso - ellos son timbres totalmente abstractos, técnicas de grabación. Pero no los necesita en su caso.

Como habrás adivinado, la correlación cruzada del audio sin procesar sería 1 / no muy resistente al ruido, 2 / no muy resistente a las diferencias en los transductores (los dos micrófonos pueden tener respuestas muy diferentes) 3 / muy costoso si tienes minutos de audio.

Te sugiero que:

  • Extraer una secuencia de vectores MFCC de ambas señales. De esta manera, tendrá algo de menor dimensionalidad y un poco más resistente al ruido y las diferencias en los transductores.
  • Opcionalmente, normalice el MFCC (el coeficiente "por diseño" 0 tiene más varianza que el coeficiente 1 y así sucesivamente ...) ... Lo ideal sería que cada fila de la matriz MFCC tenga varianza 1.
  • Calcule la correlación cruzada de dos matrices que obtiene, a lo largo del eje de tiempo (es decir, calcule la correlación cruzada 2D y simplemente guarde los datos para el eje de tiempo).
pichenettes
fuente
Enfoque interesante ¿Qué tipo de resolución de tiempo puede obtener de un análisis MFCC? ¿Está esto limitado por la resolución espectral?
Hilmar
Poster no dijo qué resolución esperaba. Este enfoque se limita a la resolución del análisis de MFCC, típicamente realizado a 50 a 100 cuadros por segundo. Esto es suficiente para aplicaciones que involucran voz y "audio cotidiano" (por ejemplo, alinear tomas de múltiples cámaras no TCed en edición de video); Probablemente no sea música. Para obtener más resolución, sugiero hacer una alineación de "grano grueso" utilizando MFCC para obtener una alineación a +/- 10 ms (duración de un marco FFT); luego tomar algunos fragmentos de 100 ms de audio cada 10 segundos de ambas fuentes; y hacer un emparejamiento exhaustivo usando esos.
pichenettes
2
En realidad, el método de correlación cruzada suele ser bastante insensible al ruido. La correlación cruzada de la parte no sonora del sonido creará un pico en la correlación cruzada. Por otro lado, dado que el ruido es aleatorio, es poco probable que el ruido en una grabación se correlacione de manera específica con algo en la otra grabación, y por lo tanto solo dará lugar a más ruido en la correlación cruzada. Este ruido es muy débil en comparación con el pico y, por lo tanto, la precisión al localizar el pico casi no se verá afectada.
Hola
Soy escéptico sobre si las respuestas ligeramente diferentes jugarán un papel tan importante, para el caso; aún obtendría un pico en la correlación cruzada, aunque quizás se tradujera muy levemente, lo que en ese caso sería causado por un retraso en uno de los transductores. Sin embargo, si tiene ese retraso, no veo cómo MFCC mejoraría esto.
Hola
Finalmente, incluso si tiene minutos de audio, la correlación cruzada se puede calcular de manera muy eficiente usando FFT. Sospecho que extraer una secuencia de vectores MFCC de ambas señales llevaría mucho más tiempo.
Hola