Guida alla Notazione di LilyPond: 5.4.6 Estensori

### 5.4.6 Estensori

Molti oggetti della notazione musicale si estendono per varie note o addirittura per molte battute. Ne sono un esempio le legature di portamento, le travature, le parentesi dei gruppi irregolari, quelle delle volte delle ripetizioni, i crescendi, i trilli e i glissandi. Tali oggetti in LilyPond si chiamano “spanner”, ovvero estensori, e hanno delle proprietà speciali per regolare il loro aspetto e comportamento. Alcune di queste proprietà sono comuni a tutti gli estensori; altre sono limitate a un sottoinsieme di estensori.

Tutti gli estensori supportano l’interfaccia `spanner-interface`. Ma pochi, essenzialmente quelli che disegnano una linea dritta tra due oggetti, supportano anche l’interfaccia `line-spanner-interface`.

#### Uso di `spanner-interface`

Questa interfaccia fornisce tre proprietà che si applicano a vari estensori.

#### La proprietà `minimum-length`

La lunghezza minima dell’estensore è specificata dalla proprietà `minimum-length`. Aumentando questa si aumenta necessariamente anche la spaziatura delle note comprese tra le due estremità. Tuttavia questa modifica non ha effetto su molti estensori, perché la loro lunghezza è determinata da altre considerazioni. Di seguito vengono mostrati alcuni esempi in cui è in funzione.

>     a'~ a'
>     a'
>     % aumenta la lunghezza della legatura di valore
>     -\tweak minimum-length #5
>     ~ a'

>     \relative \compressMMRests {
>       a'1
>       R1*23
>       % aumenta la lunghezza della misura con pausa
>       \once \override MultiMeasureRest.minimum-length = #20
>       R1*23
>       a1
>     }

>     \relative {
>       a' \< a a a \!
>       % aumenta la lunghezza della forcella
>       \override Hairpin.minimum-length = #20
>       a \< a a a \!
>     }

Questa modifica può essere usata anche per aumentare la lunghezza delle legature di portamento e di frase:

>     \relative {
>       a'( g)
>       a
>       -\tweak minimum-length #5
>       ( g)

>       a\( g\)
>       a
>       -\tweak minimum-length #5
>       \( g\)
>     }

Per alcuni oggetti della formattazione, la proprietà `minimum-length` diventa effettiva solo se viene richiamata esplicitamente la procedura `set-spacing-rods`. Per farlo, la proprietà `springs-and-rods` deve essere impostata su `ly:spanner::set-spacing-rods`. Per esempio, la lunghezza minima di un glissando cambia solo quando si imposta la proprietà `springs-and-rods`:

>     % default
>     e' \glissando c''

>     % non funziona da sola
>     \once \override Glissando.minimum-length = #20
>     e' \glissando c''

>     % funziona solo quando entrambe le modifiche sono presenti
>     \once \override Glissando.minimum-length = #20
>     \once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
>     e' \glissando c''

Lo stesso vale per l’oggetto `Beam`:

>     % non funziona da sola
>     \once \override Beam.minimum-length = #20
>     e'8 e' e' e'

>     % funziona solo quando entrambe le modifiche sono presenti
>     \once \override Beam.minimum-length = #20
>     \once \override Beam.springs-and-rods = #ly:spanner::set-spacing-rods
>     e'8 e' e' e'

#### La proprietà `minimum-length-after-break`

La proprietà `minimum-length-after-break` può essere usata per allungare stensori spezzati dopo un a capo. Come per la proprietà `minimum-length`, viene spesso usata per impostare la proprietà `springs-and-rods` su `ly:spanner::set-spacing-rods`.

>     {
>       \once \override Tie.minimum-length-after-break = 20
>       a1~
>       \break
>       a1

>       \once \override Slur.minimum-length-after-break = 20
>       a1(
>       \break
>       d'1)

>       \once \override TextSpanner.springs-and-rods =
>         #ly:spanner::set-spacing-rods
>       \once \override TextSpanner.minimum-length-after-break = 20
>       a1\startTextSpan
>       \break
>       a1\stopTextSpan

>       \once \override Hairpin.after-line-breaking = ##t
>       \once \override Hairpin.to-barline = ##f
>       \once \override Hairpin.minimum-length-after-break = 20
>       a1\<
>       \break
>       a1\!

>       \once \override Glissando.springs-and-rods =
>         #ly:spanner::set-spacing-rods
>       \once \override Glissando.breakable = ##t
>       \once \override Glissando.after-line-breaking = ##t
>       \once \override Glissando.minimum-length-after-break = 20
>       a1\glissando
>       \break
>       d'1
>     }

#### La proprietà `to-barline`

La terza proprietà utile di `spanner-interface` è `to-barline`. Il valore predefinito (vero) fa sì che le forcelle e gli altri estensori che terminano sulla prima nota di una misura si estendano invece fino alla stanghetta immediatamente precedente. Se impostata su falso, l’estensore andrà oltre la stanghetta e terminerà sulla nota stessa:

>     \relative {
>       a' \< a a a a \! a a a \break
>       \override Hairpin.to-barline = ##f
>       a \< a a a a \! a a a
>     }

Questa proprietà non funziona con tutti gli estensori. Per esempio, impostandola su `#t` non si produce alcun effetto su legature di portamento o di frase, o su altri estensori per i quali terminare sulla stanghetta non avrebbe senso.

#### Uso di `line-spanner-interface`

Gli oggetti che supportano l’interfaccia `line-spanner-interface` comprendono:

- `DynamicTextSpanner`
- `Glissando`
- `TextSpanner`
- `TrillSpanner`
- `VoiceFollower`

La routine responsabile del disegno di questi estensori è `ly:line-spanner::print`. Essa determina la posizione esatta delle due estremità e disegna una linea tra di esse, nello stile richiesto. Le posizioni delle due estremità dell’estensore sono calcolate al volo, ma è possibile sovrascrivere le loro coordinate Y. Le proprietà da specificare sono annidate di due livelli nella gerarchia della proprietà, ma la sintassi del comando `\override` è piuttosto semplice:

>     e''2 \glissando b'
>     \once \override Glissando.bound-details.left.Y = #3
>     \once \override Glissando.bound-details.right.Y = #-2
>     e''2 \glissando b'

Le unità di misura della proprietà `Y` sono gli spazi rigo (`staff-space`), con la linea centrale del rigo che è il punto zero. Per il glissando, questo è il valore per `Y` alla coordinata X che corrisponde al punto centrale della testa di ogni nota, se si immagina che la linea si estenda fino a là.

Se `Y` non è impostato, il valore viene calcolato dalla posizione verticale del punto di attacco corrispondente dell’estensore.

In caso di un’interruzione di linea, i valori per le estremità sono specificati dalle sottoliste `left-broken` e `right-broken` di `bound-details`. Per esempio:

>     \override Glissando.breakable = ##t
>     \override Glissando.bound-details.right-broken.Y = #-3
>     c''1 \glissando \break
>     f''1

Altre proprietà delle sottoliste `left` e `right` della proprietà `bound-details` possono essere modificate nello stesso modo di `Y`:

`Y`

  Questa imposta la coordinata Y dell’estremità, che si sposta di un certo numero di `staff-space` dalla linea centrale del rigo. Per impostazione predefinita, è il centro dell’oggetto a cui è associato, dunque un glissando punta al centro verticale della testa di nota.

  Nel caso di estensori orizzontali, come quelli del testo e del trillo, il suo valore è fisso su 0.

`attach-dir`

  Questa determina dove la linea inizia e termina nella direzione X, relativa all’oggetto a cui è associato. Quindi un valore di `-1` (o `LEFT`) fa sì che la linea inizi/termini sul lato sinistro della testa della nota a cui è attaccata.

`X`

  Questa è la coordinata X assoluta dell’estremità. Viene solitamente calcolata al volo e sovrascriverla produce solitamente un effetto poco utile.

`stencil`

  Gli estensori della linea possono avere dei simboli all’inizio o alla fine, contenuti in questa sottoproprietà. Questa proprietà è per uso interno; si raccomanda di usare `text` al suo posto.

`text`

  Questo è un testo markup che viene valutato per produrre lo stampo (stencil, in inglese). Viene usato per mettere cresc., tr e altro testo su estensori orizzontali.

  >     \override TextSpanner.bound-details.left.text
  >        = \markup { \small \bold Rall. }
  >     \relative { c''2\startTextSpan b c a\stopTextSpan }

`stencil-align-dir-y`
`stencil-offset`

  Se non si imposta una di queste proprietà, lo stampo viene messo semplicemente all’estremità, centrato sulla linea, come definito nelle sottoproprietà `X` e `Y`. Impostando `stencil-align-dir-y` o `stencil-offset` il simbolo si sposterà verticalmente sul margine rispetto all’estremità della linea:

  >     \override TextSpanner.bound-details.left.stencil-align-dir-y = #-2
  >     \override TextSpanner.bound-details.right.stencil-align-dir-y = #UP

  >     \override TextSpanner.bound-details.left.text = "ggg"
  >     \override TextSpanner.bound-details.right.text = "hhh"

  >     \relative { c'4^\startTextSpan c c c \stopTextSpan }

  Nota bene che valori negativi spostano il testo in su, contrariamente a quanto si potrebbe pensare, perché un valore di `-1` o `DOWN` fa sì che si allinei il margine inferiore del testo con la linea dell’estensore. Un valore di `1` o `UP` allinea il margine superiore del testo con la linea dell’estensore.

`arrow`

  Impostando questa sottoproprietà su `#t` viene generata la punta di una freccia a un’estremità della linea.

`padding`

  Questa sottoproprietà regola lo spazio tra l’estremità della linea specificata e la fine reale. Senza padding, un glissando inizia e termina nel centro della testa di ogni nota.

La funzione musicale `\endSpanners` termina prematuramente l’estensore che inizia nella nota immediatamente seguente. Viene terminato esattamente dopo una nota o alla stanghetta seguente se `to-barline` è impostato su vero e c’è una stanghetta prima della nota successiva.

>     \relative c'' {
>       \endSpanners
>       c2 \startTextSpan c2 c2
>       \endSpanners
>       c2 \< c2 c2
>     }

Quando si usa `\endSpanners` non è necessario chiudere \startTextSpan con \stopTextSpan, né è necessario chiudere le forcelle con `\!`.

#### Vedi anche

Guida al funzionamento interno: TextSpanner, Glissando, VoiceFollower, TrillSpanner, line-spanner-interface.

#### LilyPond — Guida alla Notazione v2.24.4 (ramo stabile).