Una vez tuve un escenario en el que el usuario capturaba la escena del concierto con el audio en tiempo real del intérprete y, al mismo tiempo, el dispositivo descargaba la transmisión en vivo desde el dispositivo de transmisión de audio. Más tarde, reemplazo el audio ruidoso en tiempo real (capturado durante la grabación) con el i he transmitido y guardado en mi teléfono (audio de buena calidad). Ahora mismo estoy configurando el desplazamiento de audio manualmente con base de prueba y error al fusionarme para poder sincronizar la actividad de audio y video en la posición exacta.

Ahora lo que quiero hacer es automatizar el proceso de sincronización de audio. En lugar de fusionar el video con audio claro en el desplazamiento dado, quiero fusionar el video con audio claro automáticamente con la sincronización adecuada.

Para eso necesito encontrar el desplazamiento en el que debería reemplazar el audio ruidoso con audio claro. cuando el usuario comience la grabación y la detenga, tomaré esa muestra de audio en tiempo real y la compararé con el audio transmitido en vivo y tomaré la parte exacta de ese audio y la sincronizaré en el momento perfecto.

¿Alguien tiene alguna idea de cómo encontrar el desplazamiento al comparar dos archivos de audio y sincronizarlos con el video?

11
User 1531343 30 dic. 2016 a las 09:48

3 respuestas

La mejor respuesta

Aquí hay una respuesta concisa y clara.

• No es fácil: implicará procesamiento de señales y matemáticas.
• Un rápido Google me da esta solución, código incluido.
• Hay más información sobre la técnica anterior aquí.
• Sugeriría obtener al menos una comprensión básica antes de intentar portar esto a iOS.
• Te sugiero que uses el Accelerate framework en iOS para transformaciones rápidas de Fourier, etc.
• No estoy de acuerdo con la otra respuesta sobre hacerlo en un servidor: los dispositivos son bastante potentes en estos días. A un usuario no le importaría unos segundos de procesamiento para que ocurra algo aparentemente mágico.

Editar

Por otro lado, creo que vale la pena dar un paso atrás por un segundo. Si bien el procesamiento matemático y elegante de señales como este puede dar excelentes resultados y hacer algunas cosas bastante mágicas, puede haber casos periféricos en los que el algoritmo se desmorona (con suerte, no con frecuencia).

¿Qué pasa si, en lugar de complicarse con el procesamiento de la señal, hay otra forma? Después de pensarlo un poco, podría haberlo. Si cumple con todas las siguientes condiciones:

• Usted tiene el control del componente del servidor (emisor de audio dispositivo)
• La emisora conoce la grabación de 'audio real' latencia
• La emisora y el receptor se comunican de alguna manera. que permite una sincronización horaria precisa

... entonces la tarea de calcular el desplazamiento de audio se vuelve razonablemente trivial. Puede usar NTP o algún otro método de sincronización de tiempo más preciso para que haya un punto de referencia global para el tiempo. Entonces, es tan simple como calcular la diferencia entre los códigos de tiempo de transmisión de audio, donde los códigos de tiempo se basan en el tiempo de referencia global.

7
Jordan Smith 9 ene. 2017 a las 20:55

No sé mucho sobre el tema, pero creo que está buscando "huellas digitales de audio". Pregunta similar aquí.

Una forma alternativa (y más propensa a errores) es ejecutar ambos sonidos a través de una biblioteca de voz a texto (o una API) y hacer coincidir la parte relevante. Por supuesto, esto no sería muy confiable. Las oraciones se repiten con frecuencia en canciones y conciertos, quizás instrumentales

Además, el procesamiento de audio en un dispositivo móvil puede no funcionar bien (debido al bajo rendimiento o al alto consumo de batería o ambos). Te sugiero que uses un servidor si vas por ese camino.

Buena suerte.

0
Community 23 may. 2017 a las 11:45

Esto podría ser un problema difícil, ya que aunque las señales son del mismo evento, la presencia de ruido dificulta aún más la comparación. Podría considerar ejecutar algo de procesamiento posterior para reducir el ruido, pero la reducción del ruido en sí misma es un tema extenso y no trivial.

Otro problema podría ser que la señal capturada por los dos dispositivos en realidad podría diferir mucho, por ejemplo, el audio de buena calidad (¿supongo que la salida de la consola de mezcla en vivo?) Será bastante diferente de la versión en vivo (que se supone que saldrá) de monitores en el escenario / sistema FOH capturado por un micrófono de teléfono?)

Quizás el enfoque más simple posible para comenzar sería usar correlación cruzada para hacer el retraso de tiempo análisis.

Un pico en la función de correlación cruzada sugeriría el retraso de tiempo relativo (en muestras) entre las dos señales, por lo que puede aplicar el cambio en consecuencia.

1
Rampartisan 5 ene. 2017 a las 14:12