| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
@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.
| 4.3.1 Visibilità e colore degli oggetti | ||
| 4.3.2 Dimensione degli oggetti | ||
| 4.3.3 Lunghezza e spessore degli oggetti |
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
@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.
La proprietà stencil | ||
La proprietà break-visibility | ||
La proprietà transparent | ||
La proprietà color |
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
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 }
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 }
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 }
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 }
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
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 }
E vediamo che anche questo comando elimina tutte le stanghette.
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
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 }
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 }
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 }
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] | [ ? ] |
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 }
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 }
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 }
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 }
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] | [ ? ] |
@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 | } }
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 | } }
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 | } }
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 | } }
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 | } }
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] | [ ? ] |
@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 | } }
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.