Utilisation de balises
La commande \tag #'partieA
affecte à une expression
musicale le nom partieA. Les expressions ainsi balisées pourront
être filtrées par la suite, à l’aide de \keepWithTag #'nom
ou \removeWithTag #'nom
. Ces filtres fonctionnent de la
manière suivante :
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 #'
peut s’omettre et, pour raccourcir, une liste de
symbole peut utiliser le point 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, auquel cas il
vaut 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 #'a \tag #'both { a4 a a a } \tag #'(b both) { b4 b b b } } << \keepWithTag #'a \music \keepWithTag #'b \music \keepWithTag #'both \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 #'A { a4 a a a } \tag #'B { b4 b b b } \tag #'C { c4 c c c } \tag #'D { d4 d d d } } \new Voice { \removeWithTag #'B \removeWithTag #'C \music \removeWithTag #'(B C) \music }
L’application de plus d’un filtre \keepWithTag
à la même
expression musicale aboutit à l’exclusion de tous les balisages. En
effet, 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 pertinente : seront exclus tous les fragments non
concernés par l’une quelconque des balises mentionnées.
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 }
imprimera les \tag
s violinI et violinII, mais ni
viola ni cello.
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 :
\tagGroup #'(violinI violinII viola cello)
Les différents filtres appartiennent désormais tous à un seul regroupement. Notez bien qu’une balise ne saurait être membre de plusieurs regroupements.
\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é.
music = \relative { \tagGroup #'(violinI violinII viola cello) \tag #'violinI { c''4^"violinI" c c c } \tag #'violinII { a2 a } \tag #'viola { e8 e e2. } \tag #'cello { d'2 d4 d } R1^"non balisé" } \new Voice { \keepWithTag #'violinI \music }
Dans le cadre de la commande \keepWithTag
, seules les balises du
regroupement mentionnées dans la commande seront visibles.
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.
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 }
Ces deux instructions sont affectées d’une balise, le matériau à raccorder à chaque instance de la balise, et l’expression balisée.
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.