Je recherche des algorithmes pour résoudre le problème suivant: Étant donné une capture sonore .wav bruyante (un peu de vent + bruit de frottement sur le microphone), comment détecter le BPM d'un battement de batterie doux?
J'ai tenté de googler le sujet, mais les résultats sont assez médiocres, en raison de la grande quantité de logiciels liés au mp3 pour l'analyse et la génération d'ID d'empreintes digitales. Aucun d'entre eux ne fournit d'informations sur la façon de le faire.
Je connais des algorithmes pour supprimer le bruit, mais cela me pose toujours le problème de la détection du BPM. Et selon la façon dont le problème de BPM est résolu, il est possible que je n'aie même pas besoin de débruiter (puisque le tambour a tendance à être dans les basses fréquences et le bruit dans les plus élevés, un simple passe-bas peut être un prétraitement suffisant).
la source
Réponses:
Une méthode qui fonctionne s'il y a un rythme de batterie relativement fort consiste à prendre l'amplitude du STFT de la forme d'onde, puis à la corréler automatiquement uniquement dans la dimension temporelle. Le pic de la fonction d'auto-corrélation sera le battement, ou un sous-multiple de celui-ci.
Cela revient à décomposer le signal en plusieurs bandes de fréquences différentes, à trouver l'enveloppe d'amplitude de chacune, à auto-corréler chaque enveloppe, puis à les additionner. Le bruit et d'autres parties de la musique sont moyennés par l'opération de corrélation croisée.
En effet, les battements de tambour produisent un son de courte durée à de nombreuses fréquences (lignes verticales), tandis que d'autres parties de la musique ne durent qu'à quelques fréquences (lignes horizontales), et le bruit est de longue durée mais aléatoire à toutes les fréquences. Vous pouvez voir la répétition des battements si vous regardez un STFT:
Je suis venu avec ceci pour un projet d'école pour trouver une seule valeur de BPM pour des fichiers musicaux entiers, mais elle pourrait également être adaptée à un flux audio avec un BPM changeant. Vous auriez besoin de traiter des morceaux qui sont au moins deux fois plus longs que la période du BPM que vous recherchez.
la source
L'autocorrélation est certainement une bonne méthode de base pour cela. Il y a quelques choses que vous pouvez faire pour potentiellement améliorer cela:
la source