Bonjour à tous,
Je suis intrigué par les algorithmes permettant de générer les différentes positions d’un accord à la guitare. Voici l’exemple d’un site qui fait ça très bien : http://jguitar.com/chord?root=C&chord=Major
N’arrivant pas à trouver un algorithme de ce type open source, j’aimerais y plancher dessus. Et pourquoi pas, le développer en Ruby après.
Pour commencer, il me semble logique de décomposer l’accord en notes. Par exemple, C est l’accord de Do majeur, il est donc composé de 3 notes : Do (fondamentale), Mi (tierce majeur) et Sol (quinte juste).
Ensuite, la note la plus grave sera forcément Do, la fondamentale. Il me parait donc pertinent de commencer par chercher les différents moyens de jouer la note Do sur le manche. L’accord étant ici de 3 notes et comme il n’est possible que de jouer une seule note par corde, il sera inutile de cherche Do dans les 2 dernières cordes.
Ensuite, démarre la partie la plus floue. Une fois les différentes positions de la fondamentale identifiée, il faut trouver les différentes positions d’accord qu’on peut construire autour. A la guitare, hormis la fondamentale qui doit être la plus grave (sinon, on parle de renversement), les autres notes composant l’accord peuvent être dans un ordre quelconque et peuvent apparaitre plusieurs fois.
Voici toutes les occurrences de Do, Mi et Sol sur le manche :
Maintenant, il faut trouver les positions qui sont faisables. Voici un exemple de position acceptable :
(On ne joue pas la corde la plus grave (symbole X), et deux cordes, SOL et MI aigue, sont jouées ouvertes (symbole O))
Le coeur de l’algorithme est dans la définition d’une position “faisable”.
Pour chaque corde, plusieurs solutions sont possibles :
- Ne pas la jouer
- L’étouffer (cas où on ne veut pas jouer une corde, mais qu’on joue des cordes avant et après)
- La jouer à vide
- La jouer en mettant un doigt sur une case
- La jouer avec un barré afin de jouer plusieurs note avec le même doigt. Par exemple, sur cette position, l’index appuiera sur toutes les cases de la 8eme frette :
Pour résumer, cet algorithme serait de la forme suivante :
Entrées
- Accord (ex: “Sol mineur 7”)
- Type d’instrument (Basse, Guitare, Yukulélé)
- Accordage de l’instrument
Sortie
- Liste de positions de cet accord faisable par un guitariste.
Si vous connaissez des implémentations open source ou si vous avez des pistes pour coder cet algo, je suis preneur :)