Exemples de fonction de substitution
La présente rubrique regroupe quelques exemples de fonction substitutive. Le propos est ici d’illustrer les possibilités qu’offrent les fonctions de substitution simple.
Dans ce premier exemple, nous définissons une fonction dans le but de
simplifier le réglage du décalage d’une annotation (un
TextScript
).
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 }
Nous pouvons utiliser autre chose que des nombres au sein d’une fonction, y compris une expression musicale :
custosNote = #(define-music-function (note) (ly:music?) #{ \tweak NoteHead.stencil #ly:text-interface::print \tweak NoteHead.text \markup \musicglyph "custodes.mensural.u0" \tweak Stem.stencil ##f #note #}) \relative { c'4 d e f \custosNote g }
Ces fonctions sont toutes deux des expressions uniques simples dans
lesquelles seul le dernier élément d’un appel à une fonction ou une
dérogation est absent. Dans ce cas particulier de définition d’une
fonction, une syntaxe alternative et plus simple autorise à se cantonner
à écrire la partie constante de l’expression et remplacer son dernier
élément, absent, par \etc
:
padText = \once \override TextScript.padding = \etc \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 }
custosNote = \tweak NoteHead.stencil #ly:text-interface::print \tweak NoteHead.text \markup \musicglyph "custodes.mensural.u0" \tweak Stem.stencil ##f \etc \relative { c'4 d e f \custosNote g }
Une fonction de substitution peut traiter plusieurs arguments :
tempoPadded = #(define-music-function (padding tempotext) (number? markup?) #{ \once \override Score.MetronomeMark.padding = #padding \tempo \markup { \bold #tempotext } #}) \relative { \tempo \markup { "Low tempo" } c''4 d e f g1 \tempoPadded 4.0 "High tempo" g4 f e d c1 }