Battements par minute en temps réel de l'entrée audio
J'aimerais écrire une simple application en C# pour surveiller la ligne d'audio et de me donner le courant (enfin, la moyenne mobile) battements par minute.
J'ai vu cette gamedev article, et qui est absolument d'aucune aide. Je suis passé par la et a essayé de mettre en œuvre ce qu'il faisait, mais il n'était tout simplement pas de travail.
Je sais il y a des tonnes de solutions pour cela, parce que beaucoup de logiciel DJ t-il, mais je ne suis pas du tout avoir la chance de trouver un open-source de la bibliothèque ou des instructions sur le faire moi-même.
- Un autre article qui pourrait être intéressant pour vous... http://werner.yellowcouch.org/Papers/bpm04/ Vous pouvez trouver existantes de détection de BPM bibliothèques ici: http://www.mmartins.com/mmartins/bpmdetection/bpmdetection.asp ...et C# de détection de BPM bibliothèque ici: http://adionsoft.net/bpm/
- 2 noms : Eric D. Scheirer, Masataka Goto Google, ils ont écrit au sujet de la détection du battement (en temps réel et hors ligne) en grande longueur. Documents très intéressants. Aussi au passage, je pense d'ailleurs détection du rythme que vous pourriez être intéressé à battre de prédiction.
- je crois que l'accord nécessaire des algorithmes que vous voulez. aussi, beaucoup d'intéressant, l'apprentissage de la machine alogrithms pour beaucoup plus de plaisir! il y a un exemple dans le tutoriel / exemples de programmes si je me souviens bien. accord.net
Vous devez vous connecter pour publier un commentaire.
Calculer un powerspectrum avec une fenêtre coulissante de la FFT:
Prendre 1024 échantillons:
Nourrir à un algorithme de FFT:
Vous obtiendrez une partie réelle et une partie imaginaire. Ne jetez PAS la partie imaginaire. Faire de même pour la partie réelle, comme l'imaginaire. S'il est vrai que la partie imaginaire est pi /2 de phase avec le réel, elle contient encore 50% de l'information de spectre.
EDIT:
Calcul de la puissance, par opposition à l'amplitude de sorte que vous avez un nombre élevé quand il est fort et proche de zéro quand il est calme:
De même pour la partie imaginaire.
Maintenant, vous avez un spectre de puissance pour la dernière 1024 échantillons. Où la première partie du spectre, on trouve les basses fréquences et la dernière partie du spectre est la haute
les fréquences.
Si vous voulez trouver le BPM de la musique populaire, vous devriez probablement se concentrer sur la basse. Vous pouvez vous procurer la basse intensité par la somme de la partie inférieure du spectre de puissance. Les nombres qui dépend de la fréquence d'échantillonnage:
Maintenant faire la même chose mais de déplacer la fenêtre de 256 échantillons avant de calculer un nouveau spectre. Maintenant, vous avez le calcul de la bassIntensity pour tous les 256 échantillons.
C'est une bonne entrée pour votre analyse de BPM. Quand la basse est calme, vous n'avez pas de battre et quand il est la voix, vous avez un battement.
Bonne chance!
Il y a un super projet qui s'appelle la Danse des Singes, qui, sur le plan procédural génère DDR pas de danse de la musique. Une grande partie de ce qu'il fait est basé sur (forcément très précis) analyse de la fréquence et de leur document de projet va dans les détails décrivant les différentes battre des algorithmes de détection et de leur adéquation à la tâche. Ils incluent des références à l'origine des documents pour chacun des algorithmes. Ils ont également publié le code matlab pour leur solution. Je suis sûr qu'entre ces vous pouvez trouver ce dont vous avez besoin.
Tout est disponible ici: http://monket.net/dancing-monkeys-v2/Main_Page
Pas que j'ai une idée de comment le mettre en œuvre, mais à partir de l'audio d'un point de vue technique, vous aurez besoin de filtre en premier. Bass drum hits serais le premier à le vérifier. Un filtre passe-bas qui vous donne quelque chose en vertu d'environ 200 hz devrait vous donner une idée assez claire de la grosse caisse. Une porte peut également être nécessaire pour le nettoyage de tout désordre dans d'autres instruments harmoniques basse.
La prochaine à vérifier serait de caisse claire de la frappe. Vous devez EQ celui-ci. La "fissure" de l'un piège est autour de 1,5 kHz à partir de la mémoire, mais vous devez certainement porte de celui-ci.
Le prochain défi serait de travailler sur un algorithme de funky beats. Comment voulez-vous par programmation à trouver le temps 1? Je suppose que vous auriez à garder une trace de la précédente beats et de l'utilisation d'un filtrage quelque chose-ou-autres. Donc, vous auriez probablement besoin d'un peu de bars à trouver exactement la battre. Ensuite, il y a des problèmes de timing comme 4/4, 3/4, 6/8, wow, je ne peux pas imaginer ce qui serait nécessaire pour ce faire avec précision! Je suis sûr que ce serait la peine de l'argent grave de matériel audio/les entreprises de logiciels.
Ce n'est pas un problème facile. Je vais essayer de vous donner qu'un aperçu.
Ce que vous pourriez faire est quelque chose comme ce qui suit:
Une transformée de Fourier est essentiellement un moyen de calcul de la force de toutes les fréquences présentes dans le signal. Si vous n'avez que plus de la "bloqué" le signal, la fréquence de la pulsation, nous l'espérons être le plus fort.
Peut-être vous avez besoin d'appliquer un filtre tout d'abord, pour se concentrer sur des fréquences spécifiques (comme la basse) qui contiennent généralement le plus d'informations sur le BPM.
J'ai trouvé cette bibliothèque qui semblent avoir une bonne mise en œuvre pour la détection de Battements par Minute.
http://soundtouchdotnet.codeplex.com/
Il est basé sur http://www.surina.net/soundtouch/index.html qui est utilisé dans pas mal de DJ les projets http://www.surina.net/soundtouch/applications.html
Tout d'abord, ce Hallgrim est la production n'est pas la densité spectrale de puissance de la fonction. Statistiques périodicités dans n'importe quel signal peut être mis en évidence grâce à une fonction d'autocorrélation. La transformée de fourier de l'autocorrélation du signal est la densité spectrale de puissance. Dominante des pics dans le PSD, autres qu'à 0 Hz correspond à l'effectif de la périodicité du signal (en Hz)...
Le moyen facile de le faire, c'est d'avoir à l'utilisateur d'appuyer sur un bouton, en rythme avec le temps, et de compter le nombre de robinets, divisé par le temps.
Je voudrais vous recommandons de vérifier la BASS audio de la bibliothèque et de la BASS.NET wrapper. Il a construit dans le BPMCounter classe.
Les détails de cette fonction spécifique peut être trouvé à
http://bass.radio42.com/help/html/0833aa5a-3be9-037c-66f2-9adfd42a8512.htm.