Scheme42~frwikibooks
Génération de diagrammes d'accords et de grilles de gammes
modifierLe but de ce projet à moyen terme est le développement d'une mécanisme de génération et de téléversement automatique de diagrammes d'accords et de grilles de gammes pour le livre Apprendre la guitare, en alternative au mécanisme actuel générant ces diagrammes à partir de mini-images. Un but intermédiaire serait de parvenir à trouver une convention de nommage pour ces diagrammes, de manière à ce que chaque diagramme soit décrit de façon compacte et complète par son nom. Si vous êtes intéressé par ce projet et/ou souhaitez faire des remarques sur son état actuel, laissez-moi un message sur ma page de discussion.
Note du 13/11/2009
modifierN'ayant plus actuellement le temps de travailler sur ce projet (ni d'ailleurs l'énergie de m'y investir seul), je le laisse pour le moment en suspens - je continuerai sans doute à alimenter à l'occasion "Apprendre la guitare" en nouveaux articles, avec les solutions actuelles, en attendant de trouver mieux ou encore qu'une solution globale soit trouvée pour l'édition de diagrammes et de partitions sur wikibooks.
Note du 7/07/2010
modifierLes diagrammes des grilles de fonction des gammes majeure, mineure harmonique, mineur mélodique, ainsi que les grilles transposant ces gammes dans toutes les tonalités, donnent une idée de ce que pourrait être ce projet - à supposer qu'il évolue un jour. Toutes ces grilles ont bien sûr été générées par programme (quelques pages de code assez élémentaire en OCaml, en utilisant un parser Xml) à partir d'un diagramme svg de base regroupant toutes les définitions nécessaires (généré laborieusement mais une fois pour toutes, par un mélange de traitements combinant Inkscape, OCaml, Lilypond, divers scripts shell et inévitablement, de l'édition directe sous emacs). Une fois donné ce diagramme de base fixé, très peu d'informations suffisent à définir entièrement chaque diagramme (altérations associées à sa tonalité, et, pour les diagrammes de fonction, choix d'un sous-ensemble de notes, limites et placement de chaque mini-diagramme - le reste ne relève que du choix d'une méthode d'affichage, uniforme pour chaque sorte de diagramme).
Nature du problème
modifierLe mécanisme actuel de téléversement sur Common est inadapté à la rédaction d'un livre, tel que Apprendre la guitare, et plus généralement d'un livre traitant de théorie musicale et de pratique instrumentale. Aucun outil ne permet pour le moment de générer à la volée des diagrammes d'accords, des grilles de gammes, encore moins des partitions. La composition puis le téléchargement manuel de tels diagrammes se heurtent d'une part au problème de leur nombre (il existe des dizaines de formes d'accords de base distinctes, même à transposition près), d'autre part au problème du choix de leurs noms et de leurs descriptions (il existe par exemple au moins 5 manières distinctes de jouer un accord d'un nom donné sur le manche, ces différentes formes ne se différenciant que par la suite de leurs notes).
La solution actuelle (juin 2009) consistant à composer des diagrammes par assemblage de mini-images (c.f. n'importe quelle page du livre, ainsi que la documentation de ce modèle) pose malheureusement une difficulté technique sans doute insurmontable : l'impossibilité pratique de visualiser les pages sous Explorer dès que le nombre d'occurrences de mini-images dans une même page devient trop élevé (le problème ne se pose pas sous Firefox). Un problème auxiliaire est l'inconsistance du rendu du lettrage (la taille des lettres diffère entre l'image stockée en cache affichée dans la page et l'image source, et peut différer d'une machine à l'autre, même en utilisant une police disponible sur le serveur). Ce problème pourra être facilement résolu en intégrant à chaque svg les glyphes d'un jeu de caractères minimal sous forme de chemins.
Noter que l'intégration d'une police même partielle sous forme d'objets graphiques dans un fichier svg est déconseillée par Commons, car elle augmente la taille des fichiers svg produits. A mon avis, il s'agit ici d'un faux problème, si l'on considère que la taille des fichiers produits par Inkscape (malheureusement le logiciel de référence pour la création de ce type d'images), même avec une sauvegarde en svg pur, est ridiculement plus élevée que la taille de leur sous-partie réellement utile. La police nécessaire pour produire des diagrammes d'accords ne contient que peu de caractères, et les fichiers produits par programme peuvent être de taille très optimisée, pourvu que l'on se serve au mieux de définitions de liens, que l'on élimine les identificateurs, les groupes inutiles, tous les attributs inutiles ou redondants systématiquement introduits par Inkscape, ainsi que toutes les décimales ou exponentielles introduites par ses erreurs d'approximations.
Vers une grammaire des noms de diagrammes
modifierApprendre la guitare contient actuellement plusieurs sortes de diagrammes :
- des diagrammes d'accords, dans lesquels on trouve au plus un symbole par corde (un cercle étiqueté par un numéro de doigt, ou l'indication d'une corde à vide, ou l'indication d'une corde étouffée) (c.f. Apprendre la guitare/Premiers accords);
- des grilles de position indiquant, sur une portion du manche, tous les emplacements de notes d'une gamme donnée jouables à une ou plusieurs positions données, ces emplacements étant soit non étiquetés, soit étiquetés par des noms de notes, soit étiquetés par des doigtés déduits de la ou les positions choisies (c.f. Apprendre la guitare/Apprendre le manche/Grilles de la gamme majeure);
- des grilles de gamme montrant, sur l'ensemble du manche, les emplacements et fonctions des notes d'un degré donné d'une gamme donné (même chapitre);
- des grilles de gamme montrant, sur l'ensemble du manche, les emplacements des notes d'une gamme donnée avec, pour chaque grille, mise en valeur des notes principales (fondamentale, tierce, quinte) d'un mode donné et emplacements de ces notes principales dans les différentes grilles de position, disposées au dessus et au dessous de la grille principale (même chapitre).
Diagrammes libres
modifierLa première sorte de diagramme peut être vue comme celle des diagrammes libres, dans lequels des symboles (cercles étiquetés, par défaut cercles noirs étiquetés par des caractère blancs) sont librement disposés sur une portion du manche. La grammaire ci-dessous produit des noms relativement courts pour tous les accords actuels du livre (c.f. les exemples ci-dessous, contenant tous moins de 20 caractères). Le nom d'un diagramme libre spécifie la frette la plus à gauche, le mode de numérotation des frettes, les figures ou groupes de figures (cercle, indicateur de corde à vide, corde étouffée) à disposer sur chaque corde, et enfin, les étiquettes à placer sur chaque cercle. Le diagramme s'étend de la frette de base jusqu'à celle contenant le cercle le plus à droite.
Par convention, les figures sont disposées du haut vers le bas (de la corde la plus grave à la plus aiguë) et de la gauche vers la droite. Les étiquettes sont ajoutées aux cercles de grand diamètre ou à la base des extrémités de barrés, du haut vers le bas et de la droite vers la gauche. Par défaut, les noms de notes sont latins (de Do à Si), Les deux dernières sortes d'étiquettes (nom de notes, intervalles) ne sont fournies que par souci de complétude. En principe, les diagrammes de motifs devraient limiter le recours aux étiquetages explicites par des noms ou fonctions de notes.
Diagramme libre:=Base Numérotation_Figures(_(Etiquettes)+)?
- Base : un entier indiquant numéro de la frette la plus à gauche (0 pour le sillet)
- Numérotation := n | t | r | c | x | k
- n ((n)one) : pas de numéros de frettes
- t ((t)op) : un espace de 20px au dessus du diagramme.
- r ((r)oman) : frette gauche numérotée en chiffres romains
- c (itali(c)) : frettes numérotées en italique
- x (mi(x)ed) : frettes 0...12 numérotées en italique 0/12 .. 12/24, sillet dessiné comme une frette
- k (nec(k)) : frettes 3, 5, 7, 9, 12, 15, 17, 19, 21, 24 numérotées en chiffre romains, marquage du manche, décalage des figures sur les intersections frette/corde.
- Figures := (Figure | Groupe de figures | m | i )+
- m ((m)ute): étouffer la corde courante
- i ((i)gnore) : ignorer la corde courante
- Groupe de figures := gFigure+e
- g ((g)group) : début d'un groupe de figures
- e ((e)end) : fin d'un groupe de figures, optionnel s'il est suivi de g ou de _.
- Figure := ((u(u)?)?[0-9](d|(b[2-7]))?(w?) | o
- [0-9] : cercle, ou barré si suivi de b, sur la frette de base + ce chiffre, ajouter 10 (resp. 20) au chiffre indiqué s'il est précédé de u, (resp. de uu).
- d ((d)ot): cercle de diamètre réduit
- b[2-7] ((b)ar) : barré (vers le haut) sur 2 à 7 cordes
- w ((w)hite): inverser l'affichage
- o ((o)pen): corde à vide
- Etiquette := Doigt | Note | lIntervalle | i
- Doigt = 1 | 2 | 3 | 4 | P
- Note = (C | D | E | F | G | A | B)(s|f)?
- s ((s)harp) : dièse,
- f ((f)lat) : bémol
- i : ignorer le cercle courant
- l (interva(l)) : intervalle
- Intervalle = 3(f)? | 5(f|s)? | 7(f|ff)? | 9 (f|s)? | 11(f|s)? | 13(f)?
- 3, 3f : tierce majeure, mineure,
- 5, 5f, 5s : quinte juste, diminuée, augmentée,
- 7, 7f, 7ff : septième majeure, mineure, diminuée,
- 9, 9f, 9s : neuvième majeure, mineure, augmentée,
- 11, 11f, 11s : onzième juste, diminuée, augmentée,
- 13, 13f : treizième majeure, mineure.
Exemples
modifierVoici les noms des premiers accords de la page Apprendre la guitare/Accords de septième, calculés en javascript à partir du code-source de la page :
0n_mmo232_132 0n_mmo2b3ii_1 0n_mmo232_243 0n_mmo212_213 0n_mmo231_231 0n_mmo221_231 0n_mmo21b2i_21 0n_o221go5weo_231i 0n_o2213o_2314 0n_o221oo_231 0n_o2o13o_214 0n_m32o1o_432 0n_m12o1o_132 1r_m0212m_1324 1r_m1212m_1324 3r_0b32i1mm_143 3r_1201mm_2413
Diagrammes de motifs
modifierLes trois dernières sortes de diagrammes permettent de visualiser de trois manières différentes les emplacements à l'octave près d'un ensemble de notes sur le manche ou sur une portion du manche - en l'occurrence, cet ensemble de notes forme une gamme, mais rien n'empêche de considérer plus généralement un motif, c'est-à-dire une suite de notes quelconques. Voici une première ébauche de grammaire pour les noms de diagrammes des deux premières sortes. Pour diverses raisons, je ne suis pas sûr que cette grammaire soit totalement satisfaisante : elle reste probablement à compléter et à améliorer.
Le nom d'un tel diagramme spécifie les frettes extrêmes, le mode de numérotation (c.f. ci-dessus), la première note du motif, la suite des notes du motif - un numéro de gamme s'il s'agit d'une gamme, et sinon, une description explicite du motif comme une suite d'altérations des notes de la gamme majeure (e.g. Do, Mib, Fa#, Sol, Sib == 13f4s57f), un w après une note inversant son affichage (n.b. : on pourrait envisager qu'une description puisse couvrir plus d'une octave, un entier suivi d'un entier plus petit indiquant un changement d'octave, mais il faudrait dans ce cas fixer une convention pour spécifier la hauteur absolue de sa première note). La suite du nom indique le mode d'étiquetage. Si aucun étiquetage n'est spécifié, ou si l'étiquetage ne spécifie aucune position, le diagramme contient tous les emplacements des notes du motif sur la portion du manche spécifiée. Si une position ou plusieurs positions sont spécifiées, seuls les emplacements accessibles à partir de ces positions seront ajoutés au diagramme. Dans ce dernier cas, l'étiquetage des cercles se fera par les doigtés déduits de ces positions, à moins que l'on ne spécifie un étiquetage par des noms de notes ou par des intervalles. Certains noms de notes (double dièses ou bémols) ou intervalles (intervalles sur-augmentés ou sur-diminués) peuvent ne pas être disponibles.
Diagramme de motif := Frette gauche Frette droite Numérotation_ Fondamentale(Numéro de gamme|dDescripteur de motif)(mMode)(_Etiquetage)?
- 'Frette gauche Frette droite : numéros des frettes extrêmes (de 00 à 1717)
- Fondamentale := Notes : le nom de la première note du motif
- Numéro de gamme
- 0 : gamme majeure
- 1 : gamme mineure harmonique
- 2 : gamme majeure harmonique
- 3 : gamme mineure mélodique
- 4 : gamme diminuée
- Descripteur de motif := ([1-7](s|f)?(w)?)+
- Mode : un numéro de mode, de 1 au nombre de notes de la gamme
- Etiquetage := (w)?(pNuméro de position|(pNuméro de positiondNombre de notes)+)?(n|l)?
- w : inverser l'affichage
- pNuméro de position : afficher seulement les emplacements accessibles à partir de la position spécifiée, relativement à la frette gauche (i.e. la position réellement jouée est celle spécifiée plus le numéro de la frette gauche). si non suivi de n ou v, étiqueter par le doigt correspondant.
- pNuméro de positiondNombre de notes : spécification d'une position sur un nombre de notes données ((d)duration), de la note la plus grave à la plus aiguë. le dernier d peut être omis la dernière position s'applique alors à toutes les notes restantes.
- n : étiqueter les emplacements par leurs noms de notes
- l : étiqueter les emplacements par la fonction des notes (c.f. Intervalles), relativement au mode courant, i.e. par l'intervalle séparant chaque note de la fondamentale du mode courant. Par défaut, les fondamentale, tierce et quinte du mode sont en blanc sur noir, les 7ème, 9ème 11ème, 13ème, en noir sur blanc.
Exemples
modifierVoici les noms des grilles des 4 premières formes de la gamme majeure dans Apprendre la guitare/Apprendre le manche/Grilles de la gamme majeure).
03x_C0 03x_C0_p0 15c_C0 15c_C0_p0 15c_C0_p1 37c_C0 37c_C0_p0 37c_C0_p1 37c_C0 37c_C0_p0 37c_C0_p1
Dans la section "formes mixtes", on trouve d'autre part une grille sur deux positions (seconde du groupe de quatre grilles), dont le nom sera :
48c_C0_p1d4p0d7p1
(frettes 4 à 8, gamme de Do majeur, position 4 + 1 pendant 4 notes, position 4 + 0 pendant 7 notes, position 1 sur les notes restantes).
A faire
modifier- Choisir les préfixes spécifiant la sorte du diagramme (rien pour un diagramme libre, p ((p)attern) pour un diagramme de motif ?). Ajouter éventuellement un numéro de version en début de nom, de manière à pouvoir gérer les versions futures des grammaires.
- Trouver une grammaire pour le dernier type de diagramme.
- Préciser les modalités de la génération et du téléversement : répartion des rôles entre client, utilisateur et serveur, choix du ou des langages.