Générer les différentes positions possibles d'un accord à la guitare

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 :)

Salut Camille,

Je ne vais pas te répondre en tant que développeur, mais en tant que (vieux) guitariste ;) Je suppose que tu souhaites faire ça pour le fun, le plaisir de mixer tes 2 passions. Mais je ne pense pas que cela aie un réel intérêt pratique, car il y a 2 bonnes raisons pour moi de ne pas jouer tous les accords théoriquement possibles : ils ne sonnent pas tous bien, et ils sont parfois injouables. Si tu regardes à nouveau le site dont tu parles, tu verras par exemple que la 5ème position est physiquement injouable, même si elle respecte tes conditions de jouabilité théoriques. Donc cet algo n’est pas vraiment parfait.

Pour t’amuser, je te suggèrerais d’essayer quelque chose de plus simple : générer les différentes positions des différents intervalles (tierce, quinte, sixte…). Comme il ne s’agit que de 2 notes sur 2 cordes, cela sera beaucoup plus facile et fiable. Et cela a un énorme intérêt du point de vue pratique de l’instrument : les méthodes conventionnelles se focalisent sur des positions d’accords et de gammes à apprendre par coeur, mais si tu maitrises à fond le manche d’un point de vue intervallique, toutes ces positions sont retrouvables aisément et instantanément. C’est ce qu’explique cet excellent livre : http://www.amazon.com/Intervallic-Fretboard-Towards-improvising-Guitar/dp/0983049807 que je te recommande vivement ;)

1 « J'aime »

D’accord avec toi @goldoraf, j’utiliserai plutôt une base de donnée de tous les accords identifiés dans un bouquin par exemple …

1 « J'aime »

je travaille actuellement sur un algo qui ferais ca.

Human Coders - Le centre de formation recommandé par les développeur·se·s pour les développeur·se·s