web-dev-qa-db-fra.com

Algorithmes pour déterminer la clé d'un échantillon audio

Je suis intéressé par la détermination de la clé musicale d'un échantillon audio. Comment un algorithme pourrait-il (ou pourrait-il) essayer d'approcher la clé d'un échantillon audio musical?

Antares Autotune et Melodyne sont deux logiciels qui font ce genre de chose.

Quelqu'un peut-il donner une explication un peu profane sur la façon dont cela fonctionnerait? Pour déduire mathématiquement la tonalité d'une chanson en analysant le spectre de fréquences pour les progressions d'accords, etc.

Ce sujet m'intéresse beaucoup!

Edit - sources brillantes et une mine d'informations à trouver auprès de tous ceux qui ont contribué à cette question.

Surtout de: the_mandrill et Daniel Brückner.

53
Alex

Cela vaut la peine d'être conscient qu'il s'agit d'un problème très délicat et que si vous n'avez pas d'expérience en traitement du signal (ou que vous souhaitez en savoir plus), vous avez un temps très frustrant devant vous. Si vous prévoyez de lancer quelques FFT sur le problème, vous n'irez pas très loin. J'espère que vous avez de l'intérêt car c'est un domaine vraiment fascinant.

Au départ, il y a le problème de la reconnaissance de hauteur, qui est raisonnablement facile à faire pour les instruments monophoniques simples (par exemple la voix) en utilisant une méthode telle que l'autocorrélation ou le spectre de somme harmonique (par exemple, voir le lien de Paul R.). Cependant, vous constaterez souvent que cela donne de mauvais résultats: vous obtiendrez souvent la moitié ou le double de la hauteur que vous attendiez. Cela s'appelle pitch période doublant ou erreurs d'octave et cela se produit essentiellement parce que la FFT ou l'autocorrélation suppose que les données ont des caractéristiques constantes dans le temps. Si vous avez un instrument joué par un humain, il y aura toujours des variations.

Certaines personnes abordent le problème de la reconnaissance key comme étant une question de faire d'abord la reconnaissance de hauteur, puis de trouver la clé à partir de la séquence de notes. C'est incroyablement difficile si vous avez autre chose qu'une séquence monophonique de hauteurs. Si vous avez une séquence monophonique de hauteurs, ce n'est toujours pas une méthode claire pour déterminer la tonalité: comment vous gérez les notes chromatiques, par exemple, ou pour déterminer si c'est majeur ou mineur. Vous devez donc utiliser une méthode similaire à celle de Krumhansl algorithme de recherche de clés .

Donc, étant donné la complexité de cette approche, une alternative est de regarder toutes les notes jouées en même temps. Si vous avez des accords, ou plus d'un instrument, vous aurez une riche soupe spectrale de nombreuses sinusoïdes jouant à la fois. Chaque note individuelle est composée de plusieurs harmoniques sur une fréquence fondamentale, donc A (à 440Hz) sera composé de sinusoïdes à 440, 880, 1320 ... De plus, si vous jouez un E (voir ceci diagramme pour les pas) alors c'est 659,25 Hz qui est presque une fois et demie celle de A (en fait 1,498). Cela signifie que chaque 3ème harmonique de A coïncide avec chaque 2ème harmonique de E. C'est la raison pour laquelle les accords semblent agréables, car ils partagent des harmoniques. (en passant, toute la raison pour laquelle l'harmonie occidentale fonctionne est due à la bizarrerie du destin que la douzième racine de 2 à la puissance 7 est près de 1,5)

Si vous avez regardé au-delà de cet intervalle de 5e aux accords majeurs, mineurs et autres, vous trouverez d'autres ratios. Je pense que de nombreuses techniques de recherche clés énuméreront ces rapports et rempliront ensuite un histogramme pour chaque pic spectral du signal. Donc, dans le cas de la détection de l'accord A5, vous vous attendez à trouver des pics à 440, 880, 659, 1320, 1760, 1977. Pour B5, ce sera 494, 988, 741, etc. Créez donc un histogramme de fréquence et pour chaque crête sinusoïdale dans le signal (par exemple à partir du spectre de puissance FFT) incrémente l'entrée d'histogramme. Ensuite, pour chaque clé A-G, comptez les bacs de votre histogramme et ceux qui contiennent le plus d'entrées sont les plus susceptibles d'être votre clé.

C'est juste une approche très simple mais peut être suffisante pour trouver la clé d'un accord gratté ou soutenu. Vous devrez également découper le signal en petits intervalles (par exemple 20 ms) et analyser chacun d'eux pour construire une estimation plus robuste.

ÉDITER:
Si vous voulez expérimenter, je vous suggère de télécharger un paquet comme Octave ou CLAM ce qui le rend plus facile pour visualiser des données audio et exécuter des FFT et d'autres opérations.

Autres liens utiles:

  • Ma thèse de doctorat sur certains aspects de la reconnaissance de la hauteur - les mathématiques sont un peu lourdes mais le chapitre 2 est (je l'espère) une introduction assez accessible aux différentes approches de la modélisation audio musicale
  • http://en.wikipedia.org/wiki/Auditory_scene_analysis - L'analyse de la scène auditive de Bregman qui, bien que ne parlant pas de musique, a des découvertes fascinantes sur la façon dont nous percevons les scènes complexes
  • Dan Ellis a rédigé d'excellents articles dans ce domaine et dans des domaines similaires
  • Keith Martin a quelques approches intéressantes
57
the_mandrill

J'ai travaillé sur le problème de la transcription d'enregistrements polyphoniques de CD en partitions pendant plus de deux ans à l'université. Le problème est notoirement difficile. Les premiers articles scientifiques liés au problème remontent aux années 1940 et à ce jour, il n'y a pas de solutions solides pour le cas général.

Toutes les hypothèses de base que vous lisez habituellement ne sont pas tout à fait exactes et la plupart d'entre elles sont suffisamment fausses pour qu'elles deviennent inutilisables pour tout sauf des scénarios très simples.

Les fréquences des harmoniques sont pas des multiples de la fréquence fondamentale - il y a des effets non linéaires de sorte que les partiels élevés s'éloignent de la fréquence attendue - et pas seulement quelques Hertz; il n'est pas rare de trouver le 7e partiel là où vous attendiez le 6e.

Les transformations de Fourier font not play Nice avec l'analyse audio parce que les fréquences qui l'intéressent sont espacées de façon logarithmique tandis que la transformation de Fourier donne des fréquences linéairement espacées. Aux basses fréquences, vous avez besoin d'une résolution haute fréquence pour séparer les hauteurs voisines - mais cela donne une mauvaise résolution temporelle et vous perdez la capacité des notes séparées jouées en succession rapide.

Un enregistrement audio contient (probablement) pas toutes les informations nécessaires pour reconstruire la partition. Une grande partie de notre perception musicale se produit dans nos oreilles et notre cerveau. C'est pourquoi certains des systèmes les plus performants sont des systèmes experts dotés de vastes référentiels de connaissances sur la structure de la musique (occidentale) qui ne dépendent que d'une petite partie du traitement du signal pour extraire les informations de l'enregistrement audio.

De retour à la maison, je vais parcourir les articles que j'ai lus et choisir les 20 ou 30 les plus pertinents et les ajouter ici. Je suggère vraiment de les lire avant de décider de mettre en œuvre quelque chose - comme indiqué précédemment, la plupart des hypothèses courantes sont quelque peu incorrectes et vous ne voulez vraiment pas redécouvrir toutes ces choses trouvées et analysées pendant plus de 50 ans lors de la mise en œuvre et des tests.

C'est un problème difficile, mais c'est aussi très amusant. J'aimerais vraiment savoir ce que vous avez essayé et comment cela a fonctionné.


Pour l'instant, vous pouvez jeter un œil à la transformation Constant Q, la distribution Cepstrum et Wigner (–Ville). Il existe également de bons articles sur la façon d'extraire la fréquence des décalages dans la phase des spectres de Fourier de courte durée - cela permet d'utiliser des tailles de fenêtres très courtes (pour une résolution temporelle élevée) car la fréquence peut être déterminée avec une précision plusieurs 1000 fois plus grande. que la résolution de fréquence de la transformation de Fourier sous-jacente.

Toutes ces transformations correspondent bien mieux au problème du traitement audio que les transformations de Fourier ordinaires. Pour améliorer les résultats des transformations de base, jetez un œil au concept de réaffectation d'énergie.

17
Daniel Brückner

Vous pouvez utiliser Transformée de Fourier pour calculer le spectre de fréquences à partir d'un échantillon audio. À partir de cette sortie, vous pouvez utiliser valeurs de fréquence pour des notes particulières pour transformer cela en une liste de notes entendues pendant l'échantillon. Choisir les notes les plus fortes entendues par échantillon sur une série d'échantillons devrait vous donner une carte décente des différentes notes utilisées, que vous pouvez comparer aux différentes gammes musicales pour obtenir une liste des gammes possibles qui contiennent cette combinaison de notes.

Pour aider à décider quelle gamme particulière est utilisée, prenez une note (sans jeu de mots) des notes les plus fréquemment entendues. Dans la musique occidentale, la racine de la gamme est généralement la note la plus courante, suivie de la cinquième, puis de la quatrième. Vous pouvez également rechercher des modèles tels que commun accords , arpèges , ou progressions .

La taille de l'échantillon sera probablement importante ici. Idéalement, chaque échantillon sera une seule note (afin que vous n'obteniez pas deux accords dans un échantillon). Si vous filtre sortez et vous concentrez sur les basses fréquences, vous pourrez peut-être utiliser les pics de volume ("clics") normalement associés aux instruments de percussion afin de déterminer le tempo du morceau et de "verrouiller" votre algorithme au rythme de la musique. Commencez par des échantillons d'un demi-temps et ajustez-les à partir de là. Soyez prêt à jeter certains échantillons qui ne contiennent pas beaucoup de données utiles (comme un échantillon prélevé au milieu d'une diapositive).

6
bta

Autant que je sache à partir de cet article , différentes touches ont chacune leurs propres fréquences communes, donc il analyse probablement l'échantillon audio pour détecter les notes et accords les plus courants. Après tout, vous pouvez avoir plusieurs touches qui ont la même configuration de dièses et de bémols, la différence étant la note sur laquelle la touche commence et donc les accords sur lesquels de telles touches, il semble donc à quelle fréquence les notes et accords significatifs apparaissent serait la seule vraie façon de comprendre ce genre de chose. Je ne pense pas vraiment que vous puissiez obtenir une explication profane des formules mathématiques réelles sans omettre beaucoup d'informations.

Notez que cela vient de quelqu'un qui n'a absolument aucune expérience dans ce domaine, sa première exposition étant l'article lié à cette réponse.

5
JAB

C'est un sujet complexe, mais un algorithme simple pour déterminer une seule touche (une seule note) ressemblerait à ceci:

Faites une transformation de Fourier sur, disons, 4096 échantillons (la taille exacte dépend de vos demandes de résolution) sur une partie de l'échantillon qui contient la note. Déterminez le pic de puissance dans le spectre - c'est la fréquence de la note.

Les choses se resserrent si vous avez un accord, différents "instruments/effets" ou un motif musical non homophonique.

3
MRalwasser

L'analyse de la clé n'est pas la même chose que l'analyse des notes. Malheureusement, tout le concept de clé est quelque peu ambigu, les différentes définitions ont généralement tendance à ne partager que le concept de tonique, c'est-à-dire une hauteur/accord central. Même si un bon système de transcription automatique existait, il n'y a pas d'algorithme fiable pour déterminer la clé.

1
Musicologist

Si vous avez besoin de classer un tas de chansons en ce moment, alors sourcez le problème avec quelque chose comme Mechanical Turk .

1
Nathan

Vous avez d'abord besoin d'un algorithme de détection de hauteur (par exemple autocorrélation ).

Vous pouvez ensuite utiliser votre algorithme de détection de hauteur pour extraire la hauteur sur un certain nombre de fenêtres temporelles courtes. Après cela, vous aurez besoin de voir avec quelle tonalité musicale les notes échantillonnées correspondent le mieux.

1
Paul R