Question

Je suis en train de faire la détection de pas en temps réel d'un utilisateur chantant, mais je suis en cours d'exécution dans beaucoup de problèmes. J'ai essayé beaucoup de méthodes, y compris FFT (FFT Problème (Renvoie les résultats aléatoires) ) et de l'autocorrélation ( détection de hauteur d'autocorrélation renvoie des résultats aléatoires avec entrée micro ), mais je ne peux pas sembler obtenir des méthodes pour donner un bon résultat. Quelqu'un peut-il proposer une méthode pour le suivi de pas en temps réel ou comment améliorer une méthode que je l'ai déjà? Je ne peux pas sembler trouver une bonne C / C ++ méthodes pour la détection de pas en temps réel.

Merci,

Niall.

Edit:. Il suffit de noter, je l'ai vérifié que les données d'entrée micro est correcte, et que lors de l'utilisation d'une onde sinusoïdale les résultats sont plus ou moins la hauteur correcte

Edit: Désolé, c'est en retard, mais pour le moment, im visualiser le autocolleration en prenant les valeurs hors du tableau de résultats, et chaque indice, et tracer l'indice sur l'axe X et la valeur sur l'axe Y (les deux sont divisés par 100000 ou quelque chose, et im en utilisant OpenGL), brancher les données dans un hôte VST et en utilisant des plugins VST est pas une option pour moi. À l'heure actuelle, il ressemble à des points aléatoires. Suis-je le fais correctement, ou pouvez-vous s'il vous plaît me montrer torwards un code pour le faire ou me aider à comprendre comment visualiser les données audio brutes et les données d'auto-corrélation.

Était-ce utile?

La solution

Faire un pas en arrière ... Pour cela, vous travailler DOIT trouver un moyen de tracer des étapes intermédiaires de ce processus. Qu'est-ce que vous essayez de faire est pas particulièrement difficile, mais il est sujet aux erreurs et Checklist. Détourage, fenêtrage, mauvais câblage, aliasing, les décalages en continu, la lecture des mauvais canaux, l'axe de fréquence étranges FFT, les défauts d'impédance, les erreurs de taille de cadre ... qui sait. Mais si vous pouvez tracer les données brutes, puis tracer la FFT, tout deviendra clair.

Autres conseils

J'ai trouvé plusieurs implémentations open source de pas suivi en temps réel

Il y a aussi quelques pas trackers là-bas qui pourrait ne pas être conçu pour en temps réel, mais peut-être utilisable de cette façon pour tout ce que je sais, et pourrait aussi être utile comme référence pour comparer votre outil de suivi en temps réel:

Je sais que cette réponse ne va pas satisfaire tout le monde, mais ici va.

Ce truc est dur, très dur. Tout d'abord aller lire autant de tutoriels que vous pouvez trouver sur FFT, Autocorrélation, Ondelettes. Bien que je suis toujours aux prises avec DSP J'ai eu un aperçu de ce qui suit.

https://www.coursera.org/course/audio le cours est pas en cours d'exécution au moment, mais les vidéos sont encore disponibles.

http://miracle.otago.ac.nz/tartini/papers/ la thèse de Philip_McLeod_PhD.pdf sur le développement d'un algorithme de reconnaissance de terrain.

http://dsp.stackexchange.com tout un site dédié au traitement de signal numérique.

Si comme moi vous ne l'avez pas assez de mathématiques à suivre complètement les tutoriels ne donnent pas comme certains des schémas et des exemples me encore aidé à comprendre ce qui se passait.

Ensuite est des données de test et d'essai. vous écrivez une bibliothèque qui génère des fichiers de test à utiliser dans la vérification de votre algorithme / s.

1) Un générateur pur super simple onde sinusoïdale. Alors dites que vous êtes à la recherche à l'écriture YAT (Yet Another Tuner) puis utilisez votre générateur sinus pour créer une série de fichiers autour de 440Hz de dire 420-460Hz à différents incréments et voir comment votre code est sensible et précis. Peut-il se résoudre à l'intérieur 5Hz, 1Hz, encore plus beau?

2) mise à niveau Ensuite, votre générateur d'ondes sinusoïdales afin qu'il ajoute une série d'harmoniques les plus faibles du signal.

3) Viennent ensuite les variations du monde réel sur les harmoniques. Ainsi, alors que pour les instruments les plus à cordes, vous verrez une série d'harmoniques comme de simples multiples de la fréquence fondamentale f0, pour les instruments comme les clarinettes et flûtes en raison de la façon dont l'air se comporte dans la chambre des harmoniques paires seront absents ou très faible. Et pour certains instruments, mais il manque F0 peut être déterminée à partir de la distribution des autres harmoniques. Étant ce que l'F0 oreille humaine perçoit comme pas.

4) Jeter dans une certaine distorsion intentionnelle par décalage des fréquences des pics harmoniques de haut en bas d'une manière irrégulière

Le point est que si vous créez des fichiers avec des résultats connus alors il est plus facile de vérifier que ce que vous construisez fonctionne réellement, des bugs côté bien sûr.

Il y a aussi un certain nombre de « bibliothèques » contenant là des échantillons sonores. https://freesound.org de la série Coursera mentionné ci-dessus. http://theremin.music.uiowa.edu/MIS.html

être à côté conscient que votre micro est pas parfait et à moins que vous avez dépensé des milliers de dollars sur elle aura une gamme de réponse en fréquence assez variable. En particulier si vous travaillez avec des notes basses puis microphones moins chers, lisez les dans votre PC encastrables ou téléphone, ont rolloff significative à partir vers 80-100Hz. Pour raisonnablement bons externes que vous pourriez obtenir jusqu'à 30-40Hz. Allez trouver les données sur votre micro.

Vous pouvez également vérifier ce qui se passe en jouant le ton des haut-parleurs et l'enregistrement puis avec vous microphone préféré. Mais bien sûr, maintenant nous parlons de deux ensembles de courbes de réponse en fréquence.

En matière de performance, il existe un certain nombre de bibliothèques disponibles librement là-bas, bien que ne soyez au courant des différents modèles de licence.

Surtout ne donnent pas après vos premières tentatives. Bonne chance.

J'ai eu un problème similaire avec l'entrée du microphone sur un projet, je l'ai fait quelques années -. Avéré être en raison d'un décalage en courant continu

Assurez-vous de supprimer tout biais avant de tenter FFT ou tout autre méthode que vous utilisez.

Il est également possible que vous rencontriez des problèmes de marge de sécurité ou clipsage.

Les graphiques sont la meilleure façon de diagnostiquer la plupart des problèmes avec audio.

Voici le code source C ++ pour un inhabituel algorithme en deux étapes que j'ai conçu qui peut faire en temps réel Détection Pitch polyphoniques fichiers MP3 en cours de lecture sur Windows. Cette application gratuite ( PitchScope joueur , disponible sur le Web) est fréquemment utilisé pour détecter les notes d'un solo de guitare ou saxophone sur un enregistrement MP3. L'algorithme est conçu pour détecter le pas le plus dominant (une note de musique) à un moment donné dans le temps dans un fichier de musique MP3. Onsets sont avec précision Remarque inférées par un changement significatif dans le pas le plus dominant (une note musicale) à tout moment pendant l'enregistrement MP3.

Quand une seule touche est enfoncée sur un piano, ce que nous entendons est non seulement une fréquence de vibration sonore, mais composite de multiples vibrations sonores se produisant à des fréquences différentes reliées mathématiquement. Les éléments de ce composite de vibrations à des fréquences différentes sont appelées harmoniques ou partiels. Par exemple, si on appuie sur la touche centrale C sur le piano, les fréquences individuelles des harmoniques du composite commenceront à 261,6 Hz comme la fréquence fondamentale, 523 Hz serait la 2ème harmonique, 785 Hz serait la 3ème harmonique, 1046 Hz serait soit la quatrième harmonique, etc. les harmoniques ultérieures sont des multiples entiers de la fréquence fondamentale, 261,6 Hz (ex: 2 x 261,6 = 523, 3 x 261,6 = 785, 4 x 261,6 = 1046). Lié au fond, est un instantané des réels harmoniques qui se produisent pendant un enregistrement MP3 polyphonique d'un solo de guitare.

Au lieu d'une FFT, j'utilise une version modifiée DFT transformée, avec un espacement de fréquence logarithmique, d'abord détecter ces possibles harmoniques en recherchant des fréquences avec des niveaux de pointe (voir schéma ci-dessous). En raison de la façon que je recueillir des données pour mon journal modifié DFT, je n'ai pas d'appliquer une fonction de fenêtrage au signal, ni n'ajouter et se chevauchent. Et je l'ai créé le DFT donc ses canaux de fréquence sont situés logarithmiquement afin d'aligner directement avec les fréquences où les harmoniques sont créées par les notes sur une guitare, saxophone, etc.

maintenant à la retraite, j'ai décidé de libérer le code source pour mon moteur de détection de pas dans une application de démonstration gratuite appelée PitchScope joueur . PitchScope Player est disponible sur le web, et vous pouvez télécharger le fichier exécutable pour Windows pour voir mon algorithme au travail sur un fichier mp3 de votre choix. Le lien ci-dessous pour GitHub.com vous mènera à mon code source complet où vous pouvez voir comment je perçois les harmoniques avec une transformation DFT personnalisée logarithmiques, puis chercher partials (harmoniques) dont les fréquences satisfont à la relation entière correcte qui définit un ' pas ».

My Pitch algorithme de détection est en fait un processus en deux étapes: a) D'abord le ScalePitch est détectée ( 'ScalePitch' a 12 valeurs de pas possible: {E, F, F #, G, G #, A, A #, b, C, C #, D, D #}) b) et après ScalePitch est déterminé, le Octave est calculée en examinant tous les harmoniques pour les 4 possibles notes Octave-candidat. L'algorithme est conçu pour détecter le pas le plus dominant (une note de musique) à un moment donné dans le temps dans un fichier MP3 polyphonique. Cela correspond généralement aux notes d'un solo instrumental. Les personnes intéressées par le code source C de mon deux étapes pitch algorithme de détection pourrait vouloir commencer à la fonction Estimate_ScalePitch () dans le fichier SPitchCalc.cpp à GitHub.com. https://github.com/CreativeDetectors/PitchScope_Player

Voici l'image d'un logarithmiques DFT (créé par mon logiciel C ++) pendant 3 secondes d'un solo de guitare sur un enregistrement mp3 polyphonique. Il montre comment les harmoniques apparaissent pour les notes individuelles sur une guitare, tout en jouant un solo. Pour chaque note sur ce logarithmiques DFT nous pouvons voir ses multiples harmoniques s'étendant verticalement, parce que chaque harmonIC aura le même temps de largeur. Après l'octave de la note est déterminée, alors nous savons que la fréquence du fondamental.

 ici

Consultez aubio et une bibliothèque open source qui comprend plusieurs état de l'art des méthodes de suivi de terrain.

Jetez un oeil à cet exemple d'application:

http://www.codeproject.com/KB/audio-video /SoundCatcher.aspx

Je me rends compte de l'application est en C # et vous avez besoin C ++, et je sais que cela est .Net / Windows et que vous êtes sur un mac ... Mais je me suis dit sa mise en œuvre FFT pourrait être un point de référence de départ. à son essayer de comparer votre implémentation FFT. (Son est itératif, en largeur première version de FFT de Cooley-Tukey). Sont-ils semblables?

En outre, le comportement « au hasard » que vous décrivez peut-être parce que vous saisir des données renvoyées par votre carte son directement sans assembler les valeurs de la tableau d'octets correctement. Avez-vous demandé votre carte son à l'échantillon des valeurs 16 bits, et il a donné un octet tableau pour stocker les valeurs? Si oui, rappelez-vous que deux octets consécutifs dans le tableau retourné constituent un échantillon audio 16 bits.

code Java pour un détecteur réel en temps réel est disponible à http://code.google.com / p / freqazoid / .

Il fonctionne assez bien sur tout en temps réel post-2008 ordinateur exécutant Java. Le projet a été abandonné et pourrait être repris par toute partie intéressée. Contactez-moi si vous voulez plus de détails.

J'ai posé une question similaire ici:

C / C ++ / Obj-C algorithme en temps réel pour déterminer la note (non pitch) à partir de l'entrée Vocal

EDIT:

Performous contient un module de C ++ pour la détection de hauteur en temps réel

algorithme Pitch-Tracking Yin

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top