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 }