5.6.2 Esempi della funzione di sostituzione
Questa sezione presenta alcuni esempi di funzione di sostituzione. L’obiettivo non è fornire un elenco esaustivo, ma mostrare soltanto alcune delle possibilità di semplici funzioni di sostituzione.
Nel primo esempio, viene definita una funzione che semplifica il padding di un oggetto TextScript:
padText =
#(define-music-function
(padding)
(number?)
#{
\once \override TextScript.padding = #padding
#})
\relative {
c''4^"più mosso" b a b
\padText #1.8
c4^"più mosso" b a b
\padText #2.6
c4^"più mosso" b a b
}
Oltre ai numeri, si possono usare come argomenti delle funzioni musicali anche le espressioni musicali, come le note:
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 }
Entrambe queste funzioni sono semplici espressioni singole dove manca soltanto
l’ultimo elemento di una chiamata di una funzione o di una sovrascrittura. Per
queste particolari definizioni di funzione, esiste una sintassi alternativa
più semplice, che consiste nello scrivere interamente la parte costante
dell’espressione e sostituire il suo elemento finale mancante con \etc:
padText =
\once \override TextScript.padding = \etc
\relative {
c''4^"più mosso" b a b
\padText #1.8
c4^"più mosso" b a b
\padText #2.6
c4^"più 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 }
Si possono definire funzioni di sostituzione con molteplici argomenti:
tempoPadded =
#(define-music-function
(padding tempotext)
(number? markup?)
#{
\once \override Score.MetronomeMark.padding = #padding
\tempo \markup { \bold #tempotext }
#})
\relative {
\tempo \markup { "Tempo basso" }
c''4 d e f g1
\tempoPadded #4.0 "Tempo alto"
g4 f e d c1
}