22.2.2 Utilisation de balises
La commande \tag affecte un nom à une expression musicale.
\tag #'toto { ... }
Les expressions ainsi balisées peuvent aisément se manipuler comme un tout.
Conserver et exclure de la musique balisée
Si la commande \keepWithTag permet de conserver une expression
musicale balisée, la commande \removeWithTag exclura la musique
balisée.
Filtre Résultat Musique balisée précédée de \keepWithTag #'nomou
\keepWithTag #'(nom1 nom2…)Musique non balisée et musique balisée par l’un des noms de balise fournis seront incluses ; la musique balisée autrement est exclue. Musique balisée précédée de \removeWithTag #'nomou
\removeWithTag #'(nom1 nom2…)Musique non balisée et fragments appelés autrement que par l’un des noms fournis seront inclus ; la musique balisée par l’un des noms mentionnés est exclue. Musique balisée non précédée de \keepWithTagou
\removeWithTagMusique balisée et non balisée seront incluses.
L’argument des commandes \tag, \keepWithTag et
\removeWithTag doit être un symbole ou une liste de symboles (tel
que #'conducteur ou #'(violonI violonII)), suivi d’une
expression musicale. Si, et seulement si les symboles sont des
indentifiants LilyPond valides (caractères alphabétiques uniquement,
sans chiffre, souligné ou tiret) qui ne peuvent se confondre avec des
notes, le préfixe #' peut s’omettre et, pour raccourcir, une
liste de symboles peut utiliser la virgule en séparateur – autrement
dit, \tag #'(violinI violinII) peut s’écrire \tag
violinI,violinII. Ceci s’applique aussi bien pour \keepWithTag
que pour \removeWithTag.
Les commandes de balisage sont des fonctions musicales ; elles ne
peuvent donc s’utiliser pour filtrer des éléments qui ne sont pas des
expressions musicales tels que des blocs \book ou \score.
Dans l’exemple qui suit, nous obtenons deux versions du même extrait, l’une pour le conducteur, l’autre pour l’instrumentiste qui, elle, comportera les ornements développés.
music = \relative { g'8. c32 d \tag #'trills { d8.\trill } \tag #'expand { \repeat unfold 3 { e32 d } } c32 d } \score { \keepWithTag #'trills \music } \score { \keepWithTag #'expand \music }![]()
Il est parfois plus aisé d’exclure des fragments :
music = \relative { g'8. c32 d \tag #'trills { d8.\trill } \tag #'expand { \repeat unfold 3 { e32 d } } c32 d } \score { \removeWithTag #'expand \music } \score { \removeWithTag #'trills \music }![]()
Lorsque des balises concernent des alternatives de durée non nulle, ces
alternatives sont souvent conceptuellement simultanées. Il vaut alors
mieux mettre ces alternatives dans des expressions musicales simultanées
de telle sorte que l’expression musicale ait la même durée quelle que
soit la balise retenue. Ceci est tout particulièrement important lorsque
les balises sont utilisées conjointement avec des commandes telles que
\cueDuring.
outputTypeTag = "isScore" firstInstrument = \relative c' { << \tag #'isPart { \cueDuring "quoteSecondInstrument" #UP { r2 } } \tag #'isScore { r2 } >> e4 f | g4 a b c | } secondInstrument= \relative c'' { c4 c r2 | \cueDuring "quoteFirstInstrument" #DOWN { r2 } c4 c | } \addQuote quoteFirstInstrument \firstInstrument \addQuote quoteSecondInstrument \secondInstrument \new Staff { \keepWithTag \outputTypeTag \firstInstrument } \new Staff { \keepWithTag \outputTypeTag \secondInstrument }![]()
Ce principe de filtrage peut s’appliquer aux articulations, textes, etc. Il suffit de positionner
-\tag #ma-balise
avant l’articulation ou le texte, comme ici :
c1-\tag #'doigt ^4 c1-\tag #'gaffe ^"Attention !"
Ceci définira une note avec une indication conditionnelle de doigté ou un texte.
Vous pouvez baliser différemment la même expression musicale en
saisissant plusieurs \tag ou bien en combinant plusieurs balises
dans une liste :
music = \relative c'' { \tag AA \tag AB { a4 a a a } \tag BB,both { b4 b b b } } << \keepWithTag AA \music \keepWithTag BB \music \keepWithTag AB \music >>![]()
L’application concomitante de plusieurs filtres \removeWithTag à
la même expression musicale permet d’exclure plusieurs balisages. Une
liste fournie en argument à un unique \removeWithTag produira le
même effet :
music = \relative c'' { \tag AA { a4 a a a } \tag BB { b4 b b b } \tag CC { c4 c c c } \tag DD { d4 d d d } } \new Voice { \removeWithTag BB \removeWithTag CC \music \removeWithTag BB,CC \music }![]()
L’application de plus d’un filtre \keepWithTag à la même
expression musicale aboutit à l’exclusion de tous les balisages, ce
qui n’est certainement pas l’effet attendu : si le premier filtre exclut
tous les autres balisages, l’application du second exclura les effets du
premier. L’utilisation d’une unique commande \keepWithTag avec
une liste de balises est en pareil cas des plus pertinentes : seront
exclus tous les fragments non concernés par l’une quelconque des balises
mentionnées. Le code suivant, à titre d’exemple, imprimera les
\tags violinI et violinII, mais ni viola ni
cello.
music = \relative c'' { \tag violinI { a4 a a a } \tag violinII { b4 b b b } \tag viola { c4 c c c } \tag cello { d4 d d d } } \new Staff { \keepWithTag violinI,violinII \music }![]()
Bien que \keepWithTag soit efficace pour gérer un jeu
d’alternatives, le rejet de musique filtrée par des balises
étrangères se révèle problématique lorsque les \tag sont
utilisés à plusieurs fins. Des « groupements de balises » peuvent alors
être déclarés à l’aide de \tagGroup. Un code tel que
\tagGroup violinI,violinII,viola,cello
met les quatre balises dans un seul regroupement. Par conséquent, taper
\keepWithTag violinI …
ne prendra désormais en compte que la musique concernée par la balise
violinI du groupe de filtres : tout élément de la musique qui
serait balisé par l’un des autres filtres de ce jeu sera rejeté, comme
le montre l’exemple suivant.
\tagGroup violinI,violinII \tagGroup original,arranged music = \relative { \tag violinI { c''4^"violinI" c c c } \tag violinII { a2 a } \tag original { e8 e e2. } \tag arranged { d'2 d4 d } \tag other { f^"other" f f f } R1^"untagged" } \new Voice { \keepWithTag violinI \music }![]()
Il est à noter que les balises ne peuvent être incluses que dans un seul regroupement.
Préposition et apposition a de la musique balisée
Il peut arriver que vous ayez besoin de raccorder quelque chose en un
point particulier d’une expression musicale. Les commandes
\pushToTag et \appendToTag permettent d’insérer du
matériau, qu’il soit antérieur ou postérieur, à des constructions
musicales existantes. Les différentes possibilités sont les suivantes :
- Musique séquentielle ou simultanée
Lorsqu’a été balisée l’intégralité d’une construction
{…}ou<<…>>, peuvent venir s’insérer, avant ou après, des expression musicales.- Accords
Lorsqu’a été balisé un accord
<…>, peuvent venir s’y ajouter, avant ou après, d’autres notes ou des articulations, ces dernières pour l’accord dans sa globalité.- Notes et silences
Lorsque la musique balisée est une note (y compris à l’intérieur d’un accord), ou un silence, peuvent venir s’y ajouter, avant ou après, d’autres articulations.
Afin d’ajouter d’autres notes, il est préférable de les placer dans une construction d’accord et baliser l’accord. Notez bien qu’il n’est pas possible de baliser une simple articulation et y ajouter quelque chose, puisqu’il ne s’agit pas d’une liste ; il vaut alors mieux baliser la note.
Ces deux instructions sont affectées d’une balise, le matériau à raccorder à chaque instance de la balise, et l’expression balisée.
music = { \tag #'here { \tag #'here <<c''>> } } { \pushToTag #'here c' \pushToTag #'here e' \pushToTag #'here g' \music \appendToTag #'here c' \appendToTag #'here e' \appendToTag #'here g' \music }![]()
Remplacement de musique balisée
Il est possible de remplace de la musique balisée par une autre musique.
music = { c' \tag #'ici { d' } e' } { \music \replaceWithTag #'ici c' \music }![]()
Il faut bien garder à l’esprit que la balise disparaît avec son remplacement ; elle ne peut donc être remplacée qu’une seule fois. Le filtrage aussi n’est plus possible à la suite du remplacement.
music = { c' \tag #'ici { d' } e' } { \removeWithTag #'ici % sans effet à cause du remplacement de balise \replaceWithTag #'ici c' \music }![]()
Balise et markup
La commande \tag peut s’utiliser aussi dans des \markup.
LilyPond fournit les commandes \keep-with-tag,
\remove-with-tag, \push-to-tag, \append-to-tag et
\replace-with-tag qui se comportent comme celles utilisées pour
les expressions musicales.
test = \markup { \tag #'AA a \tag #'BB b \tag #'CC c } \markup { \keep-with-tag #'BB \test } \markup { \remove-with-tag #'BB \test } \markup { \push-to-tag #'CC pre \test } \markup { \append-to-tag #'CC post \test } \markup { \replace-with-tag #'CC sub \test }![]()
Les commandes musicales \keepWithTag et \removeWithTag
filtrent aussi les balises des portions \markup incluses dans la
musique.
music = \relative { c'4^\markup { \tag #'one first \tag #'two second part } c c c } { \keepWithTag #'one \music \removeWithTag #'one \music }![]()
Il est aussi possible d’insérer ou ajouter quelque chose à un
\markup attaché aux objets musicaux. On ne peut toutefois
utiliser \pushToTag, \appendToTag ou
\replaceWithTag puisqu’ils ne traîtent que de la musique ;
cependant, \pushToTagMarkup, \appendToTagMarkup et
\replaceWithTagMarkup sont conçus pour rajouter un markup.
music = \relative { c'4^\markup { \tag #'part part } c c c } { \pushToTagMarkup #'part "great" \music \appendToTagMarkup #'part \markup { is also great } \music \replaceWithTagMarkup #'part \markup { cool substitution } \music }![]()
Le filtrage des balises fonctionne aussi lorsque de la musique comprise
dans un bloc \score est membre d’une commande de markup.
music = \relative { c'2^\markup { \tag #'first first \tag #'second second } c \tag #'first { d d } \tag #'second { f f } } \markup { \keep-with-tag #'first \score { \music } \remove-with-tag #'first \score { \music } }![]()
Une attention particulière doit toutefois être portée lors de
l’utilisation de balises avec des listes de markups. Les
fonctions de filtrage fonctionent comme prévu, mais les commandes telles
que \push-to-tag, \append-to-tag et
\replace-with-tag posent problème.
\markup { \remove-with-tag #'test { a \tag #'test { b c } d } } \markup { \push-to-tag #'test "twice" { a \tag #'test { b c } d } } \markup { \replace-with-tag #'test "twice" { a \tag #'test { b c } d } }![]()
La raison de ce comportemenet tient au fait que LilyPond transforme
\tag #'test { b c }
de manière interne en
\tag #'test b \tag #'test c
et donc insère deux fois le texte donné. Le balisage d’une liste à
laquelle doit s’insérer ou s’ajouter quelque chose s’obtient en
utilisant la commande \tag-list.
\markup { \push-to-tag #'test "once" { a \tag-list #'test { b c } d } }![]()
Voir aussi
Manuel d’initiation : Organisation du code source avec des variables.
Manuel de notation : Insertion de fichiers LilyPond, Regroupement automatique de parties.
Problèmes connus et avertissements
L’application d’un \relative à une expression musicale obtenue
par filtrage à l’aide de \keepWithTag ou \removeWithTag
peut générer des changements d’octave, puisque seules les hauteurs
récupérées dans ce filtre seront prises en considération. Une
instruction \relative qui précède les commandes
\keepWithTag ou \removeWithTag permet d’éviter ce risque,
dans la mesure où elle viendra « recaler » ces hauteurs récupérées.
Même lors de l’utilisation de regroupements de balises, les commands
telles que \keepWithTag ne sont pas cumulatives. du code comme
\keepWithTag violonI,original \laMusique
ne produira pas le même résultat que
\keepWithTag violonI \keepWithTag original \laMusique
![[image of music]](../d8/lily-53aafc83.png)
![[image of music]](../a0/lily-03361fa0.png)
![[image of music]](../91/lily-101c5ade.png)
![[image of music]](../6f/lily-31eb0d70.png)
![[image of music]](../ee/lily-61c7486d.png)
![[image of music]](../1c/lily-8a74710c.png)
![[image of music]](../1d/lily-66f662f9.png)
![[image of music]](../83/lily-4265fc79.png)
![[image of music]](../72/lily-fe1c007e.png)
![[image of music]](../f4/lily-38a33bbb.png)
![[image of music]](../13/lily-b50a1e00.png)
![[image of music]](../47/lily-f5e90dc0.png)
![[image of music]](../c0/lily-a0abb052.png)
![[image of music]](../e7/lily-a4e65242.png)
![[image of music]](../a7/lily-b610bb8e.png)
![[image of music]](../10/lily-69909841.png)