[ << Modifica dell'output ] | [Inizio][Contenuti][Indice] | [ Modelli >> ] |
[ < Aspetto degli oggetti ] | [ Su : Aspetto degli oggetti ] | [ La proprietà stencil > ] |
5.3.1 Visibilità e colore degli oggetti
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 |
[ << Modifica dell'output ] | [Inizio][Contenuti][Indice] | [ Modelli >> ] |
[ < Visibilità e colore degli oggetti ] | [ Su : Visibilità e colore degli oggetti ] | [ La proprietà break-visibility > ] |
La proprietà stencil
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 }
[ << Modifica dell'output ] | [Inizio][Contenuti][Indice] | [ Modelli >> ] |
[ < La proprietà stencil ] | [ Su : Visibilità e colore degli oggetti ] | [ La proprietà transparent > ] |
La proprietà break-visibility
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.
[ << Modifica dell'output ] | [Inizio][Contenuti][Indice] | [ Modelli >> ] |
[ < La proprietà break-visibility ] | [ Su : Visibilità e colore degli oggetti ] | [ La proprietà color > ] |
La proprietà transparent
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.
[ << Modifica dell'output ] | [Inizio][Contenuti][Indice] | [ Modelli >> ] |
[ < La proprietà transparent ] | [ Su : Visibilità e colore degli oggetti ] | [ Dimensione degli oggetti > ] |
La proprietà color
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 Dipingere gli oggetti di bianco. 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 ‘CSS’ predefiniti elencati
in
Elenco dei colori. 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, bensì una stringa, associata a un elenco predefinito di valori interni. In questo caso la sintassi di LilyPond imita il linguaggio CSS comunemente usato nelle pagine web; oltre ai nomi predefiniti, è possibile specificare un codice colore esadecimale:
\relative { \time 12/16 \override Staff.BarLine.color = "#FFFFFF" c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Potremmo perfino definire questo colore in una variabile e poi usare questa variabile come definizione di proprietà. Essendo sia una variabile LilyPond che un oggetto Scheme, può essere preceduta indifferentemente da una barra inversa o dal cancelletto:
whiteVar = "#FFFFFF" \relative { \time 12/16 \override Staff.BarLine.color = \whiteVar c''4 b8 c d16 c d8 | \override Staff.BarLine.color = #whiteVar g,8 a16 b8 c d4 e16 | e8 }
Un altro modo di aggiungere colori a una partitura consiste nell’uso di
una funzione. Esistono due funzioni utili a questo proposito: una è la
funzione x11-color
, che impareremo a usare tra poco. L’altra,
la funzione rgb-color
, dimostra bene la logica interna di LilyPond:
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 }
Notare che in questo caso l’intera chiamata alla funzione deve essere
racchiusa tra parentesi. Lo stesso vale per la funzione x11-color
che abbiamo appena saltato.
x11-color
associa i nomi di colore predefiniti a valori interni – ma
offre molte più scelta dei nomi CSS, come si può vedere in
Elenco dei colori. Per esempio, l’insieme di colori X11 include
un’ampia scala di grigi, i cui nomi 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.
[ << Modifica dell'output ] | [Inizio][Contenuti][Indice] | [ Modelli >> ] |
[ < La proprietà transparent ] | [ Su : Visibilità e colore degli oggetti ] | [ Dimensione degli oggetti > ] |