4.4.4 Économie de saisie grâce aux identificateurs et fonctions
Jusqu’à maintenant, vous avez vu ce type de code :
hornNotes = \relative { c''4 b dis c } \score { { \hornNotes } }
Vous comprendrez combien cela peut être utile pour écrire de la musique minimaliste :
fragmentA = \relative { a'4 a8. b16 } fragmentB = \relative { a'8. gis16 ees4 } violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA } \score { { \violin } }
Néanmoins vous pouvez aussi utiliser ces identificateurs – aussi connus sous le nom de variables, macros, ou commandes (définies par l’utilisateur) – pour des retouches :
dolce = \markup { \italic \bold dolce } centerText = { \once \override TextScript.self-alignment-X = #CENTER } fthenp =_\markup { \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p } violin = \relative { \repeat volta 2 { c''4._\dolce b8 a8 g a b | \centerText c4.^"hi there!" d8 e f g d | c4.\fthenp b8 c4 c-. | } } \score { { \violin } }
Ces identificateurs sont évidemment utiles pour économiser de la frappe. Mais ils peuvent l’être même si vous ne les utilisez qu’une seule fois : ils réduisent la complexité. Regardons l’exemple précédent sans aucun identificateur. C’est beaucoup plus laborieux à lire, et particulièrement la dernière ligne.
violin = \relative { \repeat volta 2 { c''4._\markup { \italic \bold dolce } b8 a8 g a b | \once \override TextScript.self-alignment-X = #CENTER c4.^"hi there!" d8 e f g d | c4._\markup { \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p } b8 c4 c-. | } }
Jusqu’ici nous avons vu des substitutions statiques : quand LilyPond
rencontre \centerText
, il le remplace par le contenu que nous lui
avons défini – c’est-à-dire le contenu à droite de centerText =
.
LilyPond gère également des substitutions non-statiques – vous pouvez les voir comme des fonctions.
padText = #(define-music-function (padding) (number?) #{ \once \override TextScript.padding = #padding #}) \relative { c''4^"piu mosso" b a b \padText #1.8 c4^"piu mosso" b a b \padText #2.6 c4^"piu mosso" b a b }
Utiliser des identificateurs est aussi un bon moyen pour vous épargner
du travail si la syntaxe de LilyPond change un jour – voir
Mise à jour avec convert-ly. Si vous avez une seule
définition, par exemple \dolce
, pour tous vos fichiers (voir
Feuilles de style) et que la syntaxe change, alors vous n’aurez
qu’à mettre à jour votre seule définition \dolce
, au lieu de
devoir modifier chaque fichier ‘.ly’.