5.6.2 Exemples de funcions de substitució
Aquesta secció presenta alguns exemples de funcions de substitució. No pretenen ésser exhaustives, sinó demostrar algunes de les possibilitats de les funcions de substitució senzilles.
En el primer exemple es defineix una funció que simplifica l’ajustament del farcit d’un element d’inscripció de text 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 }
A més de nombre, podem usar expressions musicals, com notes, per als arguments de les funcions musicals:
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 }
Ambdues funcions són expressions úniques senzilles en les quals
sols falta l’últim element d’una crida de funció o
sobreescriptura. Per a aquestes definicions de funció en
particular, hi ha una sintaxi alternativa més simple que
consisteix simplement a escriure la part constant de l’expressió i
substituir l’element final que falta per \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 }
Es poden definir funcions de substitució amb més d’un argument:
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 }