English explanations at the end of the post.
Les joueurs de vielle à roue, surtout débutants, ont besoin de travailler tout particulièrement le jeu de la main droite, car c’est lui qui donne le rythme à la musique, grâce au chien. Mais ce n’est pas simple d’avoir les bonnes indications placées au bon endroit. Alors, suite à une discussion sur un forum, je me suis amusé à écrire une petite fonction en Scheme, pour faire le travail. Et tant qu’à faire j’ai aussi écrit le code qui écrit automatiquement la tablature en fonction de l’accord de la vielle. Au final ma petite fonction fait 444 lignes de code…
Et j’ai appelé ça hurdyTab, comme Tablature pour hurdy-gurdy. VielleTab ça le faisait pas. En revanche, je trouve que hurdyTab ça… Comment dire ? Ça chie à l’oreille !
Voici le résultat. Irréprochable, comme toujours avec Lilypond (cliquez pour agrandir)…
Pour ceux qui ne connaissent pas Lilypond, c’est un logiciel de gravure de partitions très puisant, libre, donc totalement gratuit, et disponible pour les trois systèmes d’exploitation majeurs du marché. Pour donner une idée de sa puissance, je connais quelqu’un qui compose des opéras avec…
Et pour ceux qui n’ont jamais entendu parler du langage de programmation Scheme (prononcez skiim’ pour faire branché !), il s’agit d’un dérivé épuré mais aussi puissant du langage Lisp qui est particulièrement orienté intelligence artificielle.
Explications
La ligne de doigté
Elle représente deux lignes en réalité :
- la partie supérieure indique les numéros de doigts tels qu’ils ont été saisis dans la partition, comme à l’habitude, à la différence près qu’ils sont situés sur leur propre ligne, ce qui leur évite de zigzaguer verticalement en fonction de la position des notes ;
- la partie inférieure affiche une tablature un peu à la façon des tablatures de piano, avec des lettres minuscules pour les notes non altérées et des majuscules pour les dièses – cette ligne peut ne pas être activée. Les indications d’octave ne sont pas comme sur les tablatures de piano indiquées sur des lignes différentes, mais avec la syntaxe habituelle de Lilypond, des apostrophes pour les octaves supérieures et des virgules pour les inférieures. Il est possible de personnaliser ces signes ainsi que leur position, avant ou après la lettre.
La ligne rythmique
Elle représente également deux lignes :
- la partie supérieure affiche des symboles (ici des flèches) représentant le coup de poignée à donner, suivi parfois d’autres symboles indiquant si le coup doit ou non être gras – cette dernière indication est purement subjective, bien qu’on puisse lui donner a priori la signification suivante : chaque point correspond à environ un quart de la durée du temps ;
- la partie inférieure affiche le numéro du coup de poignée.
Les coups de trois, quatre, six et huit sont implémentés.
Les symboles de coup (des flèches) ne sont pas basés sur un graphisme d’horloge (ce qui est parfois donné comme indication). Ils sont purement graphiques, un coup de quatre génère des flèches en carré, un coup de 3 en triangle, un coup de 6 en hexagone et un coup de 8 ? Hé bien vous avez gagné !
Mais il est parfaitement possible d’opter pour la codification utilisée par Valentin Clastrier dans sa méthode, voire de se créer soi-même sa propre codification. Celle-ci étant totalement indépendante de sa notation, une partition pourra être échangée et correctement interprétée quand bien même tous les symboles seraient personnalisés.
Quelques autres options permettent d’obtenir une partition selon ses goûts :
- possibilité de choisir d’afficher les flèches au-dessus ou au-dessous de la ligne, ou pas du tout ;
- la même chose pour les numéros ;
- possibilité de choisir différents modèles de symboles de coup gras.
L’accord
L’accord de la vielle peut être affiché ou non. Les accords Bourbonnais, Auvergnat et Vendéen sont pré-saisis, et un modèle est disponible pour créer d’autres accords.
De plus une instruction \mute permet de noter quelles cordes sont muettes.
Comment ça marche ?
Toutes ces lignes ne nécessitent pas d’être écrites chacune spécifiquement, c’est la même expression musicale qui est utilisée mais affichée dans des portées paramétrées différemment. Les portées qui contiennent la tablature sont interprétées par les fonctions scheme, l’une qui traduit les indications de coup en symboles, l’autre les hauteurs de notes en lettres, et les attache à la note.
La syntaxe est relativement simple :
- on écrit en début de morceau l’instruction scheme suivante : #(define coup 4) pour indiquer que l’on utilise un coup de quatre – si on change de type de coup en cours de morceau on écrit la nouvelle instruction à l’emplacement correspondant dans l’expression musicale ;
- on indique le numéro de coup ainsi : \1 pour le premier, etc. directement après la note ;
- on indique également un éventuel doigté : -2, toujours après la note ;
- pour les coups gras, on utilise (de la même façon que le numéro de coup) une des trois indications suivantes \gra, \grb ou \grc selon qu’on veut indiquer une valeur faible ou plus forte.
À titre d’exemple voici l’expression musicale correspondant à la partition affichée plus haut. Hé oui pour ceux qui ne connaissent pas Lilypond, c’est un logiciel où on saisit sa musique sous forme de texte, ce qui pourrait sembler archaïque, mais est pourtant infiniment plus rapide et précis que toute autre méthode.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#(define coup 4) \partial 4 d4-2\3 \bar "|:" \repeat volta 2 { d-2\1 b-4\3 d-2\1 | g2-1\3\grb b4-1\3 | } \alternative { { a8-2\1 g-3\2 fis4-4\3 e-1\1 | e-1\3 d-2\1\grb d |} { a'8-2\1 g-3\2 fis4-4\3 a-1\1 | g2-2\2\gra d4-4\3 \break } } \repeat volta 2 { g4-1\1 g-1\3 g-1\1 | fis2-2\3\gra fis4-2\3 | e8-3\1 d-4\2 e4-3\3 fis-2\1 | } \alternative { { e-3\3 d-4\1\gra d } { g2-1\3 d4-4\3 } } } |
Le bloc écrit g2-1\3\grb (début de la ligne 5) signifie : un sol (g) ayant la valeur d’une blanche (2) se joue avec le doigt 1 (-1) avec un coup de poignée en position 3 (\3) et un coup gras moyen (\grb).
Algorithme
Je ne peux résister au plaisir de vous donner l’algorithme que j’ai pondu pour déterminer quelle flèche utiliser dans le vecteur à partir du type de coup et du numéro. Il y a 8 flèches possibles (dont la numérotation commence à zéro). Pourquoi 8 ? Parce que pour ce que j’en connais, il me semble qu’une représentation des positions de coups de poignée sous forme de rose des vents semble réaliste.
Donc mon algorithme est le suivant : le numéro de symbole est le modulo 12 de l’arrondi à l’unité de (numéro de coup -1) multiplié par 8 (le nombre de flèches possibles) et divisé par le type de coup (le nombre de coups possibles). Hé oui avec un petit modulo, pour éviter qu’une saisie d’un numéro 5 dans un coup de 4 fasse tout planter parce que la flèche 9 n’existe pas…
D’ailleurs pour les valeurs du coup gras, c’est pareil, si c’est plus que 3 c’est plafonné, et moins que 0 aussi.
Débogage et évolution
La première version mettait un coup de 1 sur toutes les notes qui en étaient dépourvues. J’avais pris un petit raccourci dans une fonction qui raccourcissait un peu trop… Corrigé.
La version actuelle ne permet pas, contrairement à ce que j’annonce, de changer de type de coup en cours de morceau. Un peu plus complexe à gérer mais c’est prévu.
Téléchargement et installation
Il y a un pré-requis pour utiliser hurdyTab, c’est que bien évidemment Lilypond soit déjà installé sur votre système, avec ou sans éditeur graphique dédié. Si ce n’est pas encore le cas, le site officiel vous indique la marche à suivre.
Ensuite téléchargez l’archive correspondant à votre version de Lilypond et décompressez-la dans le répertoire de votre choix.
Cette archive contient deux fichiers :
- hurdyTab.ly qui contient les options de personnalisation, le code des fonctions et la configuration des Staffs ;
- empty-hurdyTab.ly qui est un fichier modèle abondamment commenté et qu’on peut arranger à sa manière.
Les explications contenues à la fois dans le fichier modèle et le fichier de fonctions (où elles sont de plus bilingues, anglais/français) sont normalement suffisantes pour en comprendre l’utilisation. Il n’y a donc pas de fichier d’aide.
Installez hurdyTab.ly où vous voulez mais pensez à mettre à jour le chemin d’accès à ce fichier dans empty-hurdyTab.ly s’ils ne sont pas placés tous les deux dans le même répertoire.
Saisissez votre musique dans le fichier modèle.
Et compilez…
Licence
Creative Commons BY NC ND. Ce qui signifie entre autres que ces quelques lignes de code sont totalement gratuites. Enjoy !
Par contre cela signifie aussi que vous ne pouvez pas supprimer la mention de copyright. Ce n’est pas trop cher payé, non ?
Améliorations possibles
Pourquoi pas la génération automatique d’une ligne de percussions, avec instrument personnalisable, pour que le fichier MIDI permettre d’entendre le chien sous forme d’un tambour ou autre ?
Remerciements
Comme d’habitude, un grand merci aux participants à la liste de discussion de Lilypond, et notamment Gilles et Pierre.
Le code
Pour ceux qui voudraient voir à quoi ça ressemble sans pour autant devoir télécharger.
Les fonctions d’hurdyTab
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% hurdyTab.LY %% %% Some tools for generating hurdy-gurdy tablatures %% Une collection d'outils pour générer des tablatures de vielle à roue %% %% started on: 2015/05/25 %% last modification: 2015/05/29 %% For lilypond 2.16+ %% LSR = %% %% Licence Creative Commons BY NC ND %% %% by Daniel Cartron: cartron dot xyz / contact %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Setup %% Configuration %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% Author's symbols for the coup %% Symboles de l'auteur pour les coups de poignée #(define dc-arrows #("→" "↘" "↓" "↙" "←" "↖" "↑" "↗" )) %% Valentin Clastrier's symbols for the coup %% Symboles de Valentin Clastrier pour les coups de poignée #(define clastrier-arrows #("↓" "⇓" "↧" "←" "↑" "⇑" "↥" "→" )) %% Add your's below - Ajoutez les vôtres ci-dessous %% %% Setting of the coup model - Définition du modèle pour les coups #(define arrrows-model dc-arrows) %% %% Place of the coup symbol - 1: above the line, -1: under, 0: none %% Position du symbole du coup - 1 : dessus, -1 ; dessous, 0 ; rien #(define arrow-dir 1) %% %% Place of the coup number - Position du numéro de coup #(define number-dir -1) % 1, -1, 0 %% %% Author's symbols for the coup gras (length) %% Symboles de l'auteur pour le coup gras (durée) #(define dc-coupgras #("" "⠁" "⠃" "⠇")) %% %% Add your's below - Ajoutez les vôtres ci-dessous %% %% Setting of the coup gras model - Définition du modèle de coup gras #(define coupgras-model dc-coupgras) %% %% Clef letters - Lettres des clés #(define tangentTab #( "c" "C" "d" "D" "e" "f" "F" "g" "G" "a" "A" "b" )) %% %% Lower octaves symbol - Symbole des octaves inférieures #(define low-oct '("," 1)) %% %% Upper octaves symbol - Symbole des octaves supérieures #(define up-oct '("'" 1)) %% %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Functions - Fonctions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% octave of a semitone - octave d'un semitone #(define (oct x) (inexact->exact(abs (floor (/ x 12 ))))) %% %% Parse the notes to get the letter - Analyse des notes pour trouver la lettre #(define (make-arrows note-event) (let ( (dog-num 0) (arrow-num 0) (coupgras-num 0) (articulations (ly:music-property note-event 'articulations)) ) ; read the articulations to get the string number if any (for-each (lambda (arti) (if (eq? (ly:music-property arti 'name) 'StringNumberEvent) (set! dog-num (ly:music-property arti 'string-number)) ) ; articulations for the coup gras (if (eq? (ly:music-property arti 'name) 'ArticulationEvent) (if (equal? (xsubstring (ly:music-property arti 'articulation-type) 0 9) "coupgras-") (set! coupgras-num (string->number (xsubstring (ly:music-property arti 'articulation-type) 9 10) )) ) ) ) ; end of lambda articulations ) ; end of for-each - end of the work with articulations (if (not (= dog-num 0)) (set! arrow-num (remainder (round (* 8 (/ (- dog-num 1) coup) ) ) 8 ) ) ) (if (and (not (= 0 arrow-dir)) (not (= dog-num 0))) (set! (ly:music-property note-event 'articulations) (cons (make-music 'TextScriptEvent 'direction 1 'text (markup (#:concat ( (vector-ref arrrows-model arrow-num ) (vector-ref coupgras-model coupgras-num ) ) )) ) (ly:music-property note-event 'articulations)) ) ) (if (not (= 0 number-dir)) (set! (ly:music-property note-event 'articulations) (cons (make-music 'TextScriptEvent 'direction number-dir 'text (markup (number->string dog-num) ) ) (ly:music-property note-event 'articulations)) ) ) note-event ) ; end of let ) % end of function %% %% Parse the notes to get the letter - Analyse des notes pour trouver la lettre #(define (make-keys mus-elt) (let (; first we get the semi-tone value of the note (semi-tone (ly:pitch-semitones (ly:music-property mus-elt 'pitch))) (note-letter "") (note-oct "") (mkp-dir 1) ) ; we get the letter (set! note-letter (vector-ref tangentTab (remainder (+ 120 semi-tone) 12))) ; calcul of the number of octave symbols (set! note-oct (oct semi-tone )) ; we add the octave symbol to the letter (cond ((and (< semi-tone 0) (< (cadr low-oct) 0)) (while (> note-oct 0) (and (set! note-letter (string-append (car low-oct) note-letter)) (set! note-oct (- note-oct 1)) )) ) ((and (< semi-tone 0) (> (cadr low-oct) 0)) (while (> note-oct 0) (and (set! note-letter (string-append note-letter (car low-oct))) (set! note-oct (- note-oct 1)) )) ) ((and (> semi-tone 0) (< (cadr up-oct) 0)) (while (> note-oct 0) (and (set! note-letter (string-append (car up-oct) note-letter)) (set! note-oct (- note-oct 1)) )) ) ((and (> semi-tone 0) (> (cadr up-oct) 0)) (while (> note-oct 0) (and (set! note-letter (string-append note-letter (car up-oct))) (set! note-oct (- note-oct 1)) )) ) ) ; we add the markup to the note (set! (ly:music-property mus-elt 'articulations) (cons (make-music 'TextScriptEvent 'direction 1 'text note-letter ) (ly:music-property mus-elt 'articulations) ) ) mus-elt ) ; end of let ) % end of function%% %% Parse the notes to add a dog MIDI voice - Analyse des notes pour ajouter une voix MIDI pour le chien #(define (make-dogvoice note-event) (let ( (articulations (ly:music-property note-event 'articulations)) (dur (ly:music-property evt 'duration)) ) ; read the articulations to get the string number if any (for-each (lambda (arti) (if (eq? (ly:music-property arti 'name) 'StringNumberEvent) (begin ) (begin ) ) ) ; end of lambda articulations ) ; end of for-each - end of the work with articulations note-event ) ; end of let ) % end of function %% %% Keys function - Fonction pour le clavier hurdyKeys = #(define-music-function (parser location mus) (ly:music?) "Convert a melody into a hurdy-gurdy tablature" "Convertit une mélodie en tablature de vielle à roue" (map-some-music (lambda(evt) (let((name (ly:music-property evt 'name))) (cond ( (eq? name 'NoteEvent) (make-keys evt) evt) (else #f) ) ) ) mus ) ) %% %% Wheel function - Fonction pour la roue hurdyWheel = #(define-music-function (parser location mus) (ly:music?) "Convert a melody into a hurdy-gurdy tablature" "Convertit une mélodie en tablature de vielle à roue" (map-some-music (lambda(evt) (let((name (ly:music-property evt 'name))) (cond ( (eq? name 'NoteEvent) (make-arrows evt) evt) (else #f) ) ) ) mus ) ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Dog articulations %% Articulations pour le gras du chien %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% #(set! default-script-alist (append default-script-alist (list `("coupgras-1" . ( (script-stencil . (feta . ("" . ""))) (direction . ,UP) ) ) `("coupgras-2" . ( (script-stencil . (feta . ("" . ""))) (direction . ,UP) ) ) `("coupgras-3" . ( (script-stencil . (feta . ("" . ""))) (direction . ,UP) ) ) ) ) ) gra = #(make-articulation "coupgras-1") grb = #(make-articulation "coupgras-2") grc = #(make-articulation "coupgras-3") %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Tone markup setup %% Configuration du markup d'accord %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% Markup for two chanterelles in unison %% Markup pour deux chanterelles à l'unisson ctra = #(let ((finger (make-music 'FingeringEvent))) (set! (ly:music-property finger 'tweaks) (acons 'text #{ \markup\normal-text\fontsize #3 \italic " Ctr" #} (ly:music-property finger 'tweaks))) finger) %% %% Markup for two chanterelles with an octave difference %% Markup pour deux chanterelles à l'octave ctrb = #(let ((finger (make-music 'FingeringEvent))) (set! (ly:music-property finger 'tweaks) (acons 'text #{ \markup\column { \vspace #0.8 \concat \vcenter { \path #0.2 #'( (moveto -1 -2) (lineto 0 -2) (lineto 0 1.5) (lineto -1 1.5)) \normal-text\fontsize #3 \italic "Ctr" } } #} (ly:music-property finger 'tweaks))) finger) %% %% Markup for a single trumpet %% Markup pour une trompette seule trpa = #(let ((finger (make-music 'FingeringEvent))) (set! (ly:music-property finger 'tweaks) (acons 'text #{ \markup\normal-text\fontsize #3 \italic " Trp" #} (ly:music-property finger 'tweaks))) finger) %% %% Markup for two trumpets %% Markup pour deux trompettes trpb = #(let ((finger (make-music 'FingeringEvent))) (set! (ly:music-property finger 'tweaks) (acons 'text #{ \markup\column { \vspace #0 \concat \vcenter { \path #0.2 #'( (moveto -1 -1) (lineto 0 -1) (lineto 0 1) (lineto -1 1)) \normal-text\fontsize #3 \italic "Trp" } } #} (ly:music-property finger 'tweaks))) finger) %% %% Markup for two drones %% Markup pour deux bourdons brdb = #(let ((finger (make-music 'FingeringEvent))) (set! (ly:music-property finger 'tweaks) (acons 'text #{ \markup\column { \vspace #0 \concat \vcenter { \path #0.2 #'( (moveto -1 -1) (lineto 0 -1) (lineto 0 1) (lineto -1 1)) \normal-text\fontsize #3 \italic "Brd" } } #} (ly:music-property finger 'tweaks))) finger) %% %% Markup for three drones %% Markup pour trois bourdons brdc = #(let ((finger (make-music 'FingeringEvent))) (set! (ly:music-property finger 'tweaks) (acons 'text #{ \markup\column { \vspace #0.8 \concat \vcenter { \path #0.2 #'( (moveto -1 -2) (lineto 0 -2) (lineto 0 1.5) (lineto -1 1.5)) \normal-text\fontsize #3 \italic "Brd" } } #} (ly:music-property finger 'tweaks))) finger) %% %% Instruction for muting some drones or trumpets %% Instruction pour rendre muet un bourdon ou une trompette mute = #(define-music-function (parser location note) (ly:music?) ;; are we inside a ? (if (eq? (ly:music-property note 'name) 'NoteEvent) ;; yes -> add a tweak (begin (set! (ly:music-property note 'tweaks) (acons 'style 'cross (ly:music-property note 'tweaks))) note) ;; no -> use predefined commmands for changing ;; note head and tablature fret signs #{ \deadNotesOn $note \deadNotesOff #})) %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Contexts setup %% Configuration des contextes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% Date insertion in the pdf footer %% Date insérée dans le pied de pdf date = #(strftime "%d-%m-%Y" (localtime (current-time))) %% %% Automatic deletion of the intermediate files %% Suppression automatique des fichiers intermédiaires #(ly:set-option 'delete-intermediate-files #t) %% melodyStaff = \with { \override StringNumber #'stencil = #point-stencil \override Fingering #'stencil = #point-stencil \override TextScript #'stencil = ##f } %% fingeringStaff = \with { \consists Axis_group_engraver \consists Staff_symbol_engraver \consists Staff_collecting_engraver \consists Staff_performer \consists Clef_engraver \consists Fingering_engraver \override Clef #'stencil = #ly:text-interface::print \override Clef #'font-size = #-2 \override Clef #'text = \markup { \raise #1.5 "Doigté" } \override StaffSymbol #'line-count = #1 \override VerticalAxisGroup #'staff-staff-spacing = #'((minimum-distance . 3.5)) } %% lettersStaff = \with { \consists Axis_group_engraver \consists Staff_performer \consists Clef_engraver \consists Text_engraver \override Clef #'stencil = #ly:text-interface::print \override Clef #'font-size = #-2 \override Clef #'text = \markup { \raise #1.5 "" } \override StaffSymbol #'line-count = #1 \override VerticalAxisGroup #'staff-staff-spacing = #'((minimum-distance . 3.5)) } %% wheelStaff = \with { \override StaffSymbol #'line-count = #1 \override Clef #'stencil = #ly:text-interface::print \remove "Time_signature_engraver" \override KeySignature #'stencil = #point-stencil \override StringNumber #'stencil = #point-stencil \override Fingering #'stencil = #point-stencil \override NoteHead #'font-size = #-4 \override Stem #'font-size = #-4 \override Flag #'font-size = #-4 \override Script #'stencil = #point-stencil \override StaffSymbol #'staff-space = #(magstep -4) \override TupletBracket #'stencil = #point-stencil \override TupletNumber #'stencil = #point-stencil \override BreathingSign #'stencil = #point-stencil } %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Copyright - Do not remove please! - Copyright - Ne pas retirer svp ! \header {tagline=\markup{\teeny\italic{Partition générée le \date avec \caps hurdyTab (© 2015 \caps{Daniel Cartron}) et \caps Lilypond}}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
Le fichier modèle
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
%%%%%%%%%%%%%%%%%%%% Fichier modèle d'hurdyTab %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% INITIALISATION %%%%%%%%%%%%%%%%%%%% \version "2.16.2" \include "hurdyTab.ly" % chargement des paramètres et du code \include "articulate.ly" % pour un meilleur rendu MIDI %\language "italiano" % pour une saisie des notes en "do re mi..." GlobalSize = #24 % Taille globale des éléments du pdf %%%%%%%%%%%%%%%%%%%% INDICATIONS FACULTATIVES %%%%%%%%%%%%%%%%%%%% %% Tous les réglages suivants surchargent ceux d'hurdyTab.ly %% %% Ils sont donc optionnel et supprimables si ce dernier est bien configuré %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #(define arrrows-model dc-arrows) % modèle de flèches #(define coupgras-model dc-coupgras) % modèle de symboles de coup gras #(define arrow-dir 1) % 1: arrow above the line, -1: under, 0: no arrow #(define number-dir -1) % 1: number above the line, -1: under, 0: no number #(define low-oct '("," 1)) % lower octave symbol: -1 before 1 after the letter #(define up-oct '("'" 1)) % upper octave symbol: -1 before 1 after the letter %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% ACCORD DE LA VIELLE %%%%%%%%%%%%%%%%%%%% %% (Dé-)commentez l'accord de votre instrument, ou créez votre propre accord %% Pour indiquer qu'une corde est muette insérer l'instruction \mute devant Nm="Bourbonnais" Ctr={<d'-1 d''-2\ctrb>1} Drn={<g,-1 d-2\brdb g-1 d'-2\trpb>1} %Nm="Auvergnat" Ctr = {<g' g'\ctra>1} Drn = {<g,-1 c-2\brdb g-1 c'-2\trpb>1} %Nm="Vendéen" Ctr = {<a' a'\ctra>1} Drn = {<a,-1 d-2\brdb a-1 d'-2\trpb>1} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Modèle de construction d'accord - Exemple : Accord en do et 3 bourdons %% Chanterelles à l'unisson utiliser \ctra, à l'octave utiliser \ctrb %% Bourdons : 2 utiliser \brdb, 3 \brdc - Trompettes : 1 \trpa 2 \trpb %Nm="Do" Ctr = {<c' c'\ctra>1} Drn = {<c,-1 g,-2 c-3\brdc g-1 d'-2\trpb>1} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Ci-dessous modifier uniquement "Accord", staff-size "18" ou "cordes muettes" hurdyTone = \markup \score {\new GrandStaff << \new Staff { \tempo \markup \override #'(baseline-skip . 3) \center-column \abs-fontsize #8 {"Accord" \raise #1 \Nm} \Ctr \bar "|" } \new Staff { \clef F \Drn \bar "|" } >> \layout { indent = 0 #(layout-set-staff-size 18) \context { \Staff \remove "Time_signature_engraver" fingeringOrientations = #'(right) }}} \markup { \vspace #-1 \abs-fontsize #6 \italic " x : cordes muettes"} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% CONFIGURATION GLOBALE %%%%%%%%%%%%%%%%%%%% Global = { \clef treble \time 3/4 \tempo 4=130 %% ajustement de l'espacement des indications de numéros dans la tablature \override TextScript #'extra-spacing-width = #'(-0.5 . 0.5) % \textLengthOn % ajustement des mesures aux markups %% style des indications de parties (\mark) - valeurs possibles : %% #format-mark-alphabet, #format-mark-box-letters, #format-mark-circle-letters %% #format-mark-numbers, #format-mark-box-numbers, #format-mark-circle-numbers \set Score.markFormatter = #format-mark-box-letters \override TupletBracket #'bracket-visibility = ##t % visibilité des nolets \tupletUp %% Crochets de nolets au-dessus de la portée } %%%%%%%%%%%%%%%%%%%% EN-TÊTE DE PARTITION %%%%%%%%%%%%%%%%%%%% \header { % Les champs suivants sont centrés dedication = "" % Dédicace title = "" % Titre subtitle = "" % Sous-titre subsubtitle = "" % Sous-sous-titre % Les champs suivants sont répartis sur une ligne instrument = "Vielle à roue" poet = \hurdyTone % Accord de la vielle à commenter éventuellement composer = "" % Compositeur % Les champs suivants sont en opposition sur la même ligne meter = "" % Tempo arranger = "" % Arrangeur % Le champ suivant est centré en pied de première page copyright = "" } %%%%%%%%%%%%%%%%%%%% EXPRESSIONS MUSICALES %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% SYNTAXE %%%%%%%%%%%%%%%%%%%% %% #(define coup 4) pour indiquer un coup de 4, à placer dans la mélodie %% \1 pour le premier coup, puis \2, \3... %% \gra, \grb ou \grc pour indiquer un coup un peu gras, plus, ou beaucoup %% -1, -2 etc. pour les numéros de doigts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Melody = \relative c' { %% saisir ici la mélodie \Global \key c \major \time 4/4 % \mark "Partie A" % exemple #(define coup 4) c8-1\1 d-4\2\gra e-3\3\grb fis-4\4\grc } Chords = \chordmode { % saisir ici la grille d'accords } Lyrics = \lyricmode{ % saisir ici les paroles } %%%%%%%%%%%%%%%%%%%% SORTIE PDF %%%%%%%%%%%%%%%%%%%% \score { << %% Affichage de la grille d'accords \new ChordNames { \set chordChanges = ##t % répétition des accords inchangés \frenchChords % noms d'accord en français \Chords } %% Affichage de la mélodie \new Staff \with { % partition \melodyStaff % configuration de la portée % ajouter ici des réglages supplémentaires } \Melody %% (Dé-)commenter éventuellement une des lignes ci-dessous %% Affichage des paroles %\addlyrics{\Lyrics} %% Affichage des doigtés \new Devnull \with {\fingeringStaff} \Melody %% Affichage des lettres de sautereau \new Devnull \with {\lettersStaff} \hurdyKeys \Melody %% Affichage des coups de poignée \new DrumStaff \with {\wheelStaff} \hurdyWheel \Melody >> \layout { indent = #0 % indentation du premier système \context { % affichage des systèmes \Score scriptDefinitions = #default-script-alist % traitement des articulations % \remove "Bar_number_engraver" % pas de numérotation des mesures % \override SystemStartBar #'transparent = ##t % pas de barre de liaison %% décommenter la ligne ci-dessous pour une écriture proportionnelle des notes %proportionalNotationDuration = #(ly:make-moment 1 32) } \context { % affichage de la tablature \DrumVoice \remove "Slur_engraver" % suppression des liaisons dans la tablature } \context { % affichage des paroles \Lyrics %\override LyricText #'font-name = #"Garamond" % nom de la fonte %\override LyricText #'font-size = #-1.0 % taille de fonte } } } %%%%%%%%%%%%%%%%%%%% SORTIE MIDI %%%%%%%%%%%%%%%%%%%% \score { \unfoldRepeats \articulate % pour un meilleur rendu MIDI << { \new StaffGroup \new Staff { \set Staff.midiInstrument="violin" %% modifier la valeur de unfold 1 pour avoir une sortie midi plus longue \Melody } } >> \midi{} } %%%%%%%%%%%%%%%%%%%% RÉGLAGES PAPIER %%%%%%%%%%%%%%%%%%%% \paper { indent = 0\mm #(set-paper-size "a4") left-margin = 15\mm line-width = 190\mm top-margin = 5\mm bottom-margin = 1\mm % page-count = #1 % Partition en une seule page %% polices de caractères #(define fonts (make-pango-font-tree "Sans Serif" "Liberation Sans" "Liberation Mono" (/ GlobalSize 20) )) } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
English explanations
Short but better than nothing…
Download and unzip in your usual lilypond directory. Then use the template file empty_hurdyTab_EN.ly to write your music. This file contains all the explanations (in english) you need to use it. If you want more settings, they are in the first part of hurdyTab.ly, with comments both in english and french.
If you think I should write more explanations in english, feel free to tell it below, but first just have a look on the template file to see if you could use it easily.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
%%%%%%%%%%%%%%%%%%%% hurdyTab template file %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% INITIALIZATION %%%%%%%%%%%%%%%%%%%% \version "2.16.2" \include "hurdyTab.ly" % loading setup and functions \include "articulate.ly" % for a better MIDI rendering %\language "english" % for writing note names in english GlobalSize = #24 % global size of the PDF elements %%%%%%%%%%%%%%%%%%%% FACULTATIVE INDICATIONS %%%%%%%%%%%%%%%%%%%% %% All the following settings will override the hurdyTab.ly file %% %% If hurdyTab.ly is correctly set up you can remove them %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #(define arrrows-model dc-arrows) % model for the arrows symbols #(define coupgras-model dc-coupgras) % model for the coup gras symbols #(define arrow-dir 1) % 1: arrow above the line, -1: under, 0: no arrow #(define number-dir -1) % 1: number above the line, -1: under, 0: no number #(define low-oct '("," 1)) % lower octave symbol: -1 before 1 after the letter #(define up-oct '("'" 1)) % upper octave symbol: -1 before 1 after the letter %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% HURDY-GURDY TUNING %%%%%%%%%%%%%%%%%%%% %% (Un-)comment the tuning corresponding to your insrument, or create one %% You can use \mute before a note to draw it with a cross note head Nm="Bourbonnais" Ctr={<d'-1 d''-2\ctrb>1} Drn={<g,-1 d-2\brdb g-1 d'-2\trpb>1} %Nm="Auvergnat" Ctr = {<g' g'\ctra>1} Drn = {<g,-1 c-2\brdb g-1 c'-2\trpb>1} %Nm="Vendéen" Ctr = {<a' a'\ctra>1} Drn = {<a,-1 d-2\brdb a-1 d'-2\trpb>1} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Model for writing a tuning - Example: tuning in c with 3 drones %% Chantelelles in unison, use \ctra, with an octave use \ctrb %% Drones; 2 use \brdb, 3 \brdc - Trumpets : 1 \trpa 2 \trpb %Nm="Do" Ctr = {<c' c'\ctra>1} Drn = {<c,-1 g,-2 c-3\brdc g-1 d'-2\trpb>1} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Below only change the words "Tuning", "muted strings" or the staff-size "18" hurdyTone = \markup \score {\new GrandStaff << \new Staff { \tempo \markup \override #'(baseline-skip . 3) \center-column \abs-fontsize #8 {"Tuning" \raise #1 \Nm} \Ctr \bar "|" } \new Staff { \clef F \Drn \bar "|" } >> \layout { indent = 0 #(layout-set-staff-size 18) \context { \Staff \remove "Time_signature_engraver" fingeringOrientations = #'(right) }}} \markup { \vspace #-1 \abs-fontsize #6 \italic " x : muted strings"} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% GLOBAL SETTINGS OF THE SCORE %%%%%%%%%%%%%%%%%%%% Global = { \clef treble \time 3/4 \tempo 4=130 %% Try one of the 2 following lines to adjust the horizontal spacing of markups \override TextScript #'extra-spacing-width = #'(-0.5 . 0.5) % \textLengthOn %% style for the parts indication (\mark) - possible styles are: %% #format-mark-alphabet, #format-mark-box-letters, #format-mark-circle-letters %% #format-mark-numbers, #format-mark-box-numbers, #format-mark-circle-numbers \set Score.markFormatter = #format-mark-box-letters \override TupletBracket #'bracket-visibility = ##t % tuplets visibles or not \tupletUp %% tuplets above the score } %%%%%%%%%%%%%%%%%%%% SCORE HEADER %%%%%%%%%%%%%%%%%%%% \header { % The following fields are centered each on it's line dedication = "" title = "" subtitle = "" subsubtitle = "" % The following fields are displayed on the same line, proportionnaly instrument = "Vielle à roue" poet = \hurdyTone % The hurdy-gurdy tuning to comment if needed composer = "" % The following fields are on the same line, one on each end meter = "" arranger = "" % This field is centered in the footer of the first page copyright = "" } %%%%%%%%%%%%%%%%%%%% MUSICAL EXPRESSIONS %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% SYNTAX %%%%%%%%%%%%%%%%%%%% %% #(define coup 4) for indicating a coup of 4, to write in the Melody %% \1 for the first coup, then \2, \3... %% \gra, \grb or \grc for a coup gras, a little, more or muche more %% -1, -2 etc. for the fingering %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Melody = \relative c' { % write here the music \Global \key c \major \time 4/4 % \mark "Part A" % example #(define coup 4) c8-1\1 d-4\2\gra e-3\3\grb fis-4\4\grc } Chords = \chordmode { % write here the chords if any } Lyrics = \lyricmode{ % write here the lyrics if any } %%%%%%%%%%%%%%%%%%%% PDF LAYOUT %%%%%%%%%%%%%%%%%%%% \score { << %% display the chords \new ChordNames { \set chordChanges = ##t % repeat the chords even if they don't change \Chords } %% display the score \new Staff \with { \melodyStaff % score settings % add here some more settings if needed } \Melody %% (Un-)comment one of the following lines if needed %% display the lyrics %\addlyrics{\Lyrics} %% display the fingering \new Devnull \with {\fingeringStaff} \Melody %% display the keys tablature \new Devnull \with {\lettersStaff} \hurdyKeys \Melody %% display the coups tablature \new DrumStaff \with {\wheelStaff} \hurdyWheel \Melody >> \layout { indent = #0 % indentation of the first system \context { % systems settings \Score scriptDefinitions = #default-script-alist % script for the articulations % \remove "Bar_number_engraver" % no measure numbering % \override SystemStartBar #'transparent = ##t % no system bar %% uncomment the following line for a proportionnal notation %proportionalNotationDuration = #(ly:make-moment 1 32) } \context { % tablature settings \DrumVoice \remove "Slur_engraver" % remove the slurs } \context { % lyric settings \Lyrics %\override LyricText #'font-name = #"Garamond" %\override LyricText #'font-size = #-1.0 } } } %%%%%%%%%%%%%%%%%%%% MIDI LAYOUT %%%%%%%%%%%%%%%%%%%% \score { \unfoldRepeats \articulate % for a better MIDI rendering << { \new StaffGroup \new Staff { \set Staff.midiInstrument="violin" %% change the unfold value for a longer MIDI file \repeat unfold 1 \Melody } } >> \midi{} } %%%%%%%%%%%%%%%%%%%% PAPER LAYOUT %%%%%%%%%%%%%%%%%%%% \paper { indent = 0\mm #(set-paper-size "a4") left-margin = 15\mm line-width = 190\mm top-margin = 5\mm bottom-margin = 1\mm % page-count = #1 % try to write the score on a single page if possible %% fonts #(define fonts (make-pango-font-tree "Sans Serif" "Liberation Sans" "Liberation Mono" (/ GlobalSize 20) )) } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
Merci. Pour la Cartronex, je pense avoir trouvé comment la fabriquer en petites séries, avec des feuilles de plastique épaisses utilisées en modélisme. Reste à trouver un imprimeur qui sache faire de l’impression laser couleur sur adhésif transparent…
Et merci pour la relecture, se relire soi-même ne suffit jamais…
Comme d’habitude, c’est parfait ! Explications détaillées et claires. Un novice peut commencer et s’en sortir (je crois !)
Une ou deux fautes d’orthographe mais on peut laisser courir… (ligne 76 (fichier modèle) : le champS suivant…)
Toutes mes félicitations pour ce travail qui sera certainement très utile.
(Toujours pas réussi à faire ma cartronex ! J’ai abandonné. Tant pis !)