Detección de bpm de batería en un archivo .wav ruidoso


12

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).


Respuestas:


13

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:

ingrese la descripción de la imagen aquí

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.


FFT es una técnica generalmente útil para encontrar señales periódicas. Puede haber un pequeño truco si la señal no es tan regular como te gustaría: un baterista podría acelerar o reducir la velocidad en el transcurso de una canción, deliberadamente o no, y esto podría interferir con los resultados de FFT en el dominio de la frecuencia.
Rethunk

1
@Rethunk: si el BPM cambia con el tiempo, deberá hacerlo en fragmentos y encontrar el BPM para cada uno.
endolito el

Tenga en cuenta que los ritmos se asocian comúnmente con la música, y también ve otra parte de la música en esta imagen: líneas horizontales, que cambian la altura al ritmo. Básicamente, existen tres contribuciones de energía: latidos (verticales), notas (horizontales) y ruido (resto).
MSalters

@MSalters: Sin embargo, las notas también pueden correlacionarse
endolito el

4

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:

  1. Si conoce el espectro de frecuencia de su batería, el paso de banda filtra la señal para que solo queden las frecuencias relevantes para la batería. Dependiendo del tambor, esto podría ser bastante estrecho y debería eliminar la gran mayoría del ruido.
  2. Luego calcule la envolvente del dominio del tiempo de la señal (el "pico con pérdida" es la forma más fácil de hacer esto) con una constante de tiempo que coincida aproximadamente con la duración de los ritmos del tambor.
  3. Luego haz la auto-correlación
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.