algorithm - machine - Algoritmos para determinar la clave de una muestra de audio
processing sound examples (8)
Estoy interesado en determinar la clave musical de una muestra de audio. ¿Cómo podría (o podría) un algoritmo tratar de aproximar la clave de una muestra de audio musical?
Antares Autotune y Melodyne son dos piezas de software que hacen este tipo de cosas.
¿Alguien puede dar una explicación un poco común acerca de cómo funcionaría esto? Para deducir matemáticamente la clave de una canción analizando el espectro de frecuencias para progresiones de acordes, etc.
¡Este tema me interesa mucho!
Editar: fuentes brillantes y una gran cantidad de información que se puede encontrar de todos los que contribuyeron a esta pregunta .
Especialmente de: the_mandrill y Daniel Brückner.
Analizar la clave no es lo mismo que analizar los tonos. Desafortunadamente, todo el concepto de clave es algo ambiguo, las diferentes definiciones tienden a compartir el concepto de tónico, es decir, un tono / acorde central. Incluso si existiera un buen sistema para la transcripción automática, no existe un algoritmo confiable para determinar la clave.
Es un tema complejo, pero un algoritmo simple para determinar una sola tecla (nota única) se vería así:
Haga una transformación de Fourier en digamos 4096 muestras (el tamaño exacto depende de las demandas de su resolución) en una parte de la muestra que contiene la nota. Determine el pico de potencia en el espectro: esta es la frecuencia de la nota.
Las cosas se vuelven más estrictas si tienes un acorde, diferentes "instrumentos / efectos" o un patrón de música no homofónico.
He trabajado en el problema de la transcripción de grabaciones polifónicas de CD en puntajes durante más de dos años en la universidad. El problema es notoriamente difícil. Los primeros documentos científicos relacionados con el problema se remontan a la década de 1940 y hasta la fecha no hay soluciones sólidas para el caso general.
Todas las suposiciones básicas que usted suele leer no son exactamente correctas y la mayoría de ellas son lo suficientemente incorrectas como para que se vuelvan inutilizables para todo menos para escenarios muy simples.
Las frecuencias de sobretonos no son múltiplos de la frecuencia fundamental - hay efectos no lineales de modo que los parciales altos se alejan de la frecuencia esperada - y no solo unos pocos hercios; no es raro encontrar el 7º parcial donde esperabas el 6º.
Las transformaciones de Fourier no funcionan bien con el análisis de audio porque las frecuencias que le interesan están espaciadas logarítmicamente mientras que la transformación de Fourier produce frecuencias linealmente espaciadas. A bajas frecuencias, necesitas una resolución de alta frecuencia para separar las afinaciones vecinas, pero esto produce una mala resolución de tiempo y pierdes la capacidad de las notas separadas en rápida sucesión.
Una grabación de audio (probablemente) no contiene toda la información necesaria para reconstruir el puntaje. Una gran parte de nuestra percepción musical ocurre en nuestros oídos y cerebro. Es por eso que algunos de los sistemas más exitosos son sistemas expertos con grandes repositorios de conocimiento sobre la estructura de la música (occidental) que solo dependen de una pequeña parte del procesamiento de la señal para extraer información de la grabación de audio.
Cuando regrese a casa revisaré los documentos que he leído y elegiré los 20 o 30 más relevantes y los agregaré aquí. Realmente sugiero leerlos antes de que decidas implementar algo, como se dijo antes de que los supuestos más comunes sean algo incorrectos y realmente no desees redescubrir todo esto encontrado y analizado durante más de 50 años mientras se implementan y prueban.
Es un problema difícil, pero también es muy divertido. Realmente me gustaría escuchar lo que probaste y lo bien que funcionó.
Por ahora, puede echarle un vistazo a la distribución Constant Q transform, Cepstrum y Wigner (-Ville). También hay algunos buenos documentos sobre cómo extraer la frecuencia de los cambios en la fase de los espectros de Fourier de corto tiempo; esto permite usar tamaños de ventana muy cortos (para alta resolución de tiempo) porque la frecuencia puede determinarse con una precisión varias veces 1000 veces mayor que la resolución de frecuencia de la transformación de Fourier subyacente.
Todas estas transformaciones se ajustan mucho mejor al problema del procesamiento de audio que las transformaciones ordinarias de Fourier. Para mejorar los resultados de las transformaciones básicas, eche un vistazo al concepto de reasignación de energía.
Por lo que puedo decir de este artículo , varias teclas tienen sus propias frecuencias comunes, por lo que es probable que analice la muestra de audio para detectar cuáles son las notas y los acordes más comunes. Después de todo, puede tener varias claves que tengan la misma configuración de objetos punzantes y planos, con la diferencia de que la nota en la que se inicia la tecla y, por tanto, los acordes de tales teclas, por lo que parece con qué frecuencia aparecerán las notas y los acordes importantes. la única forma real en que podrías resolver ese tipo de cosas. Realmente no creo que puedas obtener una explicación profana de las fórmulas matemáticas reales sin dejar de lado mucha información.
Tenga en cuenta que esto proviene de alguien que no tiene absolutamente ninguna experiencia en esta área, siendo su primera exposición el artículo vinculado en esta respuesta.
Primero necesita un algoritmo de detección de tono (por ejemplo, autocorrelation ).
Puede usar entonces su algoritmo de detección de tono para extraer el tono en una cantidad de ventanas de corto tiempo. Después de eso, necesitaría ver con qué tecla musical encajan mejor los tonos muestreados.
Puede usar la Transformada de Fourier para calcular el espectro de frecuencias a partir de una muestra de audio. A partir de esta salida, puede usar los valores de frecuencia para notas particulares para convertir esto en una lista de notas escuchadas durante la muestra. Elegir las notas más fuertes escuchadas por muestra en una serie de muestras debería proporcionarle un mapa decente de las diferentes notas utilizadas, que puede comparar con las diferentes escalas musicales para obtener una lista de las posibles escalas que contienen esa combinación de notas.
Para ayudar a decidir qué escala en particular se está utilizando, haga una nota (sin juego de palabras) de las notas más escuchadas. En la música occidental, la raíz de la escala suele ser la nota más común que se escucha, seguida por la quinta y luego la cuarta. También puede buscar patrones como chords comunes, arpeggios o progressions .
El tamaño de la muestra probablemente sea importante aquí. Idealmente, cada muestra será una nota única (para que no obtenga dos acordes en una muestra). Si filter y se concentra en las bajas frecuencias, puede usar los picos de volumen ("clics") normalmente asociados con los instrumentos de percusión para determinar el tempo de la canción y "bloquear" su algoritmo al ritmo de la música. Comience con muestras que tengan un tiempo medio y ajústelas desde allí. Prepárese para tirar algunas muestras que no tienen muchos datos útiles (como una muestra tomada en el medio de una diapositiva).
Si necesita clasificar un grupo de canciones en este momento, entonces haga una multitud para resolver el problema con algo como Mechanical Turk .
Vale la pena ser consciente de que este es un problema muy complicado y si no tienes experiencia en el procesamiento de la señal (o un interés en aprender sobre esto), entonces tienes un momento muy frustrante por delante. Si esperas lanzar un par de FFT al problema, entonces no llegarás muy lejos. Espero que tengas el interés, ya que es un área realmente fascinante.
Inicialmente existe el problema del reconocimiento de tono, que es razonablemente fácil de hacer para instrumentos monofónicos simples (por ejemplo, voz) utilizando un método como la autocorrelación o el espectro de suma de armónicos (por ejemplo, consulte el enlace de Paul R). Sin embargo, a menudo encontrará que esto da los resultados incorrectos: a menudo obtendrá la mitad o el doble del tono que estaba esperando. Esto se denomina errores de doblaje u octava del período de tono y ocurre esencialmente porque la FFT o autocorrelación tiene la suposición de que los datos tienen características constantes a lo largo del tiempo. Si tienes un instrumento tocado por un humano siempre habrá alguna variación.
Algunas personas abordan el problema del reconocimiento de teclas como una cuestión de hacer el reconocimiento de tono primero y luego encontrar la clave de la secuencia de lanzamientos. Esto es increíblemente difícil si tiene algo más que una secuencia monofónica de tonos. Si tienes una secuencia monofónica de tonos, aún no es un método claro para determinar la clave: cómo lidiar con las notas cromáticas, por ejemplo, o determinar si es mayor o menor. Por lo tanto, necesitaría usar un método similar al algoritmo de búsqueda de claves de Krumhansl .
Entonces, dada la complejidad de este enfoque, una alternativa es mirar todas las notas que se tocan al mismo tiempo. Si tienes acordes, o más de un instrumento, entonces vas a tener una rica sopa espectral de muchos sinusoides tocando a la vez. Cada nota individual se compone de múltiples armónicos una frecuencia fundamental, por lo que A (a 440 Hz) estará compuesta de sinusoides en 440, 880, 1320 ... Además, si juegas una E (mira este diagram para las alturas), entonces eso es 659.25 Hz, que es casi una vez y media la de A (en realidad, 1.498). Esto significa que cada 3er armónico de A coincide con cada segundo armónico de E. Esta es la razón por la cual los acordes suenan agradables, porque comparten armónicos. (como un lado, la razón por la cual la armonía occidental funciona se debe a la peculiaridad del destino de que la raíz duodécima de 2 a la potencia 7 es casi 1.5)
Si miraste más allá de este intervalo de un 5to a mayor, menor y otros acordes, entonces encontrarás otras proporciones. Creo que muchas técnicas clave de búsqueda enumerarán estas proporciones y luego llenarán un histograma para cada pico espectral en la señal. Entonces, en el caso de detectar el acorde A5 esperaría encontrar picos en 440, 880, 659, 1320, 1760, 1977. Para B5 será 494, 988, 741, etc. Así que cree un histograma de frecuencia y para cada el pico sinusoidal en la señal (por ejemplo, desde el espectro de potencia FFT) incrementa la entrada del histograma. Luego, para cada tecla, AG suma los contenedores en su histograma y es probable que los que tienen más entradas sean su clave.
Ese es solo un enfoque muy simple, pero puede ser suficiente para encontrar la clave de un acorde rasgueado o sostenido. También tendría que cortar la señal en pequeños intervalos (por ejemplo, 20 ms) y analizar cada uno para construir una estimación más robusta.
EDITAR:
Si quieres experimentar, te sugiero que descargues un paquete como Octave o CLAM que hace que sea más fácil visualizar datos de audio y ejecutar FFT y otras operaciones.
Otros enlaces útiles:
- Mi tesis doctoral sobre algunos aspectos del reconocimiento de tono: las matemáticas son un tanto pesadas, pero el capítulo 2 es (espero) una introducción bastante accesible a los diferentes enfoques del modelado de audio musical.
- http://en.wikipedia.org/wiki/Auditory_scene_analysis - Análisis de escenas auditivas de Bregman que, aunque no habla de música, tiene algunos hallazgos fascinantes sobre cómo percibimos escenas complejas
- Dan Ellis ha hecho grandes trabajos en esta y áreas similares
- Keith Martin tiene algunos enfoques interesantes