parmentelat / moocpython

16 stars 7 forks source link

Guitar #13

Open Karduin opened 6 years ago

Karduin commented 6 years ago

@parmentelat Bonjour Thierry, Sujet qui intéresse, étant moi aussi guitariste et bassiste. Sur le schéma les notes sur les cordes à vides ne sont pas représentées. C'est volontaire ou c'est un peu plus difficile ? J'ai rajouté un petite explication pour les non musiciens, si tu pense que ce n'est pas utile n’hésite pas à le supprimer. ;-)

PapiSido commented 6 years ago

Intéressant!! Je ne suis pas guitariste, même plutôt à l'autre bout de la chaîne: musique ancienne et flute à bec, un peu de musique irlandaise aussi , mais intéressé aux questions musicales ( modes, tempéraments etc..). J'avais commencé des choses en java (cf mon repository ) et j'envisageais javascript + WebAudioAPI ( un autre MOOC qui malheureusement a démarré à peu prés en même temps que le MOOC Python, et qui du fait s'est trouvé relégué au second plan). Donc je vous suis et si vous acceptez d'autres types de musique, je jouerai quelques "partitions" aussi

parmentelat commented 6 years ago

@Karduin : j'ai intégré ton explication directement dans le README
Je n'ai pas sous-titré les cordes à vide parce que je n'y ai pas pensé en fait; non ça ne paraît pas trop difficile, et ce serait en effet pertinent si on ou voulait traiter d'autres gammes..

@PapiSido : c'est un sujet essentiellement utilitaire; en fait je m'apprêtais à dessiner ça à la main lorsque je me suis aperçu que c'était assez simple à faire avec matplotlib et que ça ferait une illustration. Dans l'état c'est très basique, mais si ça inspire il ne faut pas hésiter à proposer des améliorations, ou des supports pour d'autres instruments...

Karduin commented 6 years ago

Je vais essayer avec pygame, dans un premier temps sur 12 cases. J'ai bricolé un mini set d'images que je met à disposition.

Karduin commented 6 years ago

J'ai ajouté une squelette de classe (voir gamme.py).

Karduin commented 6 years ago

ça marche pas trop mal... J'aime pas trop ce passage dans le code..

            if idx > 11 : # Si j'arrive au bout du tuple je retourne au début
                idx = idx - 12 # Il doit y avoir plus pythonique...

Sinon voila pour l'utilisation

gamme1 = gamme('majeure', (0, 2, 2, 1, 2, 2, 2, 1))
print(gamme1.nom)

majeure

gamme1.inter()

1/2 ton 1 ton 1 ton 1/2 ton 1 ton 1 ton 1 ton 1/2 ton

gamme1.tone("C")
print(gamme1.myScale)

('C', 'D', 'E', 'F', 'G', 'A', 'B')

mi = corde("E")
mi.cases()
print(mi.caseNote)

('E', 'F', 'G', 'A', 'B', 'C', 'D')

print(mi.caseNumber)

(0, 1, 3, 5, 7, 8, 10)

Karduin commented 6 years ago

Voila une version fonctionnelle avec pygame.

J'ai corrigé certaines incohérences. Cela fonctionne (enfin à priori) avec n'importe quelle gamme et n'importe quelle corde.

Pour le moment je ne gère pas la 12éme case, mais comme ce n'est qu'une répétition de ce qui est déjà fait et en supposant que l'on prenne un manche standard sur une électrique de 22 cases en ajoutant 12 à la liste des cases on s'en sort.

        for myItem in allCases:
            if myItem in self.toneUsed:
                self.startNote = myItem
                break
            if idx > 11 : # Si j'arrive au bout du tuple je retourne au début
                idx = idx - 12 # Il doit y avoir plus pythonique...

Ces deux extraits ne me paraisse pas très pythonique , si quelqu'un passe par là et à une idée... Peut on faire comme une compréhension de liste avec un tuple ?

parmentelat commented 6 years ago

J'ai un peu bidouillé ça; plutôt que de modifier ton fichier, j'en ai créé un autre 'music.py' parce que ça faisait beaucoup de changements. C'est juste pour montrer quelques angles d'améliorations possibles.

Quand j'aurai plus de temps je reprendrai le notebook pour utiliser ce code-là, et/ou pour utiliser les clés clavier de pygame pour voir aussi d'autres gammes, et en option montrer le nom des notes...

On passe son temps à faire des calculs modulo 12, donc ta réponse c'est idx = idx % 12

Karduin commented 6 years ago

Merci, je vais prendre le temps de décortiquer ce que tu as fait pour bien comprendre.
Effectivement il y a pas mal de petites améliorations possibles.
une variation autour de gamme.py... petite blague musicale ;-)