[ << Retouche de partition ] | [Racine][Table des matières][Index] | [ Modèles >> ] |
[ < Apparence des objets ] | [Plus haut: Apparence des objets ] | [ La propriété stencil > ] |
5.3.1 Visibilité et couleur des objets
Dans un but pédagogique, on peut être amené à masquer certains éléments d’une partition, que les élèves doivent ensuite compléter. Imaginons, par exemple, un exercice dans lequel il faudrait rétablir les barres de mesure dans un morceau de musique. En temps normal, les barres de mesure s’insèrent automatiquement. Comment faire pour les effacer de la partition ?
Avant de nous y attaquer, souvenons-nous que les propriétés d’objets sont parfois groupées dans ce qu’on appelle des interfaces – voir Propriétés listées par interface. Cela permet de rapprocher toutes les propriétés susceptibles d’être utilisées ensemble pour modifier un objet graphique – si l’une d’elles est choisie pour un objet, elle s’appliquera à tous les autres. Certains objets tirent alors leurs propriétés de telle ou telle interface, d’autres objets de telle ou telle autre interface. La liste des interfaces qui contiennent les propriétés liées à un objet graphique (grob) figure dans la RPI, en bas de la page de description du grob ; pour voir ces propriétés, il faut aller voir ces interfaces.
Nous avons vu, dans Propriétés des objets de rendu, comment
trouver les informations sur les grobs. Nous procédons de la
même manière et consultons la RPI pour connaître l’objet chargé
d’imprimer les barres de mesure. En cliquant sur Backend puis
sur Tous les objets de rendu, nous trouvons un objet appelé
BarLine
. Parmi ses propriétés, deux d’entre elles déterminent
son aspect visuel : break-visibility
et stencil
.
L’objet BarLine
est également lié à plusieurs interfaces, dont la
grob-interface
où figurent les propriétés transparent
et
color
. Toutes peuvent modifier l’aspect visuel des barres de
mesure – et de beaucoup d’autres objets, bien sûr. Examinons chacune
d’elles tour à tour.
La propriété stencil | ||
La propriété break-visibility | ||
La propriété transparent | ||
La propriété color |
[ << Retouche de partition ] | [Racine][Table des matières][Index] | [ Modèles >> ] |
[ < Visibilité et couleur des objets ] | [Plus haut: Visibilité et couleur des objets ] | [ La propriété break-visibility > ] |
La propriété stencil
Cette propriété contrôle l’apparence des barres de mesure en précisant
le type de symbole (glyphe) à imprimer. Comme pour de nombreuses
autres propriétés, on peut lui indiquer de ne rien imprimer en lui
attribuant la valeur #f
. Essayons en laissant de côté, une fois
encore, le contexte concerné (Voice
en l’occurrence) :
\relative { \time 12/16 \override BarLine.stencil = ##f c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Les barres de mesure sont encore là ! Pourquoi ? Retournons
à la RPI et regardons de nouveau la page qui traite des propriétés de
BarLine
. En haut de la page, il est précisé que « Les objets
BarLine sont créés par le graveur Bar_engraver ». Allons à la page de
Bar_engraver
. Tout en bas se trouve la liste des contextes dans
lesquels fonctionne ce graveur. Tous sont du type Staff
, de
sorte que, si la commande \override
n’a pas fonctionné comme
prévu, c’est parce que Barline
n’appartient pas au contexte par
défaut, Voice
. Si le contexte spécifié est erroné, la commande
ne fonctionne pas. Cela n’entraîne pas de message d’erreur, et rien
n’apparaît dans le fichier log. Essayons de corriger en
mentionnant le bon contexte :
\relative { \time 12/16 \override Staff.BarLine.stencil = ##f c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Cette fois, les barres de mesure ont disparu. Désactiver la
propriété stencil
est une opération tellement fréquente que
LilyPond dispose d’un raccourci – \omit
(pour « oublier »)
– à cet effet :
\relative { \time 12/16 \omit Staff.BarLine c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Vous remarquerez que l’affectation de la valeur #f
à la propriété
stencil
déclenchera une erreur dès lors que l’objet en question se
doit d’avoir des dimensions pour les nécessités du traitement. Ce sera
le cas, par exemple, si vous effacez le stencil
d’un objet
NoteHead
. Il vaut mieux, en pareil cas, utiliser la fonction
point-stencil
qui, quant à elle, attribue à l’objet une taille à
zéro :
\relative { c''4 c \once \override NoteHead.stencil = #point-stencil c4 c }
[ << Retouche de partition ] | [Racine][Table des matières][Index] | [ Modèles >> ] |
[ < La propriété stencil ] | [Plus haut: Visibilité et couleur des objets ] | [ La propriété transparent > ] |
La propriété break-visibility
La RPI mentionne, à la page sur BarLine
, que la propriété
break-visibility
attend comme argument un vecteur de trois
booléens. Ceux-ci indiquent respectivement si les barres de mesure
doivent être imprimées ou non à la fin de la ligne, à l’intérieur de la
ligne et au début de la ligne. Dans notre cas, nous voulons que toutes
les barres soient supprimées, si bien que la valeur dont nous avons
besoin est #(#f #f #f)
. Essayons, sans oublier d’ajouter le
contexte Staff
. Vous remarquerez que, en plus de cette valeur,
nous ajoutons ##
devant la parenthèse ouvrante. Un second
#
est nécessaire car il fait partie intégrante de la valeur
contenant un vecteur, et le premier #
est là, comme
toujours avec la commande \override
, pour introduire la
valeur elle-même.
\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 }
Comme on peut le constater, cette solution-là aussi supprime les barres de mesure.
[ << Retouche de partition ] | [Racine][Table des matières][Index] | [ Modèles >> ] |
[ < La propriété break-visibility ] | [Plus haut: Visibilité et couleur des objets ] | [ La propriété color > ] |
La propriété transparent
La RPI mentionne, à la page sur grob-interface
, que la propriété
transparent
attend comme argument un booléen. Il faudrait donc
mettre #t
pour rendre l’objet transparent. Dans cet exemple,
essayons de rendre transparente la métrique (time signature en
anglais) plutôt que les barres de mesure. Pour cela, il nous faut
trouver le nom du grob chargé de l’indication de mesure. De
retour sur la page « Tous les objets de rendu » de la RPI, nous
cherchons les propriétés de l’objet TimeSignature
. Celui-ci est
géré par le graveur Time_signature_engraver
qui, comme vous
pouvez le constater, appartient au contexte Staff
et peut se
rattacher à la grob-interface
. Dans ces conditions, la commande
pour rendre la métrique transparente est :
\relative { \time 12/16 \override Staff.TimeSignature.transparent = ##t c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
L’utilisation de la propriété transparent
étant
relativement fréquent, LilyPond dispose d’un raccourci à cet
effet : \hide
(pour « masquer »).
\relative { \time 12/16 \hide Staff.TimeSignature c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
La métrique a bien disparu dans les deux cas, mais la commande a
laissé un blanc en lieu et place du chiffrage. Ce peut être
souhaitable dans le cadre d’un exercice, afin que les élèves aient
la place pour compléter, mais dans d’autres circonstances, ce peut
être gênant. Pour y remédier, attribuons plutôt au stencil des
métriques la valeur #f
:
\relative { \time 12/16 \omit Staff.TimeSignature c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
La différence est flagrante : le fait d’attribuer au stencil la
valeur #f
ou grâce à \omit
supprime totalement
l’objet, tandis que le fait de le rendre transparent
– ce
qui s’obtient aussi par la commande \hide
– le laisse en
place, mais de façon invisible.
[ << Retouche de partition ] | [Racine][Table des matières][Index] | [ Modèles >> ] |
[ < La propriété transparent ] | [Plus haut: Visibilité et couleur des objets ] | [ Taille des objets > ] |
La propriété color
Essayons enfin de rendre les barres de mesure invisibles en les colorant en blanc. La difficulté est de savoir si les barres blanches vont couper ou non les lignes de la portée aux endroits où elles se croisent. Vous verrez dans les exemples ci-dessous que cela peut se produire, sans qu’on le sache à l’avance. Les explications de ce phénomène et les solutions pour y remédier sont exposées dans Blanchiment des objets. Pour le moment, acceptons cet inconvénient et concentrons-nous sur l’apprentissage de la gestion des couleurs.
La grob-interface
indique que la valeur de la propriété
color
est une liste, sans plus d’explication. En fait, cette
liste est une liste de valeurs en unités internes ; pour éviter
d’avoir à chercher ce qu’il faut y mettre, il existe différents moyens
d’indiquer la couleur. Le premier moyen consiste à utiliser l’une des
couleurs CSS de la première
Liste des couleurs.
Pour mettre les barres de mesure en blanc, on écrit :
\relative { \time 12/16 \override Staff.BarLine.color = "white" c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
et nous constatons que les barres de mesure sont une fois de plus
invisibles. Attention : aucune apostrophe ne précède white
– il
ne s’agit pas d’un symbole, mais d’une chaîne de caractères mappée dans
une liste prédéfinie de valeurs internes. La syntaxe de Lilypond, à ce
propos, ressemble en tout point au langage CSS couremment utilisé pour les pages internet. En plus des
noms prédéfinis, il est possible de spécifier une couleur par un code
hexadécimal :
\relative { \time 12/16 \override Staff.BarLine.color = "#FFFFFF" c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Un autre moyen d’ajouter des couleurs à une partition consiste à
recourir à une fonction. Deux fonctions sont utiles à cet égard : la
fonction x11-colors
que nous verrons plus avant, et la fonction
rgb-colors
qui, quant à elle, illustre la logique interne de
LilyPond. Cette fonction prend trois arguments, donnant respectivement
l’intensité du rouge, du vert et du bleu. Ces arguments prennent des
valeurs comprises entre 0 et 1. Ainsi, pour choisir la couleur rouge, la
valeur serait (rgb-color 1 0 0)
; pour le blanc, ce serait
(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 }
+Notez bien que, dans ce cas, l’intégralité de l’appel à cette fonction
est borné par des parenthèses. Il en va de même pour la fonction
x11-colors
que nous avions laissée de côté.
La fonction x11-colors
, elle aussi, convertit les noms
symboliques de couleur en une liste de valeurs internes, mais elle offre
plus de choix que les couleurs CSS comme on peut le constater dans la
Liste des couleurs. Par exemple, elle comporte une échelle de
gris qui va du noir ('grey0
) au blanc ('grey100
), avec
un pas de 1. Essayons de l’utiliser en attribuant à tous les objets de
notre exemple différentes nuances de gris :
\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 }
Vous remarquerez le contexte associé à chacun des objets. Une erreur sur ce point empêcherait la commande de fonctionner. Souvenez-vous que le contexte est celui dans lequel est placé le graveur approprié. Pour chaque graveur, on peut trouver son contexte par défaut en partant de l’objet lui-même, puis en cherchant le graveur qui le produit ; la page du graveur dans la RPI nous indique alors le contexte dans lequel le graveur se trouve normalement.
[ << Retouche de partition ] | [Racine][Table des matières][Index] | [ Modèles >> ] |
[ < La propriété transparent ] | [Plus haut: Visibilité et couleur des objets ] | [ Taille des objets > ] |