| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Appearance of objects
Il est temps de mettre en pratique les notions apprises précédemment pour modifier l’allure de la partition ; les exemples qui suivent montrent l’utilisation des différentes méthodes de retouche.
| 4.3.1 Visibilité et couleur des objets | ||
| 4.3.2 Taille des objets | ||
| 4.3.3 Longueur et épaisseur des objets |
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Visibility and color of objects
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 |
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
stencil@translationof The stencil property
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 }
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
break-visibility@translationof The break-visibility property
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.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
transparent@translationof The transparent property
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.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
color@translationof The color property
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 (notation)Blanchiment des objets section ‘Blanchiment des objets’ dans Manuel de notation. 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 normales de la première
(notation)Liste des couleurs section ‘Liste des couleurs’ dans Manuel de notation.
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 variable.
Quand on l’invoque, elle fournit une liste de valeurs internes
requises pour changer la couleur en blanc. Les autres couleurs
aussi, dans la « liste normale », sont des variables. Pour en
être certain, vous pouvez faire l’essai en choisissant une autre
variable de la liste en guise de couleur.
Le deuxième moyen de changer la couleur consiste à utiliser la deuxième
(notation)Liste des couleurs section ‘Liste des couleurs’ dans Manuel de notation, dite noms de couleurs X11. Ceux-ci doivent
obligatoirement être précédés d’une fonction, x11-color,
qui convertit les noms symboliques de couleur X11 en une liste de
valeurs internes comme ceci :
\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 }
Vous noterez que, dans ce cas, la fonction x11-color admet un
symbole comme argument ; il faut donc placer une apostrophe devant
le symbole de telle sorte qu’il ne soit pas interprété comme une
variable, et insérer l’appel à la fonction à l’intérieur de
parenthèses.
Il existe une autre fonction, chargée elle de convertir les
valeurs RVB en couleurs internes – la fonction rgb-color.
Elle comporte 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 }
Enfin, il existe une échelle de gris parmi les possibilités de couleurs
X11. Elle 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.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Size of objects
Pour commencer, reprenons l’exemple qui se trouvait dans Expressions musicales imbriquées, qui montrait comment créer une nouvelle portée temporaire, du type (music-glossary)ossia section ‘ossia’ dans Glossaire.
\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 | } }
Normalement, les ossias ne comportent ni clef ni indication de mesure,
et elles sont imprimées légèrement plus petit que la portée principale.
Nous avons déjà appris à enlever la clef et la métrique – il suffit de
régler le stencil de chacun sur #f, comme ceci :
\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 | } }
La paire d’accolades ajoutée après la clause \with est nécessaire
pour être sûr que les retouches (\override) ainsi que la musique
qui se trouvent à l’intérieur soient bien appliquées à la portée
d’ossia.
Mais alors, quelle différence y a-t-il à modifier le contexte de portée
au moyen de \with ou à modifier les stencils de la clef et de la
métrique avec \override ou \omit comme ici ? La
principale différence est que les changements opérés dans une
clause \with sont réalisés au moment où le contexte est
créé et restent par la suite les valeurs par défaut aussi
longtemps que ce contexte existe, tandis que les commandes
\set ou \override insérées dans la musique sont
dynamiques – elles provoquent des changements synchronisés avec
un point particulier de la musique. Si les changements sont annulés ou
désactivés par \unset ou \revert, les réglages reprennent
leurs valeurs par défaut, c’est-à-dire celles qui ont été fixées dans la
clause \with, ou, en l’absence de celle-ci, les valeurs par
défaut normales.
Certaines propriétés de contexte ne peuvent être modifiées que dans une
clause \with. Il s’agit des propriétés qu’on ne peut évidemment
plus changer après que le contexte a été créé. C’est le cas de
alignAboveContext et de son pendant, alignBelowContext
– une fois que la portée a été créée, son alignement est décidé et cela
n’aurait aucun sens de vouloir le modifier par la suite.
Dans une clause \with, on peut aussi régler les valeurs par
défaut des propriétés d’un objet. Il suffit d’utiliser la commande
\override normale, sans s’occuper du nom de contexte
puisqu’il ne fait pas de doute qu’il s’agit du contexte en cours de
modification par la clause \with. Il se produirait même une
erreur si le contexte était précisé.
Remplaçons donc l’exemple ci-dessus par celui-ci :
\new Staff ="main" { \relative { r4 g'8 g c4 c8 d | e4 r8 << { f8 c c } \new Staff \with { alignAboveContext = "main" % Don't print clefs in this staff \override Clef.stencil = ##f % Don't print time signatures in this staff \override TimeSignature.stencil = ##f } { f8 f c } >> r4 | } }
Nous pourrions tout aussi bien utiliser les raccourcis \hide et
\omit pour activer la propriété transparent et désactiver
le stencil, ce qui donnerait :
\new Staff ="main" { \relative { r4 g'8 g c4 c8 d | e4 r8 << { f8 c c } \new Staff \with { alignAboveContext = "main" % Don't print clefs in this staff \omit Clef % Don't print time signatures in this staff \omit TimeSignature } { f8 f c } >> r4 | } }
Venons-en finalement au changement de taille des objets.
Certains objets sont créés comme des glyphes choisis dans une police de
caractères. C’est le cas des têtes de notes, des altérations, des
markup, des clefs, des métriques, des nuances et des paroles.
Pour changer leur taille, on modifie la propriété font-size,
comme nous le verrons rapidement. D’autres objets, comme les liaisons
de phrasé ou de prolongation – en général les objets étendus – sont
dessinés à la demande, si bien qu’aucune font-size ne leur est
associée. Ces objets tirent généralement leur dimension des objets
auxquels ils sont rattachés, de sorte qu’on ne doit pas avoir à les
redimensionner à la main. D’autres propriétés, comme la hauteur des
hampes et des barres de mesure, l’épaisseur des ligatures et d’autres
lignes, et l’écartement des lignes de portée, doivent encore être
modifiées de façon particulière.
Si l’on revient à l’exemple d’ossia, commençons par changer la taille de
police. Nous pouvons employer deux méthodes. Soit nous changeons la
taille de police de chaque type d’objet avec des commandes comme
celle-ci pour les têtes de notes (NoteHead) :
\override NoteHead.font-size = #-2 |
soit nous changeons la taille de toutes les polices à la fois grâce à la
propriété fontSize, en utilisant \set ou en l’insérant
dans une clause \with (mais alors sans le \set).
\set fontSize = #-2 |
Chacune de ces méthodes réduira la taille de police de deux points par rapport à sa valeur précédente, sachant que chaque point réduit ou augmente la taille d’environ 12 %.
Essayons sur l’exemple d’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 % Reduce all font sizes by ~24% fontSize = #-2 } { f8 f c } >> r4 | } }
Ce n’est pas encore parfait. Les têtes de notes et les crochets sont plus petits mais, proportionnellement, les hampes sont trop longues et les lignes de la portée trop espacées. Il faut donc les réduire dans les mêmes proportions que les polices de caractères. La prochaine sous-section montrera comment faire.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Length and thickness of objects
Dans LilyPond, les écartements et longueurs sont généralement mesurés en
« intervalles de lignes » (staff-spaces en anglais),
c’est-à-dire l’écartement qui sépare deux lignes adjacentes dans la
portée. Plus rarement, il est question de demi-intervalles de lignes.
Les propriétés d’épaisseur (thickness), quant à elles, sont
généralement mesurées en unités d’une propriété interne appelée
« épaisseur de ligne » (line-thickness). Par exemple, les
lignes de (de)crescendo présentent par défaut une épaisseur d’une
unité de line-thickness, alors que l’épaisseur d’une hampe
est de 1,3. Toutefois, certaines propriétés d’épaisseur sont
différentes : par exemple, l’épaisseur des ligature –
beam-thickness – se mesure en espaces de portée.
Dans ces conditions, comment ajuster les longueurs à la taille des
polices de caractères ? La solution consiste à utiliser une
fonction spéciale appelée magstep – pseudo facteur de zoom –,
créée précisément dans ce but. Elle comporte un argument, le changement
de taille de police (#-2 dans l’exemple précédent), à partir
duquel elle applique un facteur de mise à l’échelle qui réduit, ou
augmente, les objets en question. Voici comment elle s’utilise :
\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 % Reduce stem length and line spacing to match \override StaffSymbol.staff-space = #(magstep -2) } { f8 f c } >> r4 | } }
Puisque la longueur des hampes et plusieurs autres propriétés de
longueur sont calculées par rapport à la valeur de la propriété
staff-space, elles sont automatiquement mises à l’échelle. Vous
remarquerez que cela n’affecte que la dimension verticale de l’ossia –
la dimension horizontale étant déterminée par les objets de la portée
principale de façon à rester synchronisée vis-à-vis d’elle, elle n’est
pas affectée par tous ces changements de taille. Bien sûr, si l’échelle
de toute la portée principale était modifiée, tout le placement
horizontal s’en trouverait affecté. Il en sera question plus bas dans
cette section.
Voilà qui complète la création d’une ossia. Les taille et longueur de tous les objets peuvent être modifiées de manière analogue.
Pour de petits changements d’échelle, comme dans l’exemple ci-dessus, il
n’est généralement pas utile d’ajuster l’épaisseur des différentes
lignes telles que les barres de mesure, les ligatures, les soufflets de
crescendo ou decrescendo, les liaisons, etc. Si l’épaisseur d’un objet
en particulier doit être ajustée, le mieux est de modifier sa propriété
thickness. Nous avons vu plus haut, dans
Propriétés des objets de rendu, un exemple de modification de
l’épaisseur des liaisons. L’épaisseur de tous les objets tracés
(c’est-à-dire ceux qui ne proviennent pas d’une police de caractère)
peut être changée de la même manière.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] |
Ce document a été généré le le 13 juillet 2020 par gub en utilisant texi2html 1.82.
Autres langues : English, català, česky, deutsch, español, italiano, 日本語, nederlands.
À propos de la sélection automatique de la langue.