12
votes

Y a-t-il un algorithme pour obtenir la balance et la clé d'une chanson d'une série de notes?

J'ai une série de notes MIDI stockées dans la matrice sous forme de numéro de note MIDI. Y a-t-il un algorithme qui me procurerait la clé et l'échelle de la chanson représentée par ces notes?


6 commentaires

Il y a quelques méthodes pour le faire. Votre série de notes est-elle une seule note à la fois? Ou avez-vous des accords?


Je doute que ce soit possible. Juste par exemple, chaque échelle majeure a une échelle "relative mineure", ce qui signifie exactement la même séquence de notes peut être considérée comme de deux échelles entièrement différentes (par exemple, C major est également mineure).


@Brad: Ils sont une série de notes qu'une seule note à la fois. Je n'ai pas d'accords.


@JerryCoffin: Si vous obtenez la clé de la chanson en premier, nous serions en mesure de détecter s'il s'agit d'un cm ou d'un matin.


@Jerrycoffin, il y a plusieurs algorithmes pour ce faire, avec une confiance décente. Ils travaillent souvent de la même manière que les humains ... indices contextuels.


Pour une seule échelle régulière (les mêmes 7 notes), il y a en fait 7 modes différents .. majeur et mineur ne sont que deux d'entre eux.


4 Réponses :


3
votes

Il y a un Nombre de Principaux algorithmes autour, en particulier ceux de Carol Krumhansl (la plupart des papiers que j'ai vu toujours citer les méthodes de Krumhansl)


0 commentaires

18
votes

Si vous utilisez Python, vous pouvez utiliser la boîte à outils musical21 pour le faire:

key1 = score.analyze('Krumhansl')
key2 = score.analyze('AardenEssen')


2 commentaires

Ayez-vous une prise en charge de l'audio brut en termes d'analyse de l'autre à MIDI ou d'appliquer directement ces algorithmes aux fichiers audio?


Très peu, mais pas zéro, soutien. Voir le module MUSIC21.AudiOSSearch. Cependant, vous éteignez beaucoup mieux en utilisant un audio dédié au programme MIDI ou MUSICXML, puis en chargement de ces résultats dans MUSIC21.



8
votes

L'algorithme de Carol Krumhansl est le plus connu. L'idée de base est très simple. Un échantillon de référence d'emplacements est dessiné de la musique dans une clé connue et transposée aux 11 autres touches. Les clés majeures et mineures doivent être traitées séparément. Ensuite, un échantillon de terrains est dessiné de la musique dans une clé inconnue. Cela donne un vecteur de hauteur de 12 composants pour chacun des samples de référence 24 et un échantillon inconnu, quelque chose comme: xxx

calculer le coefficient de corrélation entre le vecteur de pas inconnu et chaque vecteur de hauteur de référence et choisissez la meilleure correspondance.

Craig Sapp a écrit (Copyright) Code, disponible à http: //sig.sapp.org/doc/examples/humextra/keycor/

David Temperley et Daniel Sleeor a développé un algorithme différent et plus difficile dans le cadre de leur paquet (protégé par le droit d'auteur) Melisma, disponible à http://www.link.cs.cmu.edu/music -Analyse / FTP-Contents.html

A (gratuit) La version MATLAB de l'algorithme de Krumhansl est disponible auprès de T. Eerola et P. ToIVIAINEN dans leur boîte à outils MIDI: https://www.jyu.fi/hum/laitokset / MUSIIKKI / FR / RECHERCHE / COE / MATÉRIAUX / MIDITOOLBOX


1 commentaires

Une belle description de l'algorithme de recherche de clé Krumhansl-schmuckler ici: rnhart.net/articles/key -Finding



3
votes

En supposant qu'aucun changement clé, un algorithme simple pourrait être basée sur un histogramme de classe de pas (un tableau avec 12 entrées pour chaque classe de pas (chaque note dans une octave)), lorsque vous obtenez une note que vous ajoutez un dans l'entrée correcte , puis à la fin, vous aurez très probablement deux notes sont les plus fréquentes qui seront 7 demi-tons (ou entrées) représentant à part la tonique et la dominante, la tonique étant la note que vous êtes à la recherche et l'être dominant 7 demi-tons au-dessus ou 5 demi-tons ci-dessous.

La bonne chose au sujet de cette approche est qu'il est indépendant de l'échelle, elle repose sur la tonique et la dominante étant les deux plus importantes notes et se produisant plus souvent. L'algorithme pourrait probablement être plus robuste en donnant plus de poids aux première et dernières notes de grandes subdivisions d'une pièce.

En ce qui concerne la détection de l'échelle, puis une fois que vous avez la clé que vous pouvez générer une liste des notes que vous avez au-dessus d'un certain seuil dans votre histogramme comme des décalages de cette note de base, donc nous allons vous dire détectez une clé de A (d'avoir a et E se produisent le plus souvent) et les notes que vous avez sont ACDEG alors vous obtenir les compensations 0 3 5 7 10 , qui recherche dans 0 commentaires