Trouver un accord depuis des notes
- 34 réponses
- 11 participants
- 1 542 vues
- 18 followers
Djardin
19834
Drogué·e à l’AFéine
Membre depuis 19 ans
Sujet de la discussion Posté le 08/05/2020 à 23:15:28Trouver un accord depuis des notes
Yo !
je me disais que j'allais tenté un programme pour trouver un accord depuis des notes.
On en a parlé là :
https://fr.audiofanzine.com/le-pub-des-gentlemen/forums/t.71857,les-questions-auxquelles-on-a-pas-les-reponses-mais-un-afien-peut-les-avoir,post.10317118.html
En gros, je cherche à rentrer 4 notes et à avoir le nom de l'accord.
Je pensais partir sur une solution un peu simple :
je génère tous les accords possible et je vérifie si mes 4 notes sont dans chaque accord.
ça peut avoir l'air brute force, mais au final une liste de 15000 valeurs ça devrait se filtrer vite !
je me disais que j'allais tenté un programme pour trouver un accord depuis des notes.
On en a parlé là :
https://fr.audiofanzine.com/le-pub-des-gentlemen/forums/t.71857,les-questions-auxquelles-on-a-pas-les-reponses-mais-un-afien-peut-les-avoir,post.10317118.html
En gros, je cherche à rentrer 4 notes et à avoir le nom de l'accord.
Je pensais partir sur une solution un peu simple :
je génère tous les accords possible et je vérifie si mes 4 notes sont dans chaque accord.
ça peut avoir l'air brute force, mais au final une liste de 15000 valeurs ça devrait se filtrer vite !
Référence en matière de bon gout capillaire et vestimentaire.
homme à tête de zizi.
Dr Pouet
52037
Membre d’honneur
Membre depuis 20 ans
21 Posté le 12/05/2020 à 17:39:09
Un premier jet en python pour constituer la table de hachage (dicoAccords). Celle-ci contient des valeurs du genre :
pour dire que la séquence de notes Sol La# Do Mi se trouve dans l'accord Do7
(comme les crochets ne passent pas dans les messages du forum, il faut remplacer £ par un crochet ouvrant, et $ par un crochet fermant ; les lignes commentées sont les tests unitaires !)
'SolLa#DoMi': ['Do7']
pour dire que la séquence de notes Sol La# Do Mi se trouve dans l'accord Do7
(comme les crochets ne passent pas dans les messages du forum, il faut remplacer £ par un crochet ouvrant, et $ par un crochet fermant ; les lignes commentées sont les tests unitaires !)
Spoiler - Cliquer ici pour lire la suite
notesGammeDo = £"Do","Do#","Ré","Ré#","Mi","Fa","Fa#",
"Sol","Sol#","La","La#","Si"$
listeAccords = £
{ "suffixeNom" : "Maj", "notesAcc" : £0,4,7$ },
{ "suffixeNom" : "Min", "notesAcc" : £0,3,7$ },
{ "suffixeNom" : "7", "notesAcc" : £0,4,7,10$ },
$
dicoAccords = { }
def ajoutDico( dico, clef, valeur ):
if clef in dico:
dico£clef$.append( valeur )
else:
dico£clef$ = £valeur$
return
#dicoAccords = { "testNotes" : £"testAcco1", "testAcco2"$ }
#peuplerDico( dicoAccords, "testNotes", "testAcco3" )
#peuplerDico( dicoAccords, "test2", "accoPipo" )
#print( dicoAccords )
def chaineNotes( listeNotes, notesGamme ):
resu =""
for note in listeNotes:
resu += notesGamme£ note $
return resu
#print( chaineNotes( £0,4,7$, notesGammeDo ) )
def peuplerRenversements( dico, notesGamme, notes, nomAcc ):
renversement = notes
for i in range( len( notes ) ):
ajoutDico( dico, chaineNotes( renversement, notesGamme), nomAcc )
pivot = renversement.pop(0)
renversement.append(pivot)
return
#peuplerRenversements( dicoAccords, notesGammeDo, £0,4,7$, "DoMaj" )
#print( dicoAccords )
def peuplerAccordsTranspoRenvers( dico, notesGamme, notes, suffixeAcc ):
tailleGamme = len( notesGamme )
for transpo in range( tailleGamme ):
notesTransposees = £$
for uneNote in notes:
notesTransposees.append( (uneNote + transpo) % tailleGamme)
nomFondamentale = notesGamme£ notesTransposees£0$ $
peuplerRenversements( dico, notesGamme, notesTransposees,
nomFondamentale + suffixeAcc)
return
#peuplerAccordsTranspoRenvers( dicoAccords, notesGammeDo, £0,4,7$, "Maj" )
#print( dicoAccords )
def peupler( dico, listeAcc, notesGamme ):
for unAccord in listeAcc:
peuplerAccordsTranspoRenvers( dico, notesGamme, unAccord£"notesAcc"$,
unAccord£"suffixeNom"$ )
return
peupler( dicoAccords, listeAccords, notesGammeDo )
print( dicoAccords )
[ Dernière édition du message le 12/05/2020 à 17:44:06 ]
Dr Pouet
52037
Membre d’honneur
Membre depuis 20 ans
22 Posté le 12/05/2020 à 21:06:20
La version avec tous les accords de 3 ou 4 notes :
Ça fait déjà 624 entrées dans le dictionnaire (avec toutes les transpositions et renversements) !
On constate que le même groupe de notes peut correspondre à différents accords ; grâce notamment au dim / 6 / min 7 b5 / 7 b5 / Aug...
Exemples :
'RéMiSol#Si': ['Mi7', 'Sol#Min7b5']
'SolLa#DoRé#': ['DoMin 7', 'Ré#6']
'La#RéFa#': ['RéAug', 'Fa#Aug', 'La#Aug']
'FaSolSiDo#': ['Do#7b5', 'Sol7b5']
Ça fait déjà 624 entrées dans le dictionnaire (avec toutes les transpositions et renversements) !
On constate que le même groupe de notes peut correspondre à différents accords ; grâce notamment au dim / 6 / min 7 b5 / 7 b5 / Aug...
Exemples :
'RéMiSol#Si': ['Mi7', 'Sol#Min7b5']
'SolLa#DoRé#': ['DoMin 7', 'Ré#6']
'La#RéFa#': ['RéAug', 'Fa#Aug', 'La#Aug']
'FaSolSiDo#': ['Do#7b5', 'Sol7b5']
Spoiler - Cliquer ici pour lire la suite
notesGammeDo = £"Do","Do#","Ré","Ré#","Mi","Fa","Fa#",
"Sol","Sol#","La","La#","Si"$
listeAccords = £
{ "suffixeNom" : "Maj", "notesAcc" : £0,4,7$ },
{ "suffixeNom" : "Maj 7", "notesAcc" : £0,4,7,11$ },
{ "suffixeNom" : "7", "notesAcc" : £0,4,7,10$ },
{ "suffixeNom" : "Min", "notesAcc" : £0,3,7$ },
{ "suffixeNom" : "Min 7", "notesAcc" : £0,3,7,10$ },
{ "suffixeNom" : "Dim", "notesAcc" : £0,3,6,9$ },
{ "suffixeNom" : "Min7b5", "notesAcc" : £0,3,6,8$ },
{ "suffixeNom" : "Aug", "notesAcc" : £0,4,8$ },
{ "suffixeNom" : "Sus4", "notesAcc" : £0,5,7$ },
{ "suffixeNom" : "7sus4", "notesAcc" : £0,5,7,10$ },
{ "suffixeNom" : "Add9", "notesAcc" : £0,5,7,2$ },
{ "suffixeNom" : "#11", "notesAcc" : £0,5,6$ },
{ "suffixeNom" : "MinAdd9", "notesAcc" : £0,3,7,2$ },
{ "suffixeNom" : "6", "notesAcc" : £0,4,7,9$ },
{ "suffixeNom" : "6", "notesAcc" : £0,3,7,9$ },
{ "suffixeNom" : "Min Maj 7", "notesAcc" : £0,3,7,11$ },
{ "suffixeNom" : "7b5", "notesAcc" : £0,4,6,10$ },
{ "suffixeNom" : "Aug7", "notesAcc" : £0,4,8,10$ },
$
dicoAccords = { }
doublons = set( £$ )
def ajoutDico( dico, clef, valeur ):
if clef in dico:
dico£clef$.append( valeur )
doublons.add( valeur£2:$ )
else:
dico£clef$ = £valeur$
return
#dicoAccords = { "testNotes" : £"testAcco1", "testAcco2"$ }
#peuplerDico( dicoAccords, "testNotes", "testAcco3" )
#peuplerDico( dicoAccords, "test2", "accoPipo" )
#print( dicoAccords )
def chaineNotes( listeNotes, notesGamme ):
resu =""
for note in listeNotes:
resu += notesGamme£ note $
return resu
#print( chaineNotes( £0,4,7$, notesGammeDo ) )
def peuplerRenversements( dico, notesGamme, notes, nomAcc ):
renversement = notes
for i in range( len( notes ) ):
ajoutDico( dico, chaineNotes( renversement, notesGamme), nomAcc )
pivot = renversement.pop(0)
renversement.append(pivot)
return
#peuplerRenversements( dicoAccords, notesGammeDo, £0,4,7$, "DoMaj" )
#print( dicoAccords )
def peuplerAccordsTranspoRenvers( dico, notesGamme, notes, suffixeAcc ):
tailleGamme = len( notesGamme )
for transpo in range( tailleGamme ):
notesTransposees = £$
for uneNote in notes:
notesTransposees.append( (uneNote + transpo) % tailleGamme)
nomFondamentale = notesGamme£ notesTransposees£0$ $
peuplerRenversements( dico, notesGamme, notesTransposees,
nomFondamentale + suffixeAcc)
return
#peuplerAccordsTranspoRenvers( dicoAccords, notesGammeDo, £0,4,7$, "Maj" )
#print( dicoAccords )
def peupler( dico, listeAcc, notesGamme ):
for unAccord in listeAcc:
peuplerAccordsTranspoRenvers( dico, notesGamme, unAccord£"notesAcc"$,
unAccord£"suffixeNom"$ )
return
peupler( dicoAccords, listeAccords, notesGammeDo )
#print( dicoAccords )
#print( doublons )
print( dicoAccords£ "DoRé#SolSi" $ )
print( "Nombre d'entrées dans le dictionnaire : " + str(len(dicoAccords)) )
Dr Pouet
52037
Membre d’honneur
Membre depuis 20 ans
23 Posté le 12/05/2020 à 21:11:12
Merci à christian_r pour le tableau !
Et j'ai une question orientée harmonie : y a-t-il une règle assez simple pour choisir en # et b ? Sur ce tableau on voit qu'il y a le choix pour F# et G#. Mais ma question est plus générale et porte sur toutes les fondamentales. Notamment D#, Eb etc etc
Et j'ai une question orientée harmonie : y a-t-il une règle assez simple pour choisir en # et b ? Sur ce tableau on voit qu'il y a le choix pour F# et G#. Mais ma question est plus générale et porte sur toutes les fondamentales. Notamment D#, Eb etc etc
KoalaMan
19513
Drogué·e à l’AFéine
Membre depuis 20 ans
24 Posté le 12/05/2020 à 21:32:28
On essaye en général d'empiler des tierces, et on ajuste ensuite avec les altérations pour choisir la couleur voulue. Mais tu le sais déjà.
On essaye également de n'avoir qu'un type d'altération (en musique tonale en tout cas), donc pas de Eb G A# D.
Will avait raison en parlant de tonalité : la plupart des morceaux sont encore tonaux, donc si on a une possibilité de rentrer la tonalité, ça limite pas mal le champs des possibles.
On essaye également de n'avoir qu'un type d'altération (en musique tonale en tout cas), donc pas de Eb G A# D.
Will avait raison en parlant de tonalité : la plupart des morceaux sont encore tonaux, donc si on a une possibilité de rentrer la tonalité, ça limite pas mal le champs des possibles.
On ne voit bien qu'avec les yeux. Le cœur est invisible pour l'essentiel.
Dr Pouet
52037
Membre d’honneur
Membre depuis 20 ans
25 Posté le 12/05/2020 à 21:36:26
Citation :
On essaye également de n'avoir qu'un type d'altération (en musique tonale en tout cas), donc pas de Eb G A# D.
Ça c'est ok, pour l'instant il n'y a que des #
Citation :
si on a une possibilité de rentrer la tonalité
A priori non.
Mais est-ce que les informations :
- note fondamentale de l'accord (C ou D# ou Eb ou ...)
- type d'accord ( min7, aug ...)
suffiraient ?
KoalaMan
19513
Drogué·e à l’AFéine
Membre depuis 20 ans
26 Posté le 12/05/2020 à 21:58:50
Pas pour faire une analyse tonale, mais pour pouvoir rejouer les mêmes notes sur un autre instrument, oui.
Si j'ai bien compris l'objectif premier, on se fiche de l'enharmonie des accords, on veut juste pouvoir reproduire ces notes exactement, éventuellement les transposer, sur un autre instrument.
Si j'ai bien compris l'objectif premier, on se fiche de l'enharmonie des accords, on veut juste pouvoir reproduire ces notes exactement, éventuellement les transposer, sur un autre instrument.
On ne voit bien qu'avec les yeux. Le cœur est invisible pour l'essentiel.
Dr Pouet
52037
Membre d’honneur
Membre depuis 20 ans
27 Posté le 12/05/2020 à 22:04:54
Je crois que c’est ça. Mais c’est plutôt Djardin qui sait quel était l’objectif premier dans sa tête.
KoalaMan
19513
Drogué·e à l’AFéine
Membre depuis 20 ans
28 Posté le 12/05/2020 à 22:06:20
On ne voit bien qu'avec les yeux. Le cœur est invisible pour l'essentiel.
Djardin
19834
Drogué·e à l’AFéine
Membre depuis 19 ans
29 Posté le 12/05/2020 à 22:17:08
l'objectif c'était de s'amuser à coder un bout de truc
En vrai, l'objectif c'est que je joue avec quelqu'un qui n'a aucune idée de ce qu'il joue.
Donc il pose ses doigts et trouve que ça sonne.
Puis ensuite pour écrire des arrangements et un accompagnement il faut donc trouver les accords.
(ces saloperies de chanteurs qui se mettent à la guitare, mais sans apprendre !)
L'idée à la base c'est de donner les notes et d'avoir les accords.
Mais je note plein d'idées cools : trouver la tonalité du morceau, trouver des renversements, partir d'une position (et pas des notes des notes).
Après, mis à part la technique de : je fais une liste d'accords possible et je cherche dedans, quelqu'un à testé de faire un truc avec un algo ? en cherchant des intervalles ?
même en fixant que le plus grave est la fondamentale, hein, juste voir si un truc marche.
En vrai, l'objectif c'est que je joue avec quelqu'un qui n'a aucune idée de ce qu'il joue.
Donc il pose ses doigts et trouve que ça sonne.
Puis ensuite pour écrire des arrangements et un accompagnement il faut donc trouver les accords.
(ces saloperies de chanteurs qui se mettent à la guitare, mais sans apprendre !)
L'idée à la base c'est de donner les notes et d'avoir les accords.
Mais je note plein d'idées cools : trouver la tonalité du morceau, trouver des renversements, partir d'une position (et pas des notes des notes).
Après, mis à part la technique de : je fais une liste d'accords possible et je cherche dedans, quelqu'un à testé de faire un truc avec un algo ? en cherchant des intervalles ?
même en fixant que le plus grave est la fondamentale, hein, juste voir si un truc marche.
Référence en matière de bon gout capillaire et vestimentaire.
homme à tête de zizi.
KoalaMan
19513
Drogué·e à l’AFéine
Membre depuis 20 ans
30 Posté le 12/05/2020 à 22:21:06
À partir du moment où tu as la fondamentale, et j'imagine la tonalité, bah tu as tous tes accords facilement en utilisant les intervalles.
On ne voit bien qu'avec les yeux. Le cœur est invisible pour l'essentiel.
- < Liste des sujets
- Charte