[ << Concetti fondamentali ] | [Inizio][Contenuti][Indice] | [ Modifica dell'output >> ] |
[ < Scrivere una partitura da zero ] | [ Su : Estendere i modelli ] | [ Partiture e parti > ] |
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 } }
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 } }
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 } }
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 }
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 | }
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’.
[ << Concetti fondamentali ] | [Inizio][Contenuti][Indice] | [ Modifica dell'output >> ] |
[ < Scrivere una partitura da zero ] | [ Su : Estendere i modelli ] | [ Partiture e parti > ] |