4.4.4 Ridurre l’input grazie a variabili e funzioni

Finora hai visto questo tipo di cose:

hornNotes = \relative { c''4 b dis c }
\score {
  {
    \hornNotes
  }
}

[image of music]

Potresti anche esserti accorto che questo può essere utile nella musica minimalista:

fragmentA = \relative { a'4 a8. b16 }
fragmentB = \relative { a'8. gis16 ees4 }

violin = \new Staff {
  \fragmentA \fragmentA |
  \fragmentB \fragmentA |
}

\score {
  {
    \violin
  }
}

[image of music]

Tuttavia, puoi usare queste variabili (note anche come macro, o comandi definiti dall’utente) anche per le modifiche manuali:

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]

Chiaramente queste variabili sono utili per ridurre la quantità di testo da scrivere. Ma vale la pena tenerle in considerazione anche se le usi una volta sola – perché riducono la complessità. Vediamo l’esempio precedente senza alcuna variabile. È molto difficile da leggere, soprattutto l’ultima linea.

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 |
    c,4.\markup {
      \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
    }
    b8 c4 c-. |
  }
}

Ricordi i ‘post-eventi’? Articolazioni, diteggiature, qualsiasi cosa che deve essere aggiunta dopo una nota (vedi Struttura dell’inserimento note), spesso preceduta da un trattino o da un modificatore della direzione. In realtà anche questi eventi possono essere salvati in una variabile – e in questo caso non c’è bisogno delle abituali parentesi graffe, dato che non si usano tra una nota e le sue articolazioni.

Se tale definizione comprende un prefisso, allora la variabile può essere usata subito dopo la nota – a meno che non si voglia cambiare la direzione, nel qual caso si può inserire un modificatore che avrà la precedenza:

articulationVar = -^-!

artEsprVar = \articulationVar ^\espressivo

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

[image of music]

Finora abbiamo visto la sostituzione statica – quando LilyPond vede \centerText, lo sostituisce con quel che noi abbiamo definito che sia (ovvero tutto ciò che sta a destra di centerText=).

LilyPond può gestire anche la sostituzione non statica (la puoi immaginare come una funzione).

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" d e f |
  \padText #2.6
  c4^"piu mosso" fis a g |
}

[image of music]

L’uso di variabili è anche un buon modo per ridurre il lavoro quando la sintassi di input di LilyPond cambia (vedi Aggiornare i file con convert-ly). Se si ha un’unica definizione (come \dolce) per tutti i file di input (vedi Fogli di stile), allora se la sintassi cambia bisogna aggiornare soltanto la singola definizione \dolce, invece di dover modificare tutti i file .ly.


Manuale di apprendimento di LilyPond v2.25.21 (ramo di sviluppo).