4.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

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]


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
}

[image of music]

E vediamo che anche questo comando elimina tutte le stanghette.


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
}

[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.


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 ‘normali’ elencati nella prima tabella 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
}

[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 Elenco dei colori. 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.


Altre lingue: English, català, česky, deutsch, español, français, 日本語, nederlands.
About automatic language selection.

LilyPond — Manuale di apprendimento v2.21.0 (ramo di sviluppo).