Estoy buscando algoritmo (s) para resolver el siguiente problema: Dada una ruidosa captura de sonido .wav (algo de viento + ruido de fricción en el micrófono), ¿cómo detectar los BPM de un ritmo suave de batería?
He intentado buscar en Google el tema, pero los resultados son bastante pobres, debido a la gran cantidad de software relacionado con mp3 para el análisis y la generación de identificación de huellas digitales. Ninguno de ellos proporciona información sobre cómo hacerlo realmente.
Conozco algoritmos para eliminar el ruido, pero eso todavía me deja con el problema de detectar BPM. Y dependiendo de cómo se resuelva el problema de BPM, es posible que ni siquiera necesite hacer ruido (ya que el tambor tiende a estar en las frecuencias más bajas y el ruido en las más altas, un simple paso bajo podría ser suficiente preprocesamiento).
fuente
Respuestas:
Un método que funciona si hay un ritmo de batería relativamente fuerte es tomar la magnitud del STFT de la forma de onda y luego auto-correlacionarla solo en la dimensión de tiempo. El pico de la función de autocorrelación será el ritmo, o un submúltiplo del mismo.
Esto es equivalente a dividir la señal en muchas bandas de frecuencia diferentes, encontrar la envolvente de amplitud de cada una, autocorrelacionar cada envolvente y luego sumarlas. La operación de correlación cruzada promedia el ruido y otras partes de la música.
Esto se debe a que los ritmos de batería producen un sonido de corta duración en muchas frecuencias (líneas verticales), mientras que otras partes de la música duran solo en unas pocas frecuencias (líneas horizontales), y el ruido es de larga duración pero aleatorio en todas las frecuencias. Puedes ver la repetición del ritmo si miras un STFT:
Se me ocurrió esto para un proyecto escolar para encontrar un solo valor de BPM para archivos de música completos, pero también podría adaptarse a una transmisión de audio con BPM cambiantes. Debería procesar fragmentos que son al menos dos veces más largos que el período de BPM que está buscando.
fuente
La auto correlación es ciertamente un buen método básico para eso. Hay algunas cosas que puede hacer para mejorar aún más esto:
fuente