[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

4.3 Aspetto degli oggetti

@translationof Appearance of objects

Mettiamo in pratica quello che abbiamo imparato con un po’ di esempi che mostrano come modificare l’aspetto degli elementi di una partitura.


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

4.3.1 Visibilità e colore degli oggetti

@translationof Visibility and color of objects

Potremmo voler creare una partitura priva di alcuni elementi a scopo didattico, perché lo studente possa esercitarsi a inserirli. Vediamo un semplice esempio e immaginiamo che l’esercizio consista nell’inserire le stanghette mancanti di un brano. Ma di norma le stanghette sono inserite automaticamente: come lo possiamo impedire?

Prima di iniziare, occorre ricordare che le proprietà degli oggetti sono raggruppate nelle cosiddette interfacce – si veda Proprietà presenti nelle interfacce. Queste servono semplicemente a raggruppare quelle proprietà che possono essere usate insieme per modificare un oggetto grafico – se una di queste è ammessa per un oggetto, lo sono anche le altre. Alcuni oggetti usano le proprietà di alcune interfacce, altri quelle di altre interfacce. Le interfacce che contengono le proprietà usate da un particolare grob (oggetto grafico) sono elencate nella guida al Funzionamento interno in fondo alla pagina che descrive il grob; queste proprietà possono essere individuate consultando quelle interfacce.

In Proprietà degli oggetti di formattazione abbiamo spiegato come trovare le informazioni sui grob. Usando lo stesso approccio, andiamo nella guida al Funzionamento interno per trovare l’oggetto grafico relativo alla stanghetta (bar line). Passando da Backend e All layout objects troviamo un oggetto grafico chiamato BarLine. Tra le sue proprietà ce ne sono due che controllano la visibilità: break-visibility e stencil. Anche Barline supporta varie interfacce, tra cui la grob-interface, dove troviamo le proprietà transparent e color. Tutte queste proprietà hanno degli effetti sulla visibilità delle stanghette (e, ovviamente, anche di molti altri oggetti grafici). Vediamole una per volta.


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

La proprietà stencil

@translationof The stencil property

Questa proprietà controlla l’aspetto delle stanghette specificando il simbolo (glifo) da usare. Come nel caso di molte altre proprietà, si può far in modo che non usi nessun simbolo impostando il suo valore su #f. Proviamo, come prima, omettendo il contesto implicito, Voice:

 
\relative {
  \time 12/16
  \override BarLine.stencil = ##f
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Le stanghette sono ancora visibili. Cosa abbiamo sbagliato? Torna alla guida del Funzionamento interno e scorri di nuovo la pagina che elenca le proprietà di BarLine. In cima alla pagina dice “Barline objects are created by: Bar_engraver”. Vai alla pagina Bar_engraver. In fondo si trova una lista dei contesti nel quale opera l’incisore della battuta. Tutti questi sono di tipo Staff, dunque la ragione per cui il comando \override precedente non funziona è che Barline non si trova nel contesto predefinito, Voice. Se il contesto indicato non è corretto, il comando non funziona. Non viene generato alcun messaggio di errore e non viene registrato niente nel file di log. Proviamo a correggerlo specificando il contesto giusto:

 
\relative {
  \time 12/16
  \override Staff.BarLine.stencil = ##f
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Ora le stanghette sono sparite. Impostare la proprietà stencil su #f è un’operazione talmente frequente che è stata creata una scorciatoia, \omit:

 
\relative {
  \time 12/16
  \omit Staff.BarLine
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Si noti però che impostare la proprietà stencil su #f causerà degli errori nel caso in cui le dimensioni dell’oggetto siano necessarie per elaborarlo correttamente. Ad esempio, si creano degli errori se la proprietà stencil dell’oggetto NoteHead è impostata su #f. In questo caso è possibile usare invece la funzione point-stencil, che trasforma lo stencil in un oggetto a dimensione zero:

 
\relative {
  c''4 c
  \once \override NoteHead.stencil = #point-stencil
  c4 c
}

[image of music]


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

La proprietà break-visibility

@translationof The break-visibility property

Nella pagina di BarLine della guida al Funzionamento interno vediamo che la proprietà break-visibility richiede un vettore di tre valori booleani. Questi valori controllano rispettivamente se le stanghette debbano comparire alla fine, in mezzo o all’inizio dei righi. Dato che nel nostro esempio vogliamo sopprimere tutte le stanghette, il valore che ci serve è #(#f #f #f) (equivalente al nome all-invisible). Proviamo, ricordando di includere il contesto Staff. Si noti che prima della parentesi di apertura abbiamo ##. Un # è necessario perché introduce un vettore, mentre il primo # deve precedere, come sempre, il valore del comando \override.

 
\relative {
  \time 12/16
  \override Staff.BarLine.break-visibility = ##(#f #f #f)
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

E vediamo che anche questo comando elimina tutte le stanghette.


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

La proprietà transparent

@translationof The transparent property

Nelle proprietà specificate nella pagina grob-interface della guida al Funzionamento interno vediamo che la proprietà transparent è un booleano. Quindi deve essere impostata su #t («true», ’vero’) per rendere trasparente il grob. Nel prossimo esempio rendiamo trasparente il segno di tempo invece delle stanghette. Per farlo dobbiamo trovare il nome del grob del segno di tempo (in inglese time signature). Torniamo alla pagina ‘All layout objects’ per scoprire quali sono le proprietà dell’oggetto di formattazione TimeSignature. Tale grob è generato dall’incisore Time_signature_engraver, che opera nel contesto Staff e supporta l’interfaccia grob-interface. Quindi il comando che rende trasparente l’indicazione di tempo è:

 
\relative {
  \time 12/16
  \override Staff.TimeSignature.transparent = ##t
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Impostare la proprietà transparent è un’operazione piuttosto frequente, perciò è stata creata la scorciatoia \hide:

 
\relative {
  \time 12/16
  \hide Staff.TimeSignature
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

L’indicazione di tempo è scomparsa; è rimasto però uno spazio al suo posto. Magari questo è quello che si desidera, ad esempio per creare un esercizio in cui uno studente deve riempire degli spazi vuoti. Ma in altre circostanze ciò può non essere gradito. Per eliminare lo spazio vuoto bisogna impostare la proprietà stencil su #f:

 
\relative {
  \time 12/16
  \omit Staff.TimeSignature
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

la differenza è ovvia: se si imposta lo stencil su #f (possibilmente con \omit) l’oggetto scompare del tutto; se si rende l’oggetto trasparente questo resta dove è, anche se invisibile.


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

La proprietà color

@translationof The color property

Infine, proviamo a rendere le stanghette invisibili colorandole di bianco. (Si tratta di un metodo problematico perché la stanghetta bianca può imbiancare o meno le linee del rigo che incrocia. Puoi vedere in alcuni degli esempi successivi che questo accade in modo imprevedibile. I motivi per cui questo accade e il modo in cui è possibile controllarlo sono esposti in (notation)Dipingere gli oggetti di bianco section ‘Dipingere gli oggetti di bianco’ in Guida alla Notazione. Ma per il momento stiamo imparando la proprietà color, quindi accettiamo questa limitazione.)

L’interfaccia grob-interface stabilisce che il valore della proprietà color è una lista, ma non spiega cosa debba essere questa lista. La lista di cui ha bisogno è in realtà una lista di valori in unità interne, ma per evitare di dover imparare quali siano queste unità vengono forniti vari modi di specificare un colore. Il primo modo consiste nell’usare uno dei colori ‘normali’ elencati nella prima tabella in (notation)Elenco dei colori section ‘Elenco dei colori’ in Guida alla Notazione. Per rendere bianche le stanghette scriviamo:

 
\relative {
  \time 12/16
  \override Staff.BarLine.color = #white
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

e di nuovo vediamo che le stanghette non sono visibili. Si noti che white non è preceduto da un apostrofo, perché non è un simbolo, ma una variabile. Quando viene esaminata, fornisce la lista di valori interni necessari per impostare il colore su bianco. Gli altri colori nella lista normale sono anch’essi delle variabili. Per convincerti che funziona potresti provare a cambiare il colore e usare una delle altre variabili presenti nella lista.

Il secondo modo per cambiare il colore è attraverso la lista di nomi di colori X11 che si trova in (notation)Elenco dei colori section ‘Elenco dei colori’ in Guida alla Notazione. Questi colori vengono trasformati in valori reali dalla funzione x11-color, che converte i simboli di colore X11 nella lista di valori interni:

 
\relative {
  \time 12/16
  \override Staff.BarLine.color = #(x11-color 'white)
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Si noti che in questo caso la funzione x11-color prende un simbolo come argomento, dunque il simbolo deve essere preceduto da un apostrofo per impedire che sia considerato una variabile e l’intera funzione deve essere racchiusa tra parentesi.

Esiste un’altra funzione, che converte i valori RGB in colori interni, la funzione rgb-color. Prende tre argomenti che specificano l’intensità dei colori rosso, verde e blu. I valori vanno da 0 a 1. Quindi per avere il colore rosso il valore sarà (rgb-color 1 0 0) e per avere il bianco sarà (rgb-color 1 1 1):

 
\relative {
  \time 12/16
  \override Staff.BarLine.color = #(rgb-color 1 1 1)
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Infine, è disponibile anche una scala di grigi, appartenente all’insieme di colori X11. Questi vanno dal nero, 'grey0, al bianco, 'grey100, con cadenza di 1. Ecco un esempio in cui tutti gli oggetti di formattazione sono impostati su diverse tonalità di grigio:

 
\relative {
  \time 12/16
  \override Staff.StaffSymbol.color = #(x11-color 'grey30)
  \override Staff.TimeSignature.color = #(x11-color 'grey60)
  \override Staff.Clef.color = #(x11-color 'grey60)
  \override Voice.NoteHead.color = #(x11-color 'grey85)
  \override Voice.Stem.color = #(x11-color 'grey85)
  \override Staff.BarLine.color = #(x11-color 'grey10)
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Nota i contesti associati a ciascuno degli oggetti di formattazione. È importante scegliere quelli giusti, altrimenti i comandi non funzioneranno! Ricorda, il contesto è quello in cui si trova il relativo incisore. Il contesto predefinito per gli incisori si trova partendo dall’oggetto di formattazione (layout object) per poi andare all’incisore che lo produce: la pagina dell’incisore nella guida al Funzionamento interno riporterà a quale contesto appartenga di norma l’incisore.


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

4.3.2 Dimensione degli oggetti

@translationof Size of objects

Iniziamo rivedendo l’esempio precedente (vedi Annidare le espressioni musicali) che mostrava come inserire un nuovo rigo temporaneo, come in un (music-glossary)ossia section ‘ossia’ in Glossario Musicale.

 
\new Staff ="main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main" }
      { f8 f c }
    >>
    r4 |
  }
}

[image of music]

Gli ossia di norma vengono scritti senza chiave e senza indicazione di tempo e hanno solitamente una dimensione leggermente inferiore a quella del rigo principale. Sappiamo già come togliere la chiave e il segno di tempo, cioè impostando semplicemente la proprietà stencil di ciascun oggetto su #f, così:

 
\new Staff ="main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main"
      }
      {
        \omit Staff.Clef
        \omit Staff.TimeSignature
        { f8 f c }
      }
    >>
    r4 |
  }
}

[image of music]

dove l’ulteriore coppia di parentesi dopo il blocco \with è necessaria perché le sovrascritture e la musica racchiusi siano applicati al rigo dell’ossia.

Ma qual è la differenza tra modificare il contesto del rigo con \with e modificare la proprietà stencil della chiave e del segno di tempo con \override o in questo caso \omit? La principale differenza è che le modifiche inserite in un blocco \with vengono applicate nel momento in cui viene creato il contesto e permangono come valori predefiniti per la durata di quel contesto, mentre i comandi \set o \override incorporati nel blocco della musica sono dinamici – le loro modifiche sono sincronizzate con un punto preciso della musica. Se le modifiche sono disattivate o ripristinate con \unset o \revert tornano ai valori stabiliti nel blocco \with o, in mancanza di impostazioni al suo interno, a quelli predefiniti.

Alcune proprietà di contesto possono essere modificate solo nei blocchi \with. Si tratta di quelle proprietà che non si possono modificare in seguito alla creazione del contesto. alignAboveContext e alignBelowContext sono due di esse: dopo la creazione del rigo il suo allineamento è fissato, e non ha senso tentare di cambiarlo successivamente.

I valori predefiniti delle proprietà degli oggetti di formattazione possono essere definiti anche nei blocchi \with. Basta usare il normale comando \override senza specificare il nome del contesto, dato che questo è definito senza ambiguità come il contesto che il blocco \with sta modificando. Anzi, viene generato un errore se si specifica un contesto in questa situazione.

Dunque possiamo sostituire l’esempio precedente con

 
\new Staff ="main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main"
        % Nasconde le chiavi di questo rigo
        \override Clef.stencil = ##f
        % Nasconde le indicazioni di tempo di questo rigo
        \override TimeSignature.stencil = ##f
      }
      { f8 f c }
    >>
    r4 |
  }
}

[image of music]

Si possono usare anche le scorciatoie \hide e \omit per impostare la proprietà transparent e togliere lo stencil

 
\new Staff ="main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main"
        % Nasconde le chiavi di questo rigo
        \omit Clef
        % Nasconde le indicazioni di tempo di questo rigo
        \omit TimeSignature
      }
      { f8 f c }
    >>
    r4 |
  }
}

[image of music]

Infine arriviamo a modificare la dimensione degli oggetti di formattazione.

Alcuni oggetti di formattazione sono dei glifi scelti da un tipo di carattere. Ad esempio le teste di nota, le alterazioni, le annotazioni, le chiavi, le indicazioni di tempo, le dinamiche, il testo vocale. La loro dimensione varia se si modifica la proprietà font-size, come vedremo a breve. Altri oggetti di formattazione come le legature di portamento e di valore – in generale, tutti gli oggetti estensori (spanner) – vengono disegnati individualmente, dunque non esiste un font-size a loro associato. Questi oggetti generalmente derivano la loro dimensione dagli oggetti a cui sono connessi, quindi di solito non è necessario modificare la loro dimensione a mano. Altre proprietà, come la lunghezza dei gambi e delle stanghette, lo spessore delle travature e di altre linee e la separazione delle linee del rigo, devono essere modificate in modi speciali.

Tornando all’esempio dell’ossia, proviamo prima a cambiare font-size. Possiamo farlo in due modi. Possiamo modificare la dimensione dei tipi di carattere di ogni tipo di oggetto, come le teste di nota (NoteHead) con un comando di questo tipo

 
\override NoteHead.font-size = #-2

oppure possiamo modificare la dimensione di tutti i tipi di carattere usando una proprietà speciale, fontSize, con \set oppure includendola in un blocco \with (ma senza \set).

 
\set fontSize = #-2

Entrambe queste dichiarazioni fanno sì che la dimensione del tipo di carattere sia ridotta di due unità rispetto al valore precedente, dove ogni unità riduce o aumenta la dimensione di circa il 12%.

Proviamolo nel nostro esempio dell’ossia:

 
\new Staff ="main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main"
        \omit Clef
        \omit TimeSignature
        % Riduce la dimensione di tutti i tipi di carattere di circa il 24%
        fontSize = #-2
      }
      { f8 f c }
    >>
    r4 |
  }
}

[image of music]

L’esempio non è ancora a posto. Le teste di nota e le code sono più piccole, ma in proporzione i gambi sono troppo lunghi e le linee del rigo sono troppo separate. Dovrebbero essere scalati in proporzione alla riduzione del tipo di carattere. La prossima sezione spiega come farlo.


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

4.3.3 Lunghezza e spessore degli oggetti

@translationof Length and thickness of objects

Distanze e lunghezze in LilyPond sono misurate generalmente in staff-space, ovvero la distanza tra linee adiacenti del rigo (o talvolta la metà di uno spazio rigo), mentre gran parte delle proprietà che controllano lo spessore (thickness) sono misurate con l’unità di misura di una proprietà interna chiamata line-thickness. Ad esempio, lo spessore predefinito delle linee delle forcine è di 1 unità di line-thickness, mentre lo spessore (thickness) di un gambo di nota è 1.3. Si noti che alcune proprietà dello spessore sono diverse; per esempio, lo spessore delle travature è controllato dal valore della proprietà beam-thickness, che si misura in staff-space.

Dunque come si possono scalare le lunghezze in proporzione alla dimensione del carattere? È possibile ricorrendo a una funzione speciale chiamata magstep, che serve proprio a questo scopo. Prende un argomento, la modifica della dimensione del tipo di carattere (#-2 nell’esempio precedente) e restituisce un fattore di ridimensionamento adatto a ridurre gli altri oggetti proporzionalmente. Si usa in questo modo:

 
\new Staff ="main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main"
        \omit Clef
        \omit TimeSignature
        fontSize = #-2
        % Riduce proporzionalmente la lunghezza dei gambi e la spaziatura tra le linee
        \override StaffSymbol.staff-space = #(magstep -2)
      }
      { f8 f c }
    >>
    r4 |
  }
}

[image of music]

Dato che la lunghezza dei gambi e molte altre proprietà relative alla lunghezza sono sempre calcolate in relazione al valore della proprietà staff-space, anche queste sono automaticamente ridimensionate in lunghezza. Nota che ciò riguarda solo la scala verticale dell’ossia – la scala orizzontale è determinata dalla formattazione della musica principale perché deve restare sincronizzata con quest’ultima, quindi le modifiche di dimensione non la riguardano. Ovviamente, se la scala di tutta la musica principale venisse cambiata allora la spaziatura orizzontale cambierebbe. Tratteremo questo argomento più avanti, nella parte relativa alla formattazione.

Questo completa la creazione dell’ossia. Le dimensioni e le lunghezze di tutti gli altri oggetti possono essere modificati in modi analoghi.

Per piccole modifiche della dimensione, come nell’esempio precedente, non sono necessari solitamente degli aggiustamenti globali dello spessore delle varie linee disegnate (come stanghette, travature, forcine, legature di portamento, etc.). Se si deve aggiustare lo spessore di un particolare oggetto di formattazione, è meglio sovrascrivere la sua proprietà thickness. Un esempio di come modificare lo spessore delle legature di portamento è stato mostrato prima in Proprietà degli oggetti di formattazione. Lo spessore di tutti gli oggetti disegnati (ovvero quelli non prodotti da un tipo di carattere) può essere cambiato nello stesso modo.


[ < ] [ > ]   [ << ] [ Su ] [ >> ]

This document was generated by gub on Luglio 13, 2020 using texi2html 1.82.

Altre lingue: English, català, česky, deutsch, español, français, 日本語, nederlands.
A proposito della selezione automatica della lingua.