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
  }
}

[image of music]

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
  }
}

[image of music]

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
  }
}

[image of music]

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-. |
  }
}

Vous n’avez pas oublié les « postévénements » ? Rappelez-vous les articulations, doigtés, tout ce qui peut s’ajouter après une note – voir Structuration de la saisie des notes –, souvent introduit par un tiret ou un indicateur de positionnement. Ces événements peuvent eux-même s’enregistrer sous forme de variable, auquel cas les habituelles accolades ne seront pas nécessaires puiqu’elles n’apparaîtraient pas entre la note et son articulation.

Lorsqu’une telle définition inclut un préfixe, la variable peut alors s’utiliser directement après la note, à moins de vouloir en changer le positionnement à l’aide de l’indicateur adéquat.

articulationVar = -^-.

artEsprVar = \articulationVar ^>

\relative c' {
  c\articulationVar d e2^\articulationVar
  d2\artEsprVar c_\artEsprVar
}

[image of music]

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
}

[image of music]

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.


GNU LilyPond – Manuel d’initiation v2.25.20 (branche de développement).