X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Ffr%2Fuser%2Ffundamental.itely;h=84d6d4a8bea5aae0944e51ff80d1f049fb8115f5;hb=5c14a087ca6cbd665fd631452b7b1283ba0387c3;hp=ef72093522dfa80eed0345e6240889c2db6f6e82;hpb=19e6facfeb5c2809ea8099bfaa81339cc44b04b3;p=lilypond.git diff --git a/Documentation/fr/user/fundamental.itely b/Documentation/fr/user/fundamental.itely index ef72093522..84d6d4a8be 100644 --- a/Documentation/fr/user/fundamental.itely +++ b/Documentation/fr/user/fundamental.itely @@ -1,30 +1,34 @@ @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- @c This file is part of lilypond-learning.tely @ignore - Translation of GIT committish: 007d0b5b94c36f9d9e228309d5b0e6a67ae27ebc + Translation of GIT committish: a4836ce5ec9488d795344735f2febc880fbb6a2f When revising a translation, copy the HEAD committish of the version that you are working on. See TRANSLATION for details. @end ignore -@c \version "2.11.38" +@c \version "2.11.61" -@c Translators: Valentin Villenave -@c Translation checkers: Jean-Charles Malahieude, John Mandereau +@c Translators: Valentin Villenave, Jean-Charles Malahieude +@c Translation checkers: John Mandereau @node Fundamental concepts @chapter Fundamental concepts +Le tutoriel nous a montré comment obtenir une édition de toute beauté à +partir d'un simple fichier texte. Nous nous intéresserons dans cette +partie aux concepts et techniques qui permettent d'obtenir des +partitions complexes de même qualité. @menu -* How LilyPond files work:: -* Voices contain music:: -* Contexts and engravers:: -* Extending the templates:: +* How LilyPond input files work:: +* Voices contain music:: +* Contexts and engravers:: +* Extending the templates:: @end menu -@node How LilyPond files work -@section How LilyPond files work +@node How LilyPond input files work +@section How LilyPond input files work La mise en forme des fichiers d'entrée de LilyPond est vraiment peu astreignante, afin d'offrir assez de souplesse aux utilisateurs @@ -35,93 +39,179 @@ sommairement l'organisation du code LilyPond, en privilégiant la simplicité au détriment de certains détails. Vous trouverez une description plus complète dans @ruser{File structure}. -@menu -* Introduction to the LilyPond file structure:: -* Score is a (single) compound musical expression:: -* Nesting music expressions:: -* On the un-nestedness of brackets and ties:: +@menu +* Introduction to the LilyPond file structure:: +* Score is a (single) compound musical expression:: +* Nesting music expressions:: +* On the un-nestedness of brackets and ties:: @end menu @node Introduction to the LilyPond file structure @subsection Introduction to the LilyPond file structure -@c FIXME this subsection translation is very outdated -@c but wait until it is in a stable state in English +@cindex format d'entrée +@cindex structure de ficher -La plupart des exemples de ce manuel sont de courts fragments, par exemple +Un fichier d'entrée LilyPond ressemble à : @example -c4 a b c +\version @w{"@version{}"} +\score @{ + @var{...expression musicale composite...} % c'est là qu'est la musique ! + \header @{ @} + \layout @{ @} + \midi @{ @} +@} @end example -Comme vous le savez maintenant (du moins nous l'espèrons), ceci ne -peut pas être traité en tant que tel. Il s'agit de formes abrégées des -exemples complets ; pour pouvoir être traitées, ces formeulations -doivent au moins être encadrées par des accolades : +@noindent +Il existe de nombreuses variantes à ce schéma simpliste, mais cet +exemple est un préambule à notre propos. + +@funindex \book +@funindex \score +@cindex book, livre, ouvrage +@cindex livre +@cindex score, partition +@cindex partition + +Jusqu'à présent, les exemples que nous avons pu voir ne faisaient pas +appel à la commande @code{\score@{@}}. En fait, LilyPond ajoute +automatiquement les commandes nécessaires au traitement d'un code +simpliste. LilyPond considère @example -@{ - c4 a b c +\relative c'' @{ + c4 a d c @} @end example -La plupart des exemples font aussi intervenir la commande -@code{\relative}, suivie de @code{c'} ou @code{c''}. Elle n'est pas à -proprement parler nécessaire pour le traitement des exemples, mais -dans la plupart des cas le résultat sera vraiment déplorable si vous -l'oubliez. - -@lilypond[quote,fragment,ragged-right,verbatim] -\relative c'' { - c4 a b c -} -@end lilypond - -C'est ici que nous passons aux choses sérieuses : le code LilyPond, -sous cette forme, est en réalité un @emph{autre} raccourci. Même s'il -est traité sans problème, et aboutit au bon résultat, c'est une forme -abrégée de : +@noindent +comme un racourci de @example -\score @{ - \relative c'' @{ - c4 a b c +\book @{ + \score @{ + \new Staff @{ + \new Voice @{ + \relative c'' @{ + c4 a b c + @} + @} + @} + \layout @{ @} @} @} @end example -Un bloc @code{\score} doit commencer par une et une seule expression -musicale. Rappelez-vous que cette expression peut être ce que vous -voulez, d'une note toute seule à un gigantesque +En d'autres termes, si le code n'est constitué que d'une expression +musicale simple, LilyPond interprètera le fichier tout comme si cette +expression était incluse dans les commandes de notre premier exemple. + +@cindex implicit contexts + +@strong{Attention :} de nombreux exemples, dans la documentation de +LilyPond, ne font pas apparaître les commandes @code{\new Staff} ou +@code{\new Voice}, même si elles seront créées implicitement. Ce qui +n'est pas primordial pour des exemples simples le devient dès que la +situation devient un peu plus complexe. Le fait de ne pas déclarer +explicitement un contexte peut alors amener à des résultats quelque peu +surprenants, comme la création d'une portée supplémentaire et +indésirable. La manière de créer explicitement des contextes est +vue plus en détails au chapitre @ref{Contexts and engravers}. + +@warning{Dès lors que votre musique dépasse quelques lignes, nous vous +engageons fortement à créer explicitement les voix et portées.} + +Mais revenons à notre premier exemple, et penchons nous tout d'abord sur +la commande @code{\score}. + +Un bloc @code{\score} doit contenir une et une seule expression +musicale, exprimée immédiatement à la suite de la commande +@code{\score}. Rappelez-vous que cette expression peut être n'importe +quoi, d'une note isolée à un gigantesque @example @{ \new GrandStaff << - collez ici la partition complète de votre opéra de Wagner préféré + @var{...collez ici la partition complète d'un opéra de Wagner...} >> @} @end example @noindent -Dès lors que tout cela est entre accolades : @code{@{ ... @}}, c'est -une et une seule expression musicale. +Dès lors que tout cela est entre accolades : @code{@{ ... @}}, LilyPond +le considère comme une et une seule expression musicale. -Le bloc @code{\score} peut contenir d'autres éléments, tels que +Comme nous l'avons vu précédemment, un bloc @code{\score} peut contenir +d'autres informations : @example \score @{ @{ c'4 a b c' @} + \header @{ @} \layout @{ @} \midi @{ @} - \header @{ @} @} @end example -@noindent -Certains préfèrent mettre ces commandes en dehors du bloc -@code{\score} --- par exemple, on met souvent le @code{\header} -au-dessus. C'est juste là une autre forme abrégée que LilyPond -accepte. +@funindex \header +@funindex \layout +@funindex \midi +@cindex header +@cindex en-tête +@cindex layout +@cindex mise en forme +@cindex midi + +Gardez à l'esprit que ces trois commandes -- @code{\header}, +@code{\layout} et @code{\midi} -- sont spécifiques : à l'inverse de +toutes les commandes débutant par une oblique inversée (@emph{backshash} +pour @code{\}), @emph{elles ne constituent pas} des expressions +musicales et ne seront donc pas interprétées comme telles. Elles +peuvent de ce fait être mentionnées à l'intérieur du bloc @code{\score}, +tout comme à l'extérieur. En réalité, ces commandes sont la plupart du +temps indépendantes du bloc @code{\score} -- la commande @code{\header} +intervient bien souvent avant le bloc @code{\score} tout simplement +parce que les en-têtes apparaissent au début de la partition. C'est +donc l'un des raccourcis que LilyPond prendra en considération. + +Les deux autres commandes -- @code{\layout @{ @}} et @code{\midi @{@}} +-- que nous n'avons pas détaillées pour l'instant, auront respectivement +pour effet lorsqu'elles interviennent de produire une sortie +imprimable et un fichier MIDI. Nous nous y intéressons plus +particulièrement dans le manuel de notation, aux chapitres @ruser{Score +layout} et @ruser{Creating MIDI files}. + +@cindex scores, multiples + +Vous pouvez tout à fait mentionner plusieurs blocs @code{\score}. Ils +seront traités comme autant de partitions indépendantes qui seront +regroupées dans un seul fichier résultant. La commande @code{\book} +(@emph{recueil} ou @emph{ouvrage}) pas obligatoire -- elle sera +créée implicitement. Néanmoins, le recours à la commande @code{\book} +vous permettra d'obtenir des fichiers résultants distincts à partir +d'un même fichier source @code{.ly} -- par exemple un fichier par pupitre. + +En résumé : + +Dès que LilyPond rencontre un bloc @code{\book}, il crée un +fichier distinct (.pdf par exemple). Dans le cas où il n'est pas +mentionné explicitement, LilyPond regroupera l'intégralité du code dans +un bloc @code{\book}. + +Tout bloc @code{\score} inclus dans un bloc @code{\book} constitue un +fragment de musique. + +Tout bloc @code{\layout} affecte le bloc @code{\score} ou @code{\book} +au sein duquel il intervient : si c'est à l'intérieur d'un bloc +@code{\score}, seul celui-ci en sera affecté. Dans le cas où le bloc +@code{\layout} se trouve à l'extérieur du bloc @code{\score}, que le +bloc @code{\book} soit explicite ou non, il affectera chacun des +@code{\score} compris dans ce @code{\book}. + +Pour plus de détail à ce sujet, consultez +@ruser{Multiple scores in a book}. @cindex variables @cindex identificateurs @@ -145,10 +235,12 @@ variable @code{melodie}, c'est-à-dire tout ce qui suit le signe @code{=}, et l'insérer partout où il rencontrera @code{\melodie}. Vous êtes libre de choisir comment dénommer vos variables@footnote{Les noms de variables sont sensibles à la casse, et ne peuvent contenir ni -chiffre, ni tiret, ni caractère accentué.} ; ce peut être +chiffre, ni ponctuation, ni caractère accentué, ni espace.} ; ce peut être @code{melodie}, @code{global}, @code{maindroitepiano}, ou -@code{laTeteAToto}. Pour plus de détails, voir @ref{Saving -typing with variables and functions}. +@code{laTeteAToto}, tant qu'il ne s'agit pas de @qq{mot réservé}. Pour +plus de détails, voir @ref{Saving typing with variables and functions}. + +@seealso Pour une description complète du format des fichiers d'entrée, voir @ruser{File structure}. @@ -157,10 +249,15 @@ Pour une description complète du format des fichiers d'entrée, voir @node Score is a (single) compound musical expression @subsection Score is a (single) compound musical expression -Dans la section précédente, nous avons vu l'organisation générale des -fichiers d'entrée de LilyPond. Mais c'est comme si nous avions éludé la -question essentielle : comment diable peut-on savoir quoi mettre après -@code{\score} ? +@funindex \score +@cindex partition +@cindex Expression musicale composite + +Dans la section précédente, +@ref{Introduction to the LilyPond file structure}, nous +avons vu l'organisation générale des fichiers d'entrée de LilyPond. +Mais c'est comme si nous avions éludé la question essentielle : comment +diable peut-on savoir quoi mettre après @code{\score} ? En fait, nous ne l'avons pas éludée du tout : le grand mystère est tout simplement qu'il n'y a @emph{pas} de mystère. Allez, @@ -183,7 +280,7 @@ et remonter la pente. \score @{ @{ % cette accolade marque le début de l'expression musicale \new GrandStaff << - insérez ici votre opéra de Wagner préféré + @var{...insérez ici l'intégralité d'un opéra de Wagner...} >> @} % cette accolade marque la fin de l'expression musicale \layout @{ @} @@ -210,28 +307,31 @@ laissons cela de côté. Par contre, un chanteur et un piano @} @end example -Vous vous souvenez que nous avons recours à @code{<<} et @code{>>} -pour mettre en place des musiques simultanées. Et, pour le -coup, on aimerait @emph{vraiment} que la partie vocale et l'accompagnement -soient imprimés ensemble... - -@example -\score @{ - @{ - << - \new Staff = "chanteur" << - \new Voice = "chant" @{ @} - >> - \new Lyrics \lyricsto chant \new Lyrics @{ @} - \new PianoStaff = "piano" << - \new Staff = "mainDroite" @{ @} - \new Staff = "mainGauche" @{ @} - >> +Vous vous souvenez que nous avons recours à @code{<<} et @code{>>} +en lieu et place de @code{@{ ... @}} pour gérer des musiques +simultanées. Et, pour le coup, on aimerait @emph{vraiment} que la +partie vocale et l'accompagnement soient imprimés ensemble... Bien que +faire appel à @code{<< ... >>} ne soit pas réellement nécessaire pour la +portée du chanteur, dans la mesure où elle ne contient qu'une seule +expression musicale, nous vous recommandons de prendre l'habitude de +l'encadrer ainsi plutôt que par de simples accolades --- une portée peut +en effet contenir plusieurs voix. + +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff = "singer" << + \new Voice = "vocal" { c'1 } + \addlyrics { And } >> - @} - \layout @{ @} -@} -@end example + \new PianoStaff = "piano" << + \new Staff = "upper" { c'1 } + \new Staff = "lower" { c'1 } + >> + >> + \layout { } +} +@end lilypond On y voit nettement plus clair maintenant. Nous voici donc avec la partie du chanteur, qui contient un ensemble @code{Voice}, ce qui dans @@ -249,40 +349,44 @@ accolades qui suivent @code{\new Voice = chant}, on pourrait commencer @example \relative c'' @{ - a4 b c d + r4 d8\noBeam g, c4 r @} @end example Mais si l'on procédait ainsi, la section @code{\score} deviendrait vite assez touffue, et très rapidement on ne s'y retrouverait plus. -C'est pourquoi on utilisera plutôt des variables, ou identificateurs : +C'est pourquoi on utilisera plutôt des variables, ou identificateurs. +avec quelques notes de plus, nous pourrins avoir : -@example -melodie = @{ @} -texte = @{ @} -mainDroite = @{ @} -mainGauche = @{ @} -\score @{ - @{ - << - \new Staff = "chanteur" << - \new Voice = "chant" @{ \melodie @} - >> - \new Lyrics \lyricsto chant \new Lyrics @{ \texte @} - \new PianoStaff = "piano" << - \new Staff = "mainDroite" @{ \mainDroite @} - \new Staff = "mainGauche" @{ \mainGauche @} - >> +@lilypond[verbatim,quote,ragged-right] +melody = \relative c'' { r4 d8\noBeam g, c4 r } +text = \lyricmode { And God said, } +upper = \relative c'' { 2~ } +lower = \relative c { b2 e2 } + +\score { + << + \new Staff = "singer" << + \new Voice = "vocal" { \melody } + \addlyrics { \text } >> - @} - \layout @{ @} -@} -@end example + \new PianoStaff = "piano" << + \new Staff = "upper" { \upper } + \new Staff = "lower" { + \clef "bass" + \lower + } + >> + >> + \layout { } +} +@end lilypond -@noindent -Souvenez-vous que vous pouvez donner aux variables le nom que vous -voulez, à condition de respecter les caractères autorisés. Ces -limitations sont décrites dans @ruser{File structure}. +Respectez bien la différence entre les notes -- introduites par +@code{\relative} --, et les paroles -- introduites par +@code{\lyricmode}. Cette distinction est primordiale afin que LilyPond +puisse interpréter ce qui les suit comme étant respectivemen de la +musique ou du texte. Quand on écrit, ou que l'on lit, une section @code{\score}, mieux vaut y aller lentement et soigneusement. Commencez par le niveau le plus @@ -291,202 +395,1148 @@ une indentation stricte et propre est vraiment d'une aide précieuse : assurez-vous que chaque élément d'un même niveau a le même décalage horizontal dans votre éditeur de texte ! +@seealso + +Manuel de notation : @ruser{Structure of a score}. @node Nesting music expressions @subsection Nesting music expressions -UNTRANSLATED NODE: IGNORE ME +@cindex portées, temporaires +@cindex ossias + +Déclarer toutes les portées dès le départ n'est pas une obligation ; +elles peuvent intervenir temporairement n'importe où dans la partition. +Ceci est tout à fait indiqué pour créer des sections @rglos{ossia}. +L'exemple suivant illustre la manière de créer temporairement une +nouvelle portée, l'espace de trois notes : + +@lilypond[verbatim,quote,ragged-right] +\new Staff { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f c c } + \new Staff { + f8 f c + } + >> + r4 | + } +} +@end lilypond + +@noindent +Vous noterez la taille de la clef, identique à celle que l'on trouve +lors d'un changement en cours de ligne --- légèrement plus petite que +celle imprimée en tête de ligne. + +@cindex portée, positionnement + +Une section ossia se placera au dessus de la portée en procédant ainsi : + +@lilypond[verbatim,quote,ragged-right] +\new Staff ="main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f c c } + \new Staff \with { + alignAboveContext = "main" } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +Cet exemple recourt à @code{\with}, que nous verrons en détail plus +avant. C'est un moyen de modifier le comportement par défaut d'une +portée individuelle. Nous indiquons ici que la nouvelle portée doit se +placer au dessus de la portée @qq{main} plutôt qu'en dessous, ce +qui est le comportement par défaut. + +Les ossia apparaissent souvent sans clef ni métrique, et dans une police +plus petite. Ceci requiert des commandes dont nous n'avons pas encore +parlé. Voir @ref{Size of objects} et @ruser{Ossia staves}. + @node On the un-nestedness of brackets and ties @subsection On the un-nestedness of brackets and ties -UNTRANSLATED NODE: IGNORE ME +@cindex crochets, imbrication + +Nous avons déjà rencontré plusieurs types de crochets au fil de nos +fichiers LilyPond. Ils obéissent à des règles différentes qui peuvent +paraître déroutantes. Avant d'examiner ces règles, voici une liste des +différents types de crochet : + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .3 .7 +@headitem Type de crochet + @tab Fonction +@item @code{@{ .. @}} + @tab Délimite un segment de musique séquentielle +@item @code{< .. >} + @tab Délimite les notes d'un accord +@item @code{<< .. >>} + @tab Délimite des sections simultanées +@item @code{( .. )} + @tab Marquent le début et la fin d'une liaison +@item @code{\( .. \)} + @tab Marquent le début et la fin d'une liaison de phrasé +@item @code{[ .. ]} + @tab Marquent le début et la fin d'une ligature manuelle +@end multitable + +D'autres constructions permettent d'obtenir des lignes regroupant ou en +travers des notes : les liaisons de prolongation (indiquées par un +tilde, @code{~}), les marques de nolet avec +@code{\times@tie{}x/y@tie{}@{..@}} ou +encore les notes d'ornement avec @code{\grace@{..@}}. + +En dehors de LilyPond, l'imbrication correcte de différents types de +crochets exige un strict respect des conventions, telles que +@code{<< [ @{ ( .. ) @} ] >>}, où les marques de fermeture interviennent +obligatoirement dans l'ordre exactement inverse à celles d'ouverture. +Ceci @strong{doit} être rigoureusement respecté pour les trois +types de crochets utilisés pour @emph{délimiter} comme l'indique le +tableau ci-dessus. +Une telle rigueur dans l'imbrication n'est @strong{pas} requise pour les +types de crochets dont la fonction est de @emph{marquer}, selon le +tableau ci-dessus, lorsqu'il sont utilisés en combinaison avec des +liaisons de prolongation ou des nolets. En effet, il ne s'agit pas +de crochets ayant pour fonction de borner quelque chose ; ils agissent +plutôt comme marquant le début de quelque chose et sa fin. + +Ainsi, et bien que ce ne soit pas très musical, une liaison de phrasé +peut débuter avant l'insertion d'une ligature manuelle et s'arrêter +avant la fin de la ligature : + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] + { g8\( a b[ c b\) a] } +@end lilypond + +De manière générale, différents types de crochets, notamment s'ils +indiquent des nolets, liaisons de prolongation ou notes d'ornements, +peuvent se mélanger entre eux. L'exemple suivant montre une ligature +qui se prolonge sur un triolet (ligne 1), puis une liaison qui se +prolonge sur un triolet (ligne 2) et enfin une ligature et une liaison +qui s'étendent sur un triolet, lui-même lié à un quintolet agrémenté +d'une liaison de phrasé se poursuivant (lignes 3 et 4). + +@lilypond[quote,verbatim,fragment,ragged-right] +{ + r16[ g16 \times 2/3 {r16 e'8] } + g16( a \times 2/3 {b d) e' } + g8[( a \times 2/3 {b d') e'~]} + \times 4/5 {e'32\( a b d' e'} a'4.\) +} +@end lilypond + @node Voices contain music @section Voices contain music -UNTRANSLATED NODE: IGNORE ME +Les chanteurs utilisent leur voix pour chanter ; il en va de même pour +LilyPond. En fait, la musique de chacun des instruments d'une partition +est contenue dans des voix (@emph{Voices} en anglais) et qui se trouve +être le concept fondamental de LilyPond. @menu -* I'm hearing Voices:: -* Explicitly instantiating voices:: -* Voices and vocals:: +* I'm hearing Voices:: +* Explicitly instantiating voices:: +* Voices and vocals:: @end menu @node I'm hearing Voices @subsection I'm hearing Voices -UNTRANSLATED NODE: IGNORE ME +@cindex polyphonie +@cindex calques (layers) +@cindex voix multiples +@cindex Voice, contexte +@cindex contexte de voix +@cindex musique simultanée +@cindex musique concurrente + +Dans une partition gérée par LilyPond, le niveau le plus bas, ou bien +élémentaire ou fondamental, est le @q{contexte de voix} -- @emph{Voice +context} en anglais --. Pour d'autres logiciels, on fait tantôt +référence à la notion de @q{couche} ou de @q{calque}. + +En réalité, le contexte de voix est le seul à pouvoir contenir de la +musique. S'il n'est pas déclaré explicitement, il sera créé +automatiquement comme nous l'avons vu au début de ce chapitre. Certains +instruments, le hautbois par exemple, ne peuvent jouer qu'une seule note +à la fois. On dit en pareil cas qu'il s'agit de musique monophonique, +et nous n'aurons alors besoin que d'une seule voix. Les intruments qui, +comme le piano, peuvent émettre plusieurs sons en même temps, nécessitent +de recourir à plusieurs voix pour gérer efficacement l'alignement des +notes et rythmes différents. + +Si une voix unique peut tout à fat contenir plusieurs notes dans un +accord, à partir de quand aurons-nous vraiment besoin de plusieurs +voix ? Considérons déjà ces quatre accords : + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +\key g \major +4 +@end lilypond + +Nous exprimons ici chacun des accords par l'utilisation de +symboles inférieur et supérieur simples, @code{< ... >}, puisque nous +n'avons besoin que d'une seule voix. Supposons maintenant que le fa +dièse soit une croche, suivie d'un sol croche -- une note de passage +vers le la ? Nous avons alors deux notes qui débutent au même moment, +mais dont la durée est différente : un ré noire et un fa dièse croche. +Comment coder cela ? Dans la mesure où toutes les notes d'un accord +doivent avoir la même durée, nous ne pouvons pas écrire un accord. Nous +ne pouvons pas non plus écrire deux notes séparées, puisqu'elles +débutent en même temps. Nous avons alors besoin de deux voix. + +Voyons comment cela se pratique selon la grammaire de LilyPond. + +@funindex << \\ >> +@funindex \\ + +Le plus sûr moyen de saisir un fragment où plusieurs voix cohabitent +sur la même portée, consiste à saisir chacune des voix séquentiellement +(avec @code{@{...@}}), puis à les combiner en simultané à l'aide de +symboles supérieur et inférieur doubles, @code{<<...>>}. Les fragments +devront être séparés par une double oblique inversée, @code{\\}, pour +les affecter à des voix séparées. Dans le cas contraire, les notes +seraient toutes affectées à une même voix, ce qui pourait générer des +erreurs. Cette manière de procéder est tout à fait indiquée dans le cas +d'une pièce ne comportant que quelques courts passages de polyphonie. + +Voici comment éclater les accords en deux voix, avec la note de passage +et la liaison : + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] +\key g \major +% Voice "1" Voice "2" +<< { g4 fis8( g) a4 g } \\ { d4 d d d } >> | +@end lilypond + +Notez que les hampes de la seconde voix sont dirigées vers le bas. + +Autre exemple : + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] +\key d \minor +% Voice "1" Voice "2" +<< { r4 g g4. a8 } \\ { d,2 d4 g } >> | +<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> | +<< { a2. r4 } \\ { fis2. s4 } >> | +@end lilypond + +Le recours à une construction @code{<< \\ >>} particulière à chaque +mesure n'est pas nécessaire. Bien qu'on y gagne en lisibilité si chaque +mesure ne contient que quelques notes, il est plus judicieux de +carrément séparer chaque voix : + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] +\key d \minor +<< { + % Voice "1" + r4 g g4. a8 | + bes4 bes c bes | + a2. r4 | +} \\ { + % Voice "2" + d,2 d4 g | + g4 g g8( a) g4 | + fis2. s4 | +} >> +@end lilypond + + +Cet exemple ne comporte que deux voix, mais il peut être étendu pour +traiter trois voix ou plus en ajoutant autant de séparateurs @code{\\} +que de besoin. + +Les contextes @code{Voice} portent les noms @code{"1"}, @code{"2"}, etc. +Pour chacun de ces contextes, la direction et l'orientation des +liaisons, hampes, nuances, etc. est définie automatiquement. + +@lilypond[quote,verbatim,fragment] +\new Staff \relative c' { + % Main voice + c16 d e f + % Voice "1" Voice "2" Voice "3" + << { g4 f e } \\ { r8 e4 d c8 ~ } >> | + << { d2 e2 } \\ { c8 b16 a b8 g ~ g2 } \\ { s4 b4 c2 } >> | +} +@end lilypond + +Ces voix sont séparées de la voix principale qui contient les notes en +dehors de la construction @code{<< .. >>} -- que nous appellerons +@emph{construction simultanée}. Les liaisons, de prolongation ou non, +ne peuvent relier des notes que si elles appartiennent à la même voix ; +elles ne peuvent ni pénétrer une contruction simultanée, ni en sortir. +Inversement, les voix parallèles issues de constructions +simultanées apparaissant sur une même portée appartiennent à la même +voix. Les autres propriétés liées au contexte de voix s'appliquent +tout au long des constructions simultanées. Reprenons notre exemple, en +affectant une couleur et une allure différentes aux notes de chacune des +voix. Vous noterez qu'un changement apporté à une voix ne se propage +pas aux autres, et qu'il se reporte jusqu'au bout, et que la voix aux +triangles bleus comporte une liaison de prolongation entre deux +constructions. + +@lilypond[quote,verbatim] +\new Staff \relative c' { + % Main voice + c16 d e f + << % Bar 1 + { + \voiceOneStyle + g4 f e + } + \\ + { + \voiceTwoStyle + r8 e4 d c8 ~ + } + >> + << % Bar 2 + % Voice 1 continues + { d2 e2 } + \\ + % Voice 2 continues + { c8 b16 a b8 g ~ g2 } + \\ + { + \voiceThreeStyle + s4 b4 c2 + } + >> +} +@end lilypond + +@funindex \voiceOneStyle +@funindex \voiceTwoStyle +@funindex \voiceThreeStyle +@funindex \voiceFourStyle +@funindex \voiceNeutralStyle + +Les commandes @code{\voiceXXXStyle} sont principalement dédiées à une +utilisation pédagogique, comme l'est ce document. Elles modifient la +couleur des hampes et ligatures et le style de tête des notes, pour +permettre une meilleure distinction entre les différentes voix. La +première voix comporte des têtes en losange rouge, la deuxième en +triangle bleu, la troisième en cercles barré vert, la quatrième (non +utilisée ici) en croix magenta ; @code{\voiceNeutralStyle} (non utilisé +ici) revient au style par défaut. Nous verrons plus tard comment créer +de telles commandes. +Voir @ref{Visibility and color of objects} et +@ref{Using variables for tweaks}. + +La polyphonie ne modifie en rien la relation entre les notes au sein +d'un bloc @code{\relative @{ @}}. Chaque note est calculée par rapport +à celle qui la précède, ou bien par rapport à la première note de +l'accord qui précède. Ainsi, dans + +@example +\relative c' @{ noteA << < noteB noteC > \\ noteD >> noteE @} +@end example + +@noindent +@code{noteB} est relative à @code{noteA} @* +@code{noteC} est relative à @code{noteB}, pas à @code{noteA} @* +@code{noteD} est relative à @code{noteB}, pas à @code{noteA} ni +@code{noteC} @* +@code{noteE} est relative à @code{noteD}, pas à @code{noteA} + +Une méthode alternative, et qui peut simplifier les choses si les notes +des différentes voix sont espacées, consiste à placer une commande +@code{\relative} au début de chacune des voix : + +@example +\relative c' @{ noteA ... @} +<< + \relative c'' @{ < noteB noteC > ... @} +\\ + \relative g' @{ noteD ... @} +>> +\relative c' @{ noteE ... @} +@end example + +Pour finir, analysons le principe d'utilisation des voix dans une pièce +complexe. Nous allons nous concentrer sur les deux premières mesures du +second des Deux nocturnes, opus 32 de Chopin. Cet exemple nous servira +à plusieurs reprises, y compris dans le chapitre suivant, pour illustrer +certaines techniques de notation. Aussi, ne prétez pas trop d'attention +à ce qui pour l'instant pourrait vous paraître vraiment mystérieux dans +le code, et intéressons-nous uniquement à ce qui concerne la musique et +les voix -- ce qui est plus compliqué sera décortiqué plus tard. + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % No voice three + \\ % Voice four + { + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + +La direction des hampes sert souvent à indiquer dans la continuité deux +lignes mélodiques simultanées. Ici, les hampes des notes les plus +hautes vont vers le haut, et celles des notes plus basses vers le +bas. C'est une première incation que nous avons eu recours à plus d'une +voix. + +Mais le réel besoin de multiples voix se fait sentir dès lors que +plusieurs notes qui débutent en même temps ont des durées différentes. +C'est évident au troisième temps de la première mesure : le la bémol est +une noire pointée, le fa une noire, et le ré bémol une blanche. On ne +peut les grouper dans un accord, puisque toutes les notes composant un +accord doivent être de même durée. On ne peut non plus les ecrire +séquentiellement, puisqu'elles débutent toutes au même instant. Ce +fragment de mesure nécessite trois voix, et une bonne pratique voudrait +que l'intégralité de la mesure soit sur trois voix, comme ci-dessous où +nous avons une allure et une couleur différentes aux motes de chacune +d'entre elles. Une fois de plus, nous reviendrons plus tard sur le code +que vous ne comprendriez pas. + +@c The following should appear as music without code +@c The three voice styles should be defined in -init +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { % Voice one + \voiceOneStyle + c2 aes4. bes8 + } + \\ % Voice two + { \voiceTwoStyle + aes2 f4 fes + } + \\ % No Voice three (we want stems down) + \\ % Voice four + { \voiceThreeStyle + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + +Essayons à présent de coder cette musique en partant de zéro. Comme +nous le verrons, certaines difficultés vont se présenter. Partons de ce +que nous avons appris : utilisons la construction @code{<< \\ >>} pour +saisir la première mesure dans trois voix : + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { 2 des2 } + >> + 1 +} +@end lilypond + +@cindex stem down +@cindex hampes en bas +@cindex stem up +@cindex hampes en haut + +La direction des hampes est attribuée automatiquement : les voix +impaires portent des hampes vers le haut, les voix paires des hampes +vers le bas. Les hampes des voix 1 et 2 sont orientées comme il faut +mais celles de la voix 3 devraient, dans le cas qui nous occupe, aller +vers le bas. Nous pouvons corriger cela en sautant la voix 3 et en +plaçant la musique dans la voix 4 : + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % Omit Voice three + \\ % Voice four + { 2 des2 } + >> | + 1 | +} +@end lilypond + +@noindent +Cette manipulation nous permet de régler la direction des hampes, mais +engendre un problème que l'on rencontre parfois avec de multiples voix, +à savoir que les hampes d'une voix peuvent chevaucher les têtes de note +des autres voix. En matière de mise en forme des notes, LilyPond +tolère que des notes ou accords appartenant à deux voix se retrouvent +dans le même empilement de notes (@emph{note column} en anglais) si tant +est que ces hampes vont dans des directions opposées ; néanmoins les +notes des troisième et quatrième voix seront décalées si nécessaire pour +éviter que les têtes ne se chevauchent. Cela marche plutôt bien, mais +dans notre exemple, les notes de la voix la plus basse ne sont vraiment +pas correctement placées. LilyPond met à notre disposition plusieurs +moyens d'ajuster le positionnement horizontal des notes. Nous ne sommes +pas encore tout à fait prêts pour voir comment corriger cela, aussi nous +examinerons ce problème dans un autre chapitre (voir la propriété +force-hshift dans @ref{Fixing overlapping notation}). + +@seealso + +Manuel de notation : @ruser{Multiple voices}. + @node Explicitly instantiating voices @subsection Explicitly instantiating voices -Les contextes @internalsref{Voice} peuvent être déclarés manuellement +@funindex \voiceOne +@funindex \voiceTwo +@funindex \voiceThree +@funindex \voiceFour +@funindex \oneVoice +@funindex \new Voice +@cindex Voice, création de contextes + +Les contextes @rinternals{Voice} peuvent être déclarés manuellement dans un bloc @code{<< >>} pour créer de la musique polyphonique, en utilisant @code{\voiceOne}, @dots{} jusqu'à @code{\voiceFour} pour assigner des directions de hampes et un déplacement horizontal pour -chaque partie. +chaque partie. Cette méthode apporte de la clarté pour des partitions +plus importantes puisqu'elle permet de bien séparer les voix et de leur +affecter un nom plus parlant. + +En particulier, la construction @code{<< \\ >>} que nous avons vue +précédemment : -En particulier, @example -<< \upper \\ \lower >> +\new Staff @{ + \relative c' @{ + << @{ e4 f g a @} \\ @{ c,4 d e f @} >> + @} +@} @end example @noindent équivaut à @example -<< - \new Voice = "1" @{ \voiceOne \upper @} - \new Voice = "2" @{ \voiceTwo \lower @} +\new Staff << + \new Voice = "1" @{ \voiceOne \relative c' @{ e4 f g a @} @} + \new Voice = "2" @{ \voiceTwo \relative c' @{ c4 d e f @} @} >> @end example +Toutes deux produiront + +@c The following example should not display the code +@lilypond[ragged-right,quote] +\new Staff << + \new Voice = "1" { \voiceOne \relative c' { e4 f g a } } + \new Voice = "2" { \voiceTwo \relative c' { c4 d e f } } +>> +@end lilypond + Les commandes @code{\voiceXXX} fixent la direction des hampes, des -liaisons de prolongations et de phrasé, des articulations, des +liaisons de prolongation et de phrasé, des articulations, des annotations, des points d'augmentation des notes pointées et des doigtés. @code{\voiceOne} et @code{\voiceThree} font pointer ces objets vers le haut, alors que @code{\voiceTwo} et @code{\voiceFour} les font -pointer vers le bas. La commande @code{\oneVoice} les ramène aux +pointer vers le bas. Ces commandes génèrent par ailleurs un décalage +horizontal de chacune des voix pour éviter tout risque de chevauchement +entre plusieurs notes. La commande @code{\oneVoice} les ramène aux critères normaux. -Une expression séquentielle qui apparaît en premier dans un @code{<< >>} -appartient à la voix principale. Ceci est utile lorsque des voix -supplémentaires apparaissent pendant que la voix principale est jouée. -Voici une meilleure réalisation de l'exemple de la section précédente. -Les notes colorées et en croix mettent en évidence le fait que la mélodie principale -est maintenant dans un seul contexte de voix. +Voyons, à l'aide de ces exemples simples, les effets respectifs de +@code{\oneVoice}, @code{\voiceOne} et @code{voiceTwo} sur les +annotations, liaisons de prolongation ou de phrasé, et sur les nuances. @lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' { - \override NoteHead #'style = #'cross - \override NoteHead #'color = #red - c16 d e f +\relative c'{ + % Default behavior or behavior after \oneVoice + c d8 ~ d e4 ( f g a ) b-> c +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c'{ \voiceOne - << - { g4 f e | d2 e2 } - \new Voice="1" { \voiceTwo - r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 - \oneVoice - } - \new Voice { \voiceThree - s2. | s4 b4 c2 - \oneVoice - } - >> + c d8 ~ d e4 ( f g a ) b-> c + \oneVoice + c, d8 ~ d e4 ( f g a ) b-> c +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c'{ + \voiceTwo + c d8 ~ d e4 ( f g a ) b-> c \oneVoice + c, d8 ~ d e4 ( f g a ) b-> c } @end lilypond -La définition correcte des voix permet à la mélodie d'être liée. +Voyons à présent trois différentes façons d'exprimer un passage +polyhonique, à partir d'un exemple de la section précédente. Chacune +d'elles aura ses avantages selon les circonstances. + +Une expression séquentielle qui apparaît en premier dans un @code{<< >>} +-- attention, @strong{pas} dans une construction @code{<< \\ >>} -- +appartient à la voix principale. Ceci est utile lorsque des voix +supplémentaires apparaissent pendant que la voix principale est jouée. +Voici une meilleure réalisation de notre exemple. +Les notes colorées et en croix mettent en évidence le fait que la +mélodie principale est maintenant dans un seul contexte de voix, ce qui +permet d'ajouter une liaison de phrasé à l'ensemble. + @lilypond[quote,ragged-right,verbatim] \new Staff \relative c' { + \voiceOneStyle + % The following notes are monophonic c16^( d e f - \voiceOne + % Start simultaneous section of three voices << + % Continue the main voice in parallel { g4 f e | d2 e2) } - \context Voice="1" { \voiceTwo + % Initiate second voice + \new Voice { + % Set stems, etc, down + \voiceTwo r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 - \oneVoice } - \new Voice { \voiceThree - s2. s4 b4 c2 - \oneVoice + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s2. | s4 b4 c2 } >> - \oneVoice } @end lilypond -Le fait d'éviter le séparateur @code{\\} permet aussi d'imbriquer des -constructions polyphoniques, ce qui peut être une manière plus naturelle -de saisir la musique. +@cindex imbrication d'expressions musicales +@cindex imbrication de constructions simultanées + +@cindex voix temporaires +@cindex voix, imbrication + + +Dans certaines circonstances de polyphonie complexe, vous pourrez être +amené à recourir à une voix temporaire, ce qui peut être une manière +plus naturelle de saisir la musique : @lilypond[quote,ragged-right,verbatim] \new Staff \relative c' { c16^( d e f - \voiceOne << { g4 f e | d2 e2) } - \context Voice="1" { \voiceTwo + \new Voice { + \voiceTwo r8 e4 d c8 ~ | << {c8 b16 a b8 g ~ g2} - \new Voice { \voiceThree + \new Voice { + \voiceThree s4 b4 c2 - \oneVoice } >> - \oneVoice } >> - \oneVoice } @end lilypond -Dans certaines circonstances de polyphonie complexe, vous pourrez être -amené à recourir à des voix supplémentaires afin d'éviter des collisions -de notes. Ces voix additionnelles s'ajoutent en définissant un -identificateur, comme le montre l'exemple suivant : +@cindex spacing notes -@lilypond[quote,verbatim,ragged-right] -voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice) +Cette manière de brièvement imbriquer des voix est bien utile pour de +courts fragments de musique polyphonique. Mais lorsqu'une portée est +très souvent polyphonique, on peut y gagner en clarté si l'on utilise +plusieurs voix sur l'ensemble de cette portée et que l'on positionne des +silences invisibles pour sauter les moments où il n'y a rien dans cette +voix. -\relative c''' << - { \voiceOne g4 ~ \stemDown g32[ f( es d c b a b64 )g] } \\ - { \voiceThree b4} \\ - { \voiceFive d,} \\ - { \voiceTwo g,} +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' << + % Initiate first voice + \new Voice { + \voiceOne + c16^( d e f g4 f e | d2 e2) | + } + % Initiate second voice + \new Voice { + % Set stems, etc, down + \voiceTwo + s4 r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s1 | s4 b4 c2 | + } >> @end lilypond +@subsubheading Note columns + +@cindex note column +@cindex empilement de notes +@cindex shift, commandes +@cindex décalage, commandes +@funindex \shiftOff +@funindex \shiftOn +@funindex \shiftOnn +@funindex \shiftOnnn + +Les notes rapprochées d'un accord, ou des notes de différentes voix qui +tombent ensemble, seront rangées sur deux colonnes, voire plus, pour +palier d'éventuels chevauchements des têtes. On appelle cela des +empilements de notes. Chaque voix dispose de plusieurs empilements, et +l'attribution d'un décalage à une voix en particulier s'appliquera à +l'empilement en question s'il y avait risque de collision. +Nous en avons une illustration à la deuxième mesure de l'exemple +ci-dessus : le do de la deuxième voix est décalé à droite du ré de la +première voix et, dans l'accord final, le do de la troisième voix est +lui aussi décalé à droite des autres notes. + +Les commandes @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn}, et +@code{\shiftOff} spécifient le degré nécessaire de décalage qui sera +appliqué aux notes au accords de la voix en question afin d'éviter une +collision. Par défaut, les voix extérieures -- normalement les +première et deuxième -- se verront attribuer @code{\shiftOff}, alors que +les voix intérieures -- trois et quatre -- se verront attribuer +@code{\shiftOn}. Lorsqu'un décalage s'applique, les voix un et trois +iront vers la droite, et les voix deux et quatre vers la gauche. + +@code{\shiftOnn} et @code{\shiftOnnn} définissent des degrés augmentés +de décalage auquel on peut devoir temporairement recourir dans des +situations complexes -- voir Real music example +@ref{Real music example}. + +Un empilement peut ne contenir qu'une note ou un accord dans une voix +aux hampes vers le haut, et une note ou un accord dans une voix +aux hampes vers le bas. Dans le cas où des notes, issues de deux voix +ayant toutes deux des hampes dans la même direction, se retrouvent au +même moment et qu'aucun décalage n'a été spécifié ou qu'ils sont +identiques, LilyPond vous le signalera par le message @qq{Trop +d'empilements en conflit}. + +@seealso + +Manuel de notation : @ruser{Multiple voices}. + @node Voices and vocals @subsection Voices and vocals -UNTRANSLATED NODE: IGNORE ME +La musique vocale est une gageure en soi : il nous faut combiner deux +expressions différentes -- des notes et des paroles. + +@funindex \new Lyrics +@funindex \lyricsto +@cindex Lyrics, création d'un contexte +@cindex paroles, affectation à une voix + +Nous avons déjà abordé la commande @code{\addlyrics}, qui permet de +gérer des partitions simples. Cette technique est cependant +relativement limitée. Pour de la musique un peu plus compliquée, il +vous faudra contenir les paroles dans un contexte @code{Lyrics}, créé +par la commande @code{\new Lyrics} ; vous relierez ensuite ces paroles +aux notes grace à la commande @code{\lyricsto@{@}} et au nom assigné à +la voix en question. + +@lilypond[quote,verbatim,fragment] +<< + \new Voice = "one" \relative c'' { + \autoBeamOff + \time 2/4 + c4 b8. a16 g4. f8 e4 d c2 + } + \new Lyrics \lyricsto "one" { + No more let sins and sor -- rows grow. + } +>> +@end lilypond + +Notez bien que les paroles sont liées à un contexte de voix +(@code{Voice}), @emph{non} à un contexte de portée (@code{Staff}). Il +est donc nécessaire de créer explicitement les contextes @code{Staff} +et @code{Voice}. + +@cindex paroles et ligatures +@cindex ligatures et paroles +@funindex \autoBeamOff + +Si la ligature automatique que LilyPond applique par défaut +est pleinement adaptée en matière de musique instrumentale, il +n'en va pas de même dans le cas d'une musique associée à des paroles, +et pour laquelle soit les ligatures sont carrément absentes, soit elles +servent à indiquer un mélisme -- plusieurs notes pour une même syllabe. +Dans l'exemple qui suit, nous utilisons la commande @code{\autoBeamOff} +afin de désactiver les ligatures automatiques. + +@funindex \new ChoirStaff +@funindex \lyricmode +@cindex structure d'une partition vocale + +Nous allons reprendre un extrait de Judas Maccabæus pour illustrer ce +que cette technique apporte en flexibilité. Nous commençons par +utiliser des variables afin de séparer aussi bien la musique que les +paroles, de la structure d'une portée. Nous ajoutons par la même +occasion un crochet spécifique aux portées pour chœur +(@code{ChoirStaff}). Quant aux blocs de paroles, nous les faisons +précéder de la commande @code{\lyricmode} pour nous assurer qu'elles +seront interprétées comme telles, et non comme de la musique. + +@lilypond[quote,verbatim] +global = { \time 6/8 \partial 8 \key f \major} +SopOneMusic = \relative c'' { + c8 | c([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 } +SopTwoMusic = \relative c' { + r8 | r4. r4 c8 | a'([ g)] f f([ e)] d | e([ d)] c bes' } +SopOneLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, __ } +SopTwoLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, } + +\score { + \new ChoirStaff << + \new Staff << + \new Voice = "SopOne" { + \global + \SopOneMusic + } + \new Lyrics \lyricsto "SopOne" { + \SopOneLyrics + } + >> + \new Staff << + \new Voice = "SopTwo" { + \global + \SopTwoMusic + } + \new Lyrics \lyricsto "SopTwo" { + \SopTwoLyrics + } + >> + >> +} +@end lilypond + +Voici donc la structure de base valable pour toute partition vocale. On +peut y ajouter d'autres portées si besoin est, d'autres voix à +chaque portée, plusieurs couplets aux paroles, et les variables +contenant la musique peuvent même être stockées dans des fichiers +indépendants dès lors que leur longueur devient conséquente. + +@cindex structure d'hymne + +Voici maintenant la première ligne d'une hymne pour chœur à quatre voix +mixtes, comportant quatre couplets. Les paroles sont ici identiques +pour les quatre voix. Vous remarquerez le recours aux variables afin de +séparer les notes et les paroles, de la structure de portée. Vous +noterez aussi une variable particulière, que nous avons appelée +@q{MetriqueArmure}, et qui contient plusieurs commandes que nous +utiliserons dans les deux portées. Dans de nombreux autres exemples, +elle s'appelle @q{global}. + +@lilypond[quote,verbatim] +TimeKey = { \time 4/4 \partial 4 \key c \major} +SopMusic = \relative c' { c4 | e4. e8 g4 g | a a g } +AltoMusic = \relative c' { c4 | c4. c8 e4 e | f f e } +TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } +BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } +VerseOne = \lyricmode { + E -- | ter -- nal fa -- ther, | strong to save, } +VerseTwo = \lyricmode { + O | Christ, whose voice the | wa -- ters heard, } +VerseThree = \lyricmode { + O | Ho -- ly Spi -- rit, | who didst brood } +VerseFour = \lyricmode { + O | Tri -- ni -- ty of | love and pow'r } + +\score { + \new ChoirStaff << + \new Staff << + \clef "treble" + \new Voice = "Sop" { \voiceOne \TimeKey \SopMusic } + \new Voice = "Alto" { \voiceTwo \AltoMusic } + \new Lyrics \lyricsto "Sop" { \VerseOne } + \new Lyrics \lyricsto "Sop" { \VerseTwo } + \new Lyrics \lyricsto "Sop" { \VerseThree } + \new Lyrics \lyricsto "Sop" { \VerseFour } + >> + \new Staff << + \clef "bass" + \new Voice = "Tenor" { \voiceOne \TimeKey \TenorMusic } + \new Voice = "Bass" { \voiceTwo \BassMusic } + >> + >> +} +@end lilypond + +@cindex couplet et refrain + +Nous allons terminer en voyant comment coder un couplet pour soliste +suivi d'un refrain à deux voix sur deux portées. Les explications sont +importantes, dans la mesure où les moyens mis en œuvre pour arriver à +enchaîner le solo et la polyphonie dans une seule et même partition sont +quelque peu tirés par les cheveux. + +Commençons par ouvrir un bloc @code{score} qui contiendra un +@code{ChoirStaff}, puisque nous aimerions voir un crochet au début du +système choral. Nous devrions avoir, après @code{\new ChoirStaff}, un +double inférieur pour synchroniser les portées ; mais comme nous +reportons le parallélisme après le solo, nous utilisons des accolades -- +un double inférieur ne serait cependant pas génant. À l'intérieur du +@code{ChoirStaff}, nous voulons en premier la portée avec le couplet. +Puisqu'elle englobe parallèlement des notes et des paroles, nous devons +encadrer les @code{\new Voice} et @code{\new Lyrics} de doubles +inférieur/supérieur pour les faire démarrer de concert : + +@lilypond[quote,verbatim,ragged-right] +versenotes = \relative c'' { + \clef "treble" + \key g \major + \time 3/4 g g g b b b +} +versewords = \lyricmode { + One two three four five six +} +\score { + \new Choirstaff { + \new Staff << + \new Voice = "verse" { + \versenotes \break + } + \new Lyrics \lyricsto verse { + \versewords + } + >> + } +} +@end lilypond + +Voici la ligne du couplet réalisée. + +Nous poursuivons avec refrainA, sur la même portée, alors même qu'une +deuxième portée s'amorce en parallèle pour contenir refrainB. Cette +section parallèle doit s'enchaîner directement à la suite du +@code{\break} de la voix contenant le couplet -- il s'agit bien de la +@emph{même} voix. Voici cette section parallèle. On pourrait tout à +fait ajouter encore d'autres portées ici, toujours de la même manière. + +@example +<< + \refrainnotesA + \new Lyrics \lyricsto verse @{ + \refrainwordsA + @} + \new Staff << + \new Voice = "refrainB" @{ + \refrainnotesB + @} + \new Lyrics \lyricsto "refrainB" @{ + \refrainwordsB + @} + >> +>> +@end example + +Et voici le résultat final, avec ses deux portées pour la partie +chorale, et qui montre comment la section en parallèle s'enchaîne avec +la voix du couplet : + +@lilypond[quote,verbatim, ragged-right] +versenotes = \relative c'' { + \clef "treble" + \key g \major + \time 3/4 g g g b b b +} +refrainnotesA = \relative c'' { + \time 2/4 + c c g g \bar "|." +} +refrainnotesB = \relative c { + \clef "bass" + \key g \major + c e d d +} +versewords = \lyricmode { + One two three four five six +} +refrainwordsA = \lyricmode { + la la la la +} +refrainwordsB = \lyricmode { + dum dum dum dum +} +\score { + \new ChoirStaff { + \new Staff << + \new Voice = "verse" { + \versenotes \break + << + \refrainnotesA + \new Lyrics \lyricsto "verse" { + \refrainwordsA + } + \new Staff << + \new Voice = "refrainB" { + \refrainnotesB + } + \new Lyrics \lyricsto "refrainB" { + \refrainwordsB + } + >> + >> + } + \new Lyrics \lyricsto "verse" { + \versewords + } + >> + } +} +@end lilypond + +@cindex book, exemple d'utilisation +@cindex recueil, exemple d'utilisation +@funindex \book + +Bien que ce que nous venons de voir constitue un exercice intéressant et +fort utile pour comprendre comment s'articulent des blocs séquentiels et +simultanés, nous aurions aussi pu coder notre exemple sous la forme de +deux blocs @code{\score} au sein d'un bloc @code{\book} implicite : + +@lilypond[quote,verbatim,ragged-right] +versenotes = \relative c'' { + \clef "treble" + \key g \major + \time 3/4 g g g b b b +} +refrainnotesA = \relative c'' { + \time 2/4 + c c g g \bar "|." +} +refrainnotesB = \relative c { + \clef "bass" + \key g \major + c e d d +} +versewords = \lyricmode { + One two three four five six +} +refrainwordsA = \lyricmode { + la la la la +} +refrainwordsB = \lyricmode { + dum dum dum dum +} +\score { + \new Staff << + \new Voice = "verse" { + \versenotes + } + \new Lyrics \lyricsto "verse" { + \versewords + } + >> +} + +\score { + \new ChoirStaff << + \new Staff << + \new Voice = "refrainA" { + \refrainnotesA + } + \new Lyrics \lyricsto "refrainA" { + \refrainwordsA + } + >> + \new Staff << + \new Voice = "refrainB" { + \refrainnotesB + } + \new Lyrics \lyricsto "refrainB" { + \refrainwordsB + } + >> + >> +} +@end lilypond + +@seealso + +Manuel de notation : @ruser{Vocal music}. + @node Contexts and engravers @section Contexts and engravers -Nous avons évoqué rapidement les contextes et graveurs dans les sections -précédentes ; examinons en détail ces concepts essentiels dans la +Nous avons évoqué rapidement les contextes et graveurs dans les chapitres +précédents ; examinons en détail ces concepts essentiels à la maîtrise de LilyPond. @menu -* Contexts explained:: -* Creating contexts:: -* Engravers explained:: -* Modifying context properties:: -* Adding and removing engravers:: +* Contexts explained:: +* Creating contexts:: +* Engravers explained:: +* Modifying context properties:: +* Adding and removing engravers:: @end menu @node Contexts explained @subsection Contexts explained -Imprimer de la musique impose d'ajouter un certain nombre d'éléments de notation. -Par exemple, voici un fragment de partition, précédé du code qui l'engendre : +@cindex contextes, les différents + +Imprimer de la musique impose d'ajouter un certain nombre d'éléments de +notation. Par exemple, voici un fragment de partition, précédé du code +qui l'engendre : @lilypond[quote,verbatim,relative=2,fragment] cis4 cis2. g4 @end lilypond -Si le code est assez austère, dans la parition ont été ajoutés un chiffre de mesure, -des barres de mesure, des altérations et une clé. Pour une bonne raison : LilyPond -@emph{interprète} le code. Il le compulse dans l'ordre chronologique, de même qu'on -lit une partition de gauche à droite ; et pendant ce traitement, le logiciel garde en -mémoire les limites des mesures, ou encore quelles hauteurs de notes demandent des -altérations accidentelles. Ces informations se présentent à plusieurs niveaux : ainsi, -une altération n'a d'effet que sur une seule portée, tandis qu'une barre de mesure doit -être synchronisée sur toute l'étendue verticale de la partition. +Si le code est assez austère, dans la parition ont été ajoutés un +chiffre de mesure, des barres de mesure, des altérations et une clé. +Pour une bonne raison : LilyPond @emph{interprète} le code. Il le +compulse dans l'ordre chronologique, de même qu'on lit une partition de +gauche à droite ; et pendant ce traitement, le logiciel garde en +mémoire les limites des mesures, ou encore quelles hauteurs de note +demandent des altérations accidentelles. Ces informations se présentent +à plusieurs niveaux : ainsi, une altération n'a d'effet que sur une +seule portée, tandis qu'une barre de mesure doit être synchronisée sur +toute l'étendue verticale de la partition. LilyPond regroupe ces règles et ces fragments d'information dans des -@emph{Contextes}. Certains contextes sont les voix (contexte @context{Voice}), -les portées (contexte @context{Staff}), ou la partition dans son ensemble -(contexte @context{Score}). Ils sont ordonnés hiérarchiquement : ainsi un -contexte @context{Staff} peut contenir plusieurs contextes @context{Voice}, et un -contexte @context{Score} peut contenir plusieurs contextes @context{Staff}. +@emph{Contextes}. Certains contextes sont les voix (contexte @code{Voice}), +les portées (contexte @code{Staff}), ou la partition dans son ensemble +(contexte @code{Score}). Ils sont ordonnés hiérarchiquement : ainsi un +contexte @code{Staff} peut contenir plusieurs contextes +@code{Voice}, et un contexte @code{Score} peut contenir plusieurs +contextes @code{Staff}. @quotation @image{context-example,5cm,,} @@ -494,190 +1544,659 @@ contexte @context{Score} peut contenir plusieurs contextes @context{Staff}. Chaque contexte est chargé de faire appliquer certaines règles de gravure, de créer certains objets, et de prendre en compte les propriétés qui leur -sont associées. Ainsi, le contexte @context{Voice} peut faire intervenir une -altération accidentelle, puis le contexte @context{Staff} devra déterminer si -cette dernière devra être imprimée ou non dans la suite de la mesure. Les barres -de mesure, enfin, sont alignées verticalement grâce au contexte @context{Score}. - -En revanche, dans une musique polymétrique, par exemple mélant une portée à 3/4 -et une autre à 4/4, les barres de mesures n'ont plus à être alignées : il faut alors -modifier les comportement par défaut des contextes @context{Score} et @context{Staff}. - -Dans une partition très simple, les contextes sont créés implicitement, et peuvent -être ignorés. Mais lorsqu'il s'agit de morceaux plus amples -- entendons par là tout -ce qui s'écrit sur plus d'une portée -- il faut les créer explicitement pour être sûr -d'obtenir toutes les portées nécessaires, et dans le bon ordre. Enfin pour des -morceaux impliquant une notation spéciale, modifier les contextes ou en créer de nouveaux +sont associées. Ainsi, le contexte @code{Voice} peut faire intervenir une +altération accidentelle, puis le contexte @code{Staff} devra déterminer s'il +faudra imprimer ou non cette dernière dans la suite de la mesure. + +Les barres de mesure, quant à elles, sont alignées verticalement grâce au +contexte @code{Score} par défaut. +En revanche, dans une musique polymétrique, par exemple mélant une +portée à 3/4 et une autre à 4/4, les barres de mesures n'ont plus à être +alignées : il faut alors modifier les comportement par défaut des +contextes @code{Score} et @code{Staff}. + +Dans une partition très simple, les contextes sont créés implicitement, +et peuvent être ignorés. Mais lorsqu'il s'agit de morceaux plus amples +-- entendons par là tout ce qui s'écrit sur plus d'une portée -- il faut +les créer explicitement pour être sûr d'obtenir toutes les portées +nécessaires, et dans le bon ordre. Enfin pour des morceaux impliquant +une notation spéciale, modifier les contextes ou en créer de nouveaux devient extrêment utile. -Une description exhaustive de tous les contextes disponibles peut être trouvée dans la -référence du programme : voir -@ifhtml -@internalsref{Contexts}. -@end ifhtml -@ifnothtml -Translation @expansion{} Context. -@end ifnothtml +En plus des contextes @code{Score,} @code{Staff} et @code{Voice}, sont +disponibles d'autres contextes intermédiaires entre les niveaux +partition et portée, chargés de gèrer certains regroupement, tels que +@code{PianoStaff} ou @code{ChoirStaff}. Vous disposez aussi d'autres +contextes de portée ou de voix alternatifs, ainsi que des contextes +spécifiques pour les paroles, les percussions, les tablatures +d'instruments frettés, la basse chifrée, etc. -@c [TODO: describe propagation] +Le nom de chacun des contextes est formé d'un ou plusieurs mots aux +initiales en majuscule et directements accolés les uns aux autres sans +ponctuation, comme par exemple @code{GregorianTranscriptionStaff}. +@seealso -@node Creating contexts -@subsection Creating contexts +Manuel de notation : @ruser{Contexts explained}. -Dans une partition contenant une seule voix sur une seule portée, -les contextes sont automatiquement créés. Dans une partition plus complexe, -il faut les crééer à la main. Trois commandes le permettent : -@itemize @bullet - -@item -La plus facile, et la plus rapide à saisir, est @code{\new} -- @qq{nouveau} en français. -Elle introduit une expression musicale, comme suit : +@node Creating contexts +@subsection Creating contexts @funindex \new @cindex nouveaux contextes @cindex Contextes, création de +Il en va des contextes comme de toute hiérarchie : il faut un sommet -- +le contexte @code{Score} en l'occurence. La commande @code{\score} est +chargée de le créer, mais pour des partitions simples, il le sera +automatiquement. + +Lorsqu'une partition ne comporte qu'une voix et une seule portée, vous +pouvez laisser LilyPond créer automatiquement les contextes @code{Voice} +et @code{Staff} ; mais leur présence explicite devient indispenssable dès +que la situation se complique. +Le moyen le plus simple est d'utiliser la commande @code{\new}. Elle +doit intervenir avant une expression musicale, ainsi : + @example -\new @var{Contexte} @var{expression musicale} +\new @var{type} @var{expression-musicale} @end example @noindent -le choix du @var{Contexte} pouvant être, par exemple, @code{Staff} ou -@code{Voice}. Cette commande crée un contexte, puis interprète -l'@var{expression musicale} dans ledit contexte. +où @var{type} correspond au nom du contexte (tels @code{Staff} ou +@code{Voice}). Cette commande crée un nouveau contexte, puis +interprète l'@var{expression-musicale} contenue dans ledit +contexte. -En pratique, la commande @code{\new} peut servir dans une partition -comprenant plusieurs portées. Comme chaque partie doit se trouver sur sa propre -portée, il faut la faire précéder de @code{\new Staff}. +Notez bien qu'il n'existe pas de commande @code{\new Score}, puisque le +contexte premier que constitue @code{Score} est créé par @code{\score}. -@lilypond[quote,verbatim,relative=2,ragged-right,fragment] -<< - \new Staff { c4 c } - \new Staff { d4 d } ->> +Nous avons déjà vu au cours des chapitres précédents de nombreux +exemples où des contextes @code{Staff} ou @code{Voice} étaient créés au +besoin. Dans un but didactique, voici maintenant une application +complète et largement commentée : + +@lilypond[quote,verbatim,ragged-right] +\score { % start of single compound music expression + << % start of simultaneous staves section + \time 2/4 + \new Staff { % create RH staff + \key g \minor + \clef "treble" + \new Voice { % create voice for RH notes + \relative c'' { % start of RH notes + d4 ees16 c8. | + d4 ees16 c8. | + } % end of RH notes + } % end of RH voice + } % end of RH staff + \new Staff << % create LH staff; needs two simultaneous voices + \key g \minor + \clef "bass" + \new Voice { % create LH voice one + \voiceOne + \relative g { % start of LH voice one notes + g8 ees, | + g8 ees, | + } % end of LH voice one notes + } % end of LH voice one + \new Voice { % create LH voice two + \voiceTwo + \relative g { % start of LH voice two notes + g4 ees | + g4 ees | + } % end of LH voice two notes + } % end of LH voice two + >> % end of LH staff + >> % end of simultaneous staves section +} % end of single compound music expression @end lilypond -La commande @code{\new} peut aussi permettre de nommer le contexte créé : +Notez comment toute déclaration qui ouvre un bloc par une +accolade, @code{@{}, ou un double signe inférieur, @code{<<}, est +indentée de deux espaces supplémentaires, et de deux autres pour sa +marque de fermeture. Bien que ceci ne soit pas obligatoire, nous vous +invitons à adopter cette pratique qui vous évitera nombre d'erreurs +@qq{accolades non pairées}. La structure de la musique apparaît ainsi +au premier coup d'œil, et les défauts de parité plus facilement +repérables. Vous remarquerez que la portée MG est créée à l'aide d'un +inférieur double -- nécessaire pour gérer ses deux voix -- alors que la +portée MD ne contient qu'une seule expression musicale -- il n'y a +qu'une voix -- bornée par des accolades simples. + +@cindex contexte, noms de +@cindex nommage des contextes + +La commande @code{\new} peut aussi permettre de nommer le contexte créé, +et ainsi le distinguer des autres contextes déjà existants : @example -\new @var{Contexte} = @var{"inventezUnNom"} @var{musique} +\new @var{type} = @var{"UnNom"} @var{expression-musicale} @end example -Le nom que vous choisirez ne pourra être attribué que si aucun autre contexte -n'a été créé précédemment avec le même nom. +Vous noterez la distinction entre le nom du type de contexte, +@code{Staff}, @code{Voice}, etc, et le nom -- une simple suite de +lettres au bon gré de l'utilisateur -- permettant d'identifier une +instance particulière du type en question. Comme nous l'avons déjà vu +dans le chapitre consacré aux paroles (@ref{Voices and vocals}), +cet identifiant permettra ensuite de se référer à ce contexte particulier. -@funindex \context -@item -Tout comme @code{\new}, la commande @code{\context} envoie une expression musicale -vers un contexte donné, mais attribue nécessairement un nom à ce contexte. La -syntaxe est la suivante : +@node Engravers explained +@subsection Engravers explained -@example -\context @var{Contexte} = @var{unNom} @var{musique} -@end example +@cindex engravers +@cindex graveurs + +Tout point qui compose une partition générée par LilyPond est +produit par un graveur (@emph{Engraver} en anglais). Ainsi, il y en a +un qui imprime les portées, un autre les têtes de note, un autre les +hampes, un autre encore pour les ligatures, etc. LilyPond dispose de +plus de 120 graveurs ! La plupart des partitions ne requièrent de +s'intéresser qu'à quelques uns seulement, et pour des partitions +simples, vous n'aurez même pas à vous en préoccuper. + +Les graveurs résident et opèrent au sein des contextes. +Les graveurs tels que le @code{Metronome_mark_engraver}, dont les effets +s'appliquent à la partition dans son intégralité, opèrent au sein du +contexte de plus haut niveau -- le contexte @code{Score}. + +Les graveurs @code{Clef_engraver} et @code{Key_engraver} seront logés +dans chacun des contextes @code{Staff} ; deux portées peuvent requérir +des clefs et des armures différentes. + +Les graveurs @code{Note_heads_engraver} et @code{Stem_engraver} résident +dans chacun des contextes @code{Voice}, contexte du plus bas niveau. + +Chaque graveur confectionne les objets spécifiquement associés à sa +fonction et traite les propriétés attachées à cette fonction. Ces +propriétés, tout comme celles relatives aux contextes, peuvent être +modifiées afin d'influencer le comportement du graveur et par voie de +conséquence le rendu des éléments dont il a la charge. + +Les graveurs ont tous un nom composé, formé des différents mots +décrivant leur fonction. Seule l'initiale du premier mot est en +majuscule, et les mots qui le composent sont joints par un caractère +souligné. Ainsi, le @code{Staff_symbol_engraver} est chargé de créer +les lignes de la portée, et le @code{Clef_engraver} détermine la hauteur +de référence de la portée en dessinant le symbole de la clef. + +Voici quelques uns des graveurs les plus courants, ainsi que leur +fonction. Vous noterez qu'il est facile d'en connaître la fonction à +partir du nom, et vice versa. + +@multitable @columnfractions .3 .7 +@headitem Graveur + @tab Fonction +@item Accidental_engraver + @tab Crée les altérations, y compris de précaution, accidentelles ou suggérées +@item Beam_engraver + @tab Grave les ligatures +@item Clef_engraver + @tab Grave les clefs +@item Completion_heads_engraver + @tab Divise les notes qui dépassent de la mesure +@item Dynamic_engraver + @tab Crée les soufflets et textes de nuance +@item Forbid_line_break_engraver + @tab Empêche un saut de ligne si un élément musiocal est toujours actif +@item Key_engraver + @tab Crée l'armure +@item Metronome_mark_engraver + @tab Grave les indications métronomiques +@item Note_heads_engraver + @tab Grave les têtes de note +@item Rest_engraver + @tab Grave les silences +@item Staff_symbol_engraver + @tab Grave les cinq lignes (par défaut) de la portée +@item Stem_engraver + @tab Crée les hampes et les trémolos sur une hampe unique +@item Time_signature_engraver + @tab Crée les métriques +@end multitable + +@smallspace + +Nous verrons plus avant comment le résultat de LilyPond peut changer +lorsqu'on modifie l'action des graveurs. + +@seealso + +Références internes : @rinternals{Engravers and Performers}. -Cette commande va partir à la recherche d'un contexte déjà existant, de type -@var{Contexte}, et portant le nom @var{unNom}. Ce qui peut être fort utile -pour se référer à un contexte existant. S'il s'avère que le contexte en question -n'existe pas encore, il est créé. Dans le cas de musique vocale avec des paroles, -cela donne : -@example -\context Voice = "@b{tenor}" @var{musique} -@end example +@node Modifying context properties +@subsection Modifying context properties -@noindent -et (pour que le texte soit aligné correctement avec les notes) : +@cindex contexte, propriétés +@cindex propriétés d'un contexte, modification +@cindex modification des propriétés d'un contexte +@funindex \set +@funindex \unset + +Les contextes gèrent les différentes valeurs des nombreuses +@emph{propriétés} qui leur sont attachées. Beaucoup d'entre elles +sont susceptibles d'être modifiées afin d'influer sur l'interprétation +de l'input et ainsi changer l'apparence du résultat. On les modifie +grace à la commande @code{\set}, qui s'utilise ainsi : @example -\new Lyrics \lyricsto "@b{tenor}" @var{paroles} +\set @emph{ContexteNommé}.@emph{propriétéNommée} = #@emph{valeur} @end example -@noindent +Où @emph{ContexteNommé} est habituellement @code{Score}, +@code{Staff} ou @code{Voice}. S'il n'est pas mentionné, il sera +considéré comme étant @code{Voice}. + +Les noms des propriétés de contexte sont composés de mots accolés sans +trait d'union ni caractère souligné, et dont seul le premier n'aura pas +d'initiale en majuscule. Voici quelques exemples de celles les plus +communément utilisées. + +@c attempt to force this onto a new page +@need 50 +@multitable @columnfractions .25 .15 .45 .15 +@headitem propriétéNommée + @tab Type + @tab Fonction + @tab Exemple de valeur +@item extraNatural + @tab Booléen + @tab Si vrai, ajoute un bécarre avant une altération accidentelle + @tab @code{#t}, @code{#f} +@item currentBarNumber + @tab Entier + @tab Détermine le numéro de la mesure en cours + @tab @code{50} +@item doubleSlurs + @tab Booléen + @tab Si vrai, imprime les liaisons au dessous et au dessus des notes + @tab @code{#t}, @code{#f} +@item instrumentName + @tab Texte + @tab Détermine le nom à afficher en début de portée + @tab @code{"Cello I"} +@item fontSize + @tab Réel + @tab Augmente ou diminue la taille de la fonte + @tab @code{2.4} +@item stanza + @tab Texte + @tab Détermine le texte à imprimer avant le début d'un couplet + @tab @code{"2"} +@end multitable -Une autre utilité de dénommer les contextes est de superposer en un même -contexte différentes expressions musicales. Dans l'exemple suivant, les -notes et les ponctuations ont été saisies séparément : +@noindent +où un boléen correspond soit à vrai (@code{#t} pour @emph{True} en +anglais) ou faux (@code{#f} pour @emph{False} en anglais), un entier est +un nombre entier positif, un réel est en nombre décimal positif ou +négatif, et texte correspond à une suite de caractères encadrée par des +apostrophes doubles. Attention à la présence des dièses (@code{#}) dans +deux cas particuliers : il sont partie intégrante des valeurs boléennes +et précèdent les @code{t} ou @code{f}, mais doivent aussi précéder +@emph{valeur} dans le libellé de la commande @code{\set}. Il faudra +donc, dans le cas d'une valeur boléenne, ne pas oublier de saisir un +double dièse -- par exemple @code{##t}. + +Avant de déterminer l'une de ces propriétés, nous devons savoir dans +quel contexte elles interviennent. Si cela est bien souvent évident, il +peut arriver que cela tourne au cauchemar. Lorsque vous ne spécifiez +pas le bon contexte, aucun message d'erreur ne s'affiche et l'effet +attendu n'est pas au rendez-vous. Par exemple, le @code{instrumentName} +est de manière incontestable membre du contexte @code{Staff}, puisque +c'est bien la portée que l'on va nommer. +Dans l'exemple suivant, la première portée affiche effectivement un nom, +alors que ce n'est pas le cas pour la deuxième dans la mesure où le +contexte n'a pas été spécifié. -@example -musique = @{ c4 c4 @} -ponctuation = @{ s4-. s4-> @} -@end example +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + \set Staff.instrumentName = #"Soprano" + c4 c + } + \new Staff \relative c' { + \set instrumentName = #"Alto" % Wrong! + d4 d + } +>> +@end lilypond -En les envoyant toutes deux dans le même contexte @context{Voice}, on les combine : +Dans la mesure où le nom de contexte par défaut est @code{Voice}, la +deuxième commande @code{\set} a défini @qq{Alto} comme propriété +@code{instrumentName} du contexte de voix. Puisque LilyPond n'ira pas +chercher une telle propriété dans la contexte @code{Voice}, celle-ci ne +sera pas interpétée. Il ne s'agit pas d'une erreur, aucun message +d'erreur ne sera ni émis ni enregistré. + +De la même manière, une faute d'orthographe dans le nom de la propriété +ne génèrera aucun message d'erreur et l'action escomptée ne se produira +pas. Vous pourriez déterminer par la commande @code{\set} n'importe +quelle @q{propriété}, même fictive, à partir de n'importe quel nom et +dans n'importe lequel des contextes disponibles. Mais tant que ce nom +est inconnu de LilyPond, rien ne se passera. Certains éditeurs de texte +disposent d'une prise en charge spécifique aux fichiers source LilyPond, +à l'instar de LilyPondTool couplé à JEdit et qui documente les noms des +pripriétés dans une infobulle lorsque vous les survolez à la souris, ou +les souligne différemment s'ils sont inconnus, comme ConTEXT. Dans le +cas où votre éditeur ne dispose pas de ces fonctionnalités, nous vous +recommandons de vérifier le nom des propriétés que vous manipulez dans +le Manuel de références internes -- voir +@rinternals{Tunable context properties}, ou @rinternals{Contexts}. + +La propriété @code{instrumentName} ne sera prise en compte que si elle +est définie dans un contexte @code{Staff} ; d'autres propriétés peuvent +par contre être définies dans plusieurs contextes différents. C'est le +cas de la propriété @code{extraNatural} qui est définie par défaut à ##t +(vrai) pour toutes les portées. Si vous lui attribuez la valeur ##f +(faux) dans un contexte @code{Staff} particulier, elle ne s'appliquera +qu'aux altérations de la portée en question ; si vous lui attribuez la +valeur @q{faux} au niveau du contexte @code{Score}, cela s'appliquera +alors à toutes les portées. + +Voici comment supprimer les bécarres supplémentaires pour une portée : -@example +@lilypond[quote,verbatim,ragged-right] << - \new Staff \context Voice = "A" \musique - \context Voice = "A" \ponctuation + \new Staff \relative c'' { + ais4 aes + } + \new Staff \relative c'' { + \set Staff.extraNatural = ##f + ais4 aes + } >> -@end example -@lilypond[quote,ragged-right] -music = { c4 c4 } -arts = { s4-. s4-> } -\relative c'' << - \new Staff \context Voice = "A" \music - \context Voice = "A" \arts +@end lilypond + +@noindent +et pour toutes les portées : + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais4 aes + } + \new Staff \relative c'' { + \set Score.extraNatural = ##f + ais4 aes + } >> @end lilypond -De cette façon, il est possible d'élaborer une édition Urtext (c'est-à-dire originale, -la plupart du temps sans ponctuations), en laissant la possibilité d'ajouter différentes -ponctuations sur les mêmes notes. +Autre exemple, si la propriété @code{clefOctavation} est déterminée au +niveau du contexte @code{Score}, elle modifiera la valeur de l'octave en +cours pour toutes les portées actives ; cette valeur sera considérée +comme étant la nouvelle valeur par défaut pour toutes les portées à +venir. + +La commande opposée, @code{\unset}, efface la propriété du contexte ; la +plupart des propriétés reviennent de ce fait à leur valeur par défaut. +En règle générale, la commande @code{\unset} n'est pas nécessaire dès +lors que vous faites appel à une nouvelle commande @code{\set} pour +modifier le réglage. + +Les commandes @code{\set} et @code{\unset} peuvent intervenir n'importe +où dans votre fichier source. Elles seront effectives dès leur +apparition et jusqu'à la fin de la partition, à moins d'être affectée +par un @code{\unset} ou un nouveau @code{\set}. À titre d'exemple, nous +allons modifier jouer avec la taille des fontes, ce qui affecte entre +autres la grosseur des tes de note. Les modifications s'appliquent +toujours par rapport à la valeur par défaut, non par rapport à la +dernière valeur. + +@lilypond[quote,verbatim,ragged-right,relative=1,fragment] +c4 +% make note heads smaller +\set fontSize = #-4 +d e +% make note heads larger +\set fontSize = #2.5 +f g +% return to default size +\unset fontSize +a b +@end lilypond + +Nous venons de voir comment déterminer la valeur de différents types de +propriétés. N'oubliez pas que les nombres, entiers ou réels, doivent +être précédés d'un dièse (@code{#}) et les valeurs vrai ou faux de deux +dièses -- respectivement ##t et ##f --. Une valeur textuelle doit être +encadrée de guillemets anglais, @code{``@dots{ }''}, bien que, comme +nous le constaterons plus tard, la commande @code{\markup} permet aussi +de spécifier du texte. + +@unnumberedsubsubsec Setting context properties with @code{\with} -@cindex crééer des contextes +@funindex \with +@cindex propriétés d'un contexte, définition avec \with + +Les propriétés d'un contexte peuvent aussi être réglées lors de la +création de ce contexte. Ceci constitue parfois une façon plus claire +de spécifier les valeurs d'une propriété pour la durée de vie du +contexte. Lorsque vous créez un contexte à l'aide de la commande +@code{\new}, vous pouvez la faire suivre immédiatement d'un bloc +@code{\with @{ .. @}} qui contiendra les réglages des différentes +propriétés. Ainsi, si nous voulons par exemple annuler l'impression des +bécarres supplémentaires sur la durée d'une portée, nous écririons : -@item -La dernière commande pour créer des contextes est @example -\context @var{Contexte} @var{musique} +\new Staff \with @{ extraNatural = ##f @} @end example +@noindent +ce qui donnerait : + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff + \relative c'' { + gis ges aes ais + } + \new Staff \with { extraNatural = ##f } + \relative c'' { + gis ges aes ais + } +>> +@end lilypond + +Les propriétés réglées de cette manière peuvent néanmoins être modifiées +de façon dynamique grace à @code{\set} ; un @code{\unset} les ramènera à +leur valeur par défaut. + +La propriété @code{fontSize} constitue une exception : lorsqu'elle est +déterminée au sein d'un bloc @code{\with}, cela redéfinit la valeur par +défaut de la taille de fonte. Une modification est possible par la +commande @code{\set}, mais la commande @code{\unset fontSize} fera +revenir à la nouvelle valeur par défaut. + +@unnumberedsubsubsec Setting context properties with @code{\context} + +Vous pouvez régler les valeurs des propriétés de contexte en une seule +fois pour tous les contextes d'un même type, par exemple tous les +contextes @code{Staff}. Le type du contexte doit être donné +explicitement d'après son nom, par exemple @code{Staff}, prédédé d'une +oblique inverse, donc nous saisirons @code{\Staff}. La manière de +régler la valeur des propriétés est la même que ce que nous avons vu +avec la commande @code{\with}, puisqu'on se place dans un bloc +@code{\context} inclus dans un bloc @code{\layout}. Chaque bloc +@code{\context} affectera tous les contextes concernés par le bloc +@code{\score} ou @code{\book} au sein duquel apparaît ce bloc +@code{\layout}. Voici comment le mettre en place : + +@lilypond[verbatim,quote] +\score { + \new Staff { + \relative c'' { + cis4 e d ces + } + } + \layout { + \context { + \Staff + extraNatural = ##t + } + } +} +@end lilypond @noindent -Elle ressemble à l'emploi de @code{\context} avec @code{= @var{unNom}}, mais -cette fois elle se considèrera chez elle partout où elle trouvera un contexte -de type @var{Contexte}, quel que puisse être son nom. +Les propriétés de contextes ainsi définies peuvent être adaptées pour +chacun des contextes en particulier grace à un bloc @code{\with} ou bien +une commande @code{\set} au fil des notes. -@c Au secours ! --vv +@seealso -Cette variante sert à des expressions musicales qui peuvent être interprétées à -plusieurs niveaux. Par exemple, une commande telle que @code{\applyOutput} (voir -@c FIXME: broken link -@c @ruser{Running a function on all layout objects}) : si elle n'est pas associée avec -@code{\context}, elle s'applique par défaut dans le contexte @context{Voice}. +Manuel de notation : @ruser{Changing context default settings}, +@ruser{The set command}. -@example -\applyOutput #'@var{Contexte} #@var{fonction} % s'applique dans le contexte Voice -@end example +Références internes : @rinternals{Contexts}, +@rinternals{Tunable context properties}. + +@node Adding and removing engravers +@subsection Adding and removing engravers -Pour l'appliquer au contexte @context{Score} ou @context{Staff}, il faut utiliser : +@cindex graveurs, ajout +@cindex graveurs, suppression -@example -\applyOutput #'Score #@var{fonction} -\applyOutput #'Staff #@var{fonction} -@end example +@funindex \consists +@funindex \remove -@end itemize +Nous avons vu que chacun des différents contextes contient plusieurs +graveurs, et que chacun de ces graveurs est chargé de générer une +part spécifique du résultat, qui les barres de mesure, qui la portée, +qui les têtes de note, les hampes, etc. Le fait de suprimer un graveur +d'un contexte éliminera sa contribution à l'œuvre résultante. Bien que +ce soit là un moyen radical de modifier le résultat, cette pratique est +dans quelques cas fort utile. +@subsubheading Changing a single context -@node Engravers explained -@subsection Engravers explained +Nous utilisons, pour supprimer un graveur d'un contexte, la commande +@code{\with} dès la création dudit contexte, comme nous l'avons vu dans +la section précédente. -UNTRANSLATED NODE: IGNORE ME +Illustrons notre propose en reprenant un exemple du chapitre précédant, +puor lui suprimer les lignes de la portée. Pour mémoire, les lignes +d'une portée sont générées par le Staff_symbol_engraver. -@node Modifying context properties -@subsection Modifying context properties +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \remove Staff_symbol_engraver +} +\relative c' { + c4 + \set fontSize = #-4 % make note heads smaller + d e + \set fontSize = #2.5 % make note heads larger + f g + \unset fontSize % return to default size + a b +} +@end lilypond -UNTRANSLATED NODE: IGNORE ME +@cindex ambitus, graveur -@node Adding and removing engravers -@subsection Adding and removing engravers +Vous pouvez aussi ajouter individuellement un graveur à un contexte. La +commande se formule ainsi : + +@code{\consists @emph{Nom_du_graveur}} + +et se place dans un bloc @code{\with}. Certianes partitions vocales +font apparaître un @rglos{ambitus} au début de la portée, afin +d'indiquer ses notes extrèmes. L'ambitus est généré par +l'@code{Ambitus_engraver}, que l'on peut adjoindre à n'importe quel +contexte. Si nous l'ajoutons au contexte @code{Voice}, seule la +tessiture de cette voix sera calculée : + +@lilypond[quote,verbatim,ragged-right] +\new Staff << + \new Voice \with { + \consists Ambitus_engraver + } + \relative c'' { + \voiceOne + c a b g + } + \new Voice + \relative c' { + \voiceTwo + c e d f + } +>> +@end lilypond + +@noindent +alors que si nous l'ajoutons au contexte @code{Staff}, +l'@code{Ambitus_engraver} calculera l'écart maximal à partir de toutes +les notes de toutes les voix de la portée : + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \consists Ambitus_engraver + } + << + \new Voice + \relative c'' { + \voiceOne + c a b g + } + \new Voice + \relative c' { + \voiceTwo + c e d f + } +>> +@end lilypond + +@subsubheading Changing all contexts of the same type + +@funindex \layout + +Les exemples ci-dessus nous ont montré comment ajouter ou retirer des +graveurs à des contextes individuels. Nous pourrions aussi ajouter ou +suprimer des graveurs à tous les contextes d'un même type en insérant +les commandes pour le contexte approprié, au sein d'un bloc +@code{\layout}. Si nous voulions afficher un ambitus pour chacune des +portées d'un système à quatre portées, il nous suffirait d'écrire : + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new Staff << + \relative c'' { c a b g } + >> + \new Staff << + \relative c' { c a b g } + >> + \new Staff << + \clef "G_8" + \relative c' { c a b g } + >> + \new Staff << + \clef "bass" + \relative c { c a b g } + >> + >> + \layout { + \context { + \Staff + \consists Ambitus_engraver + } + } +} +@end lilypond -UNTRANSLATED NODE: IGNORE ME +@noindent +Vous réglerez de la même manière les propriétés de tous les contextes +d'un type particulier si vous insérez les commandes @code{\set} dans un +bloc @code{\context}. + +@seealso + +Manuel de notation : @ruser{Modifying context plug-ins}, +@ruser{Changing context default settings}. @node Extending the templates @@ -692,14 +2211,16 @@ Les exemples qui suivent vous donneront des méthodes générales pour adapter des modèles. @menu -* Soprano and cello:: -* Four-part SATB vocal score:: -* Building a score from scratch:: +* Soprano and cello:: +* Four-part SATB vocal score:: +* Building a score from scratch:: @end menu @node Soprano and cello @subsection Soprano and cello +@cindex modèles, modification des + Commencez par le modèle qui vous semblera le plus proche de ce à quoi vous voulez aboutir. Disons par exemple que vous voulez écrire une pièce pour soprano et violoncelle : dans ce cas l'on pourrait commencer par les @@ -716,16 +2237,16 @@ melodie = \relative c' @{ @} texte = \lyricmode @{ - Laaa Siii Dooo Rééé + Aaa Bee Cee Dee @} \score@{ << - \new Voice = "voixUn" @{ + \new Voice = "un" @{ \autoBeamOff \melodie @} - \new Lyrics \lyricsto "voixUn" \texte + \new Lyrics \lyricsto "un" \texte >> \layout @{ @} \midi @{ @} @@ -752,7 +2273,6 @@ melodie = \relative c' @{ @} @end example - On n'a pas besoin de deux commandes @code{\version}. Ce dont on a besoin, c'est la section @code{melodie}. De même, on n'a pas besoin de deux sections @code{\score} --- si nous les gardions toutes les deux, on obtiendrait deux @@ -762,11 +2282,11 @@ non plus de deux @code{\layout} ni de deux @code{\midi}. Si on se contente de couper et coller les sections @code{melodie}, on se retrouvera avec deux sections de ce nom ; il nous faut donc les renommer. -Appelons la section pour la soprano @code{musiqueSoprano} et celle pour le -violoncelle @code{musiqueVioloncelle}. Tant qu'on y est, renommons -@code{texte} en @code{parolesSoprano}. Attention à bien renommer les +Appelons la section pour la soprano @code{sopranoMusique} et celle pour le +violoncelle @code{violoncelleMusique}. Tant qu'on y est, renommons +@code{texte} en @code{sopranoParoles}. Attention à bien renommer les deux occurrences de chacune de ces dénominations : c'est-à-dire la -définition de départ, où l'on trouve @code{mélodie = relative c' @{ }, +définition de départ, où l'on trouve @code{melodie = relative c' @{ }, et l'endroit où cette dénomination est utilisée, dans la section @code{\score}. @@ -775,7 +2295,7 @@ le veut l'usage, et donnons-lui d'autres notes. @example \version @w{"@version{}"} -musiqueSoprano = \relative c' @{ +sopranoMusique = \relative c' @{ \clef treble \key c \major \time 4/4 @@ -783,11 +2303,11 @@ musiqueSoprano = \relative c' @{ a4 b c d @} -parolesSoprano = \lyricmode @{ +sopranoParoles = \lyricmode @{ Laaa Siii Dooo Rééé @} -musiqueVioloncelle = \relative c @{ +violoncelleMusique = \relative c @{ \clef bass \key c \major \time 4/4 @@ -797,11 +2317,11 @@ musiqueVioloncelle = \relative c @{ \score@{ << - \new Voice = "voixUn" @{ + \new Voice = "un" @{ \autoBeamOff - \musiqueSoprano + \sopranoMusique @} - \new Lyrics \lyricsto "voixUn" \parolesSoprano + \new Lyrics \lyricsto "un" \sopranoParoles >> \layout @{ @} \midi @{ @} @@ -823,17 +2343,18 @@ encadrer la musique par des @code{<<} et @code{>>}, qui feront comprendre à LilyPond que plusieurs évènements --- ici, des objets @code{Staff} --- se déroulent en même temps. Le bloc @code{\score} ressemble maintenant à +@c Indentation in this example is deliberately poor @example -\score@{ +\score @{ << - << - \new Voice = "voixUn" @{ - \autoBeamOff - \musiqueSoprano - @} - \new Lyrics \lyricsto "voixUn" \parolesSoprano - >> - \new Staff \musiqueVioloncelle + << + \new Voice = "un" @{ + \autoBeamOff + \sopranoMusique + @} + \new Lyrics \lyricsto "un" \sopranoParoles + >> + \new Staff \violoncelleMusique >> \layout @{ @} \midi @{ @} @@ -882,14 +2403,451 @@ celloMusic = \relative c { } @end lilypond +@seealso + +Les patrons originaux sont disponibles à l'annexe @qq{Modèles}, voir +@ref{Single staff}. + @node Four-part SATB vocal score @subsection Four-part SATB vocal score -UNTRANSLATED NODE: IGNORE ME +@cindex exemple, SATB +@cindex SATB, squelette + +La plupart des œuvres écrites pour chœur à quatre voix mixtes et +orchestre, comme Elias de Mendelssohn ou le Messie de Haendel, disposent +la musique et les paroles du chœur sur quatre portées -- soprano, alto, +ténor et basse -- surmontant une réduction pour piano de +l'accompagnement orchestral. En voici un exemple, tiré du Messie de +Haendel : + +@c The following should appear as music without code +@lilypond[quote,ragged-right] +global = { \key d \major \time 4/4 } +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy is the lamb that was slain +} +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis e2 | +} +altoWords = \sopranoWords +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords +upper = \relative a' { + \clef "treble" + \global + r4 2 4 | + 4. 8 2 | + 4 2 | +} +lower = \relative c, { + \clef "bass" + \global + 4 2 4 | + 4. 8 2 | + 4 2 | +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = "Soprano" + \new Voice = "sopranos" { \global \sopranoMusic } + >> + \new Lyrics \lyricsto "sopranos" { \sopranoWords } + \new Staff = "altos" << + \set Staff.instrumentName = "Alto" + \new Voice = "altos" { \global \altoMusic } + >> + \new Lyrics \lyricsto "altos" { \altoWords } + \new Staff = "tenors" << + \set Staff.instrumentName = "Tenor" + \new Voice = "tenors" { \global \tenorMusic } + >> + \new Lyrics \lyricsto "tenors" { \tenorWords } + \new Staff = "basses" << + \set Staff.instrumentName = "Bass" + \new Voice = "basses" { \global \bassMusic } + >> + \new Lyrics \lyricsto "basses" { \bassWords } + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = "Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + +Aucun des modèles ne permet d'arriver exactement à cette mise en forme. +Celui qui s'en rapprocherait le plus est @q{SATB vocal score and +automatic piano reduction} -- voir @ref{Vocal ensembles} -- mais encore +faudrait-t-il en modifier la mise en forme et refaire la partie de +piano qui n'est plus une simple reprise des parties vocales. Les +variables qui gèrent la musique et les paroles du chœur ne nécessitent +pas de modification, mais il nous faut d'autres variables pour la +réduction de piano. + +L'ordre dans lequel apparaissent les contextes dans le @code{ChoirStaff} +du modèle ne correspond pas à ce que nous voyons ci-dessus. Il nous +faudra y revenir pour obtenir quatre portées avec des paroles en dessous +de chacune d'elles. Toutes les voix devraient être @code{\voiceOne}, +ce qui est la postition par défaut ; il nous faudra donc éliminer toutes +les commandes @code{\voiceXXX}. Les ténors auront besoin d'une clé +spécifique. Enfin, nous n'avons pas encore abordé la façon dont les +paroles sont présentées dans le modèle ; nous procèderons donc comme +nous en avons l'habitude. Il faudra aussi ajouter un nom à chaque portée. + +Une fois tout ceci accompli, voici notre @code{ChoirStaff} : + +@example + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = "Soprano" + \new Voice = "sopranos" @{ \global \sopranoMusique @} + >> + \new Lyrics \lyricsto "sopranos" @{ \sopranoParoless @} + \new Staff = "altos" << + \set Staff.instrumentName = "Alto" + \new Voice = "altos" @{ \global \altoMusique @} + >> + \new Lyrics \lyricsto "altos" @{ \altoParoles @} + \new Staff = "tenors" << + \set Staff.instrumentName = "Tenor" + \new Voice = "tenors" @{ \global \tenorMusique @} + >> + \new Lyrics \lyricsto "tenors" @{ \tenorParoless @} + \new Staff = "basses" << + \set Staff.instrumentName = "Bass" + \new Voice = "basses" @{ \global \basseMusique @} + >> + \new Lyrics \lyricsto "basses" @{ \basseParoles @} + >> % fin du ChoirStaff +@end example + +Il nous faut maintenant nous occuper de la partie de piano. Nous allons +nous contenter de simplement récupérer la partie de piano du modèle +@q{Solo piano} : + +@example +\new PianoStaff << + \set PianoStaff.instrumentName = "Piano " + \new Staff = "upper" \superieur + \new Staff = "lower" \inferieur +>> +@end example + +puis d'ajouter les définitions de variable pour @code{supérieur} et +@code{inferieur}. + +Les systèmes pour chœur et pour piano doivent être combinés à l'aide de +doubles inférieur/supérieur puisqu'ils doivent s'empiler : + +@example +<< % combine ChoirStaff and PianoStaff one above the other + \new ChoirStaff << + \new Staff = "sopranos" << + \new Voice = "sopranos" @{ \global \sopranoMusique @} + >> + \new Lyrics \lyricsto "sopranos" @{ \sopranoParoless @} + \new Staff = "altos" << + \new Voice = "altos" @{ \global \altoMusique @} + >> + \new Lyrics \lyricsto "altos" @{ \altoParoles @} + \new Staff = "tenors" << + \clef "G_8" % tenor clef + \new Voice = "tenors" @{ \global \tenorMusique @} + >> + \new Lyrics \lyricsto "tenors" @{ \tenorParoles @} + \new Staff = "basses" << + \clef "bass" + \new Voice = "basses" @{ \global \bassesMusique @} + >> + \new Lyrics \lyricsto "basses" @{ \bassesParoles @} + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = "Piano" + \new Staff = "upper" \superieur + \new Staff = "lower" \inferieur + >> +>> +@end example + +Une fois tout cela mis en place, et après avoir ajouté les notes et les +paroles de ces trois mesures du Messie, nous obtenon : + +@lilypond[quote,verbatim,ragged-right,addversion] +global = { \key d \major \time 4/4 } +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy is the lamb that was slain +} +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis fis2 | +} +altoWords = \sopranoWords +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords +upper = \relative a' { + \clef "treble" + \global + r4 2 4 | + 4. 8 2 | + 4 2 | +} +lower = \relative c, { + \clef "bass" + \global + 4 2 4 | + 4. 8 2 | + 4 2 | +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = "Soprano" + \new Voice = "sopranos" { \global \sopranoMusic } + >> + \new Lyrics \lyricsto "sopranos" { \sopranoWords } + \new Staff = "altos" << + \set Staff.instrumentName = "Alto" + \new Voice = "altos" { \global \altoMusic } + >> + \new Lyrics \lyricsto "altos" { \altoWords } + \new Staff = "tenors" << + \set Staff.instrumentName = "Tenor" + \new Voice = "tenors" { \global \tenorMusic } + >> + \new Lyrics \lyricsto "tenors" { \tenorWords } + \new Staff = "basses" << + \set Staff.instrumentName = "Bass" + \new Voice = "basses" { \global \bassMusic } + >> + \new Lyrics \lyricsto "basses" { \bassWords } + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = "Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + @node Building a score from scratch @subsection Building a score from scratch -UNTRANSLATED NODE: IGNORE ME +@cindex modèles, création + +Après avoir acquis une certaine dextérité dans l'écriture de code +LilyPond, vous devez vous sentir suffisament pret à vous lancer dans +la création d'une partition à partir de zéro, autrement dit en ne +partant pas d'un exemple. Vous pourrez ainsi vous construire vos +propres patrons selon le type de musique que vous affectionnez plus +particulièrement. Pour voir comment procéder, nous allons monter la +partition d'un prélude pour orgue. + +Nous débutons par une section d'en-tête ; nous y mettrons entre autres +le titre et le nom du compositeur. Puis viennent toutes les définitions +de toutes les variables. Nous treminons par le bloc @code{\score}. +Attelons-nous pour cette aventure, en gardant bien à l'esprit ce que +nous venons de dire ; nous nous occuperons des détails en temps voulu. + +Nous nous appuyons sur les deux premières mesures du prélude sur +@emph{Jesu, meine Freude}, écrit pour orgue avec pédalier. Vous pouvez +voir ces deux mesures au bas de cette page. La main droite comporte +deux voix, la main gauche et le pédalier une seule. Il nous faut donc +quatre définitions de musique, plus une qui contiendra la métrique et +l'armure : + +@example +\version @w{"@version{}"} +\header @{ + title = "Jesu, meine Freude" + composer = "J S Bach" +@} +MetriqueArmure = @{ \time 4/4 \key c \minor @} +ManuelUnVoixUnMusique = @{s1@} +ManuelUnVoixDeuxMusique = @{s1@} +ManuelDeuxMusique = @{s1@} +PedalierOrgueMusique = @{s1@} + +\score @{ +@} +@end example + +Pour l'instant, nous utilisons des silences invisibles, @code{s1}, en +lieu et place des notes réelles. On verra plus tard. + +Passons maintenant au bloc @code{\score} et à ce qu'il devrait contenir. +Nous y recopions simplement la structure des portées que nous voulons. +La musique pour orgue se présente généralement sous la forme de trois +portées, une pour chaque main et une pour le pédalier. Les portées du +manuel sont regroupées, nous utiliserons donc un @code{PianoStaff}. La +première partie du manuel requiert deux voix et la seconde une seule. + +@example + \new PianoStaff << + \new Staff = "ManualOne" << + \new Voice @{ \ManuelUnVoixUnMusique @} + \new Voice @{ \ManuelUnVoixDeuxMusique @} + >> % fin du contexte de portée ManuelUn + \new Staff = "ManualTwo" << + \new Voice @{ \ManuelDeuxMusique @} + >> % fin du contexte de portée ManuelDeux + >> % fin du contexte PianoStaff +@end example + +Il nous faut ajouter à cela une portée pour le pédalier. Elle se place +sous le système de piano, mais puisqu'elle doît rester synchrone avec +lui, nous utilisons un double inférieur/supérieur pour les regrouper. +Négliger ceci nous renverrait une erreur, et personne n'est à l'abri de +cette faute ! Pour preuve, il vous suffit de copier l'exemple complet en +fin de chapitre, de supprimer ces @code{<<} et @code{>>}, et de le +compiler, pour savoir de quoi il retourne. + +@example +<< % Système pianistique et portée de pédalier sont synchrones + \new PianoStaff << + \new Staff = "ManualOne" << + \new Voice @{ \ManuelUnVoixUnMusique @} + \new Voice @{ \ManuelUnVoixDeuxMusique @} + >> % fin du contexte de portée ManuelUn + \new Staff = "ManualTwo" << + \new Voice @{ \ManuelDeuxMusique @} + >> % fin du contexte de portée ManuelDeux + >> % fin du contexte PianoStaff + \new Staff = "PedalOrgan" << + \new Voice @{ \PedalierOrgueMusique @} + >> +>> +@end example + +La construction en simultané -- @code{<< .. >>} -- n'est pas strictement +obligatoire pour les portées manuel deux et pédalier, qui ne contiennent +chacune qu'une seule expression musicale ; mais cela ne mange pas de +pain, et c'est une bonne habitude que de toujours encadrer par un double +inférieur/supérieur ce qui suit une sommande @code{\new Staff} au cas où +il y aurait plusieurs voix. Il en va autrement pour les contextes +@code{Voice} : ils doivent être toujours suivis d'accolades -- +@code{@{ .. @}} -- au cas où vous avez employé plusieurs variables qui +doivent intervenir consécutivement. + +Ajoutons donc cette structure au bloc @code{\score}, tout en fignolant +l'indentation. Nous en profitons pour ajouter les clés appropriées, +effectuer les réglages concernant les hampes et liaisons de la portée +supérieure grace à @code{\voiceOne} et @code{\voiceTwo}, et mettre en +place la métrique et l'armure de chaque portée grace à notre variable +@code{\MetriqueArmure}. + +@example +\score @{ + << % Système pianistique et portée de pédalier sont synchrones + \new PianoStaff << + \new Staff = "ManualOne" << + \TimeKey % définition de la métrique et de l'armure + \clef "treble" + \new Voice @{ \voiceOne \ManuelUnVoixUnMusique @} + \new Voice @{ \voiceTwo \ManuelUnVoixDeuxMusique @} + >> % fin du contexte de la portée ManuelUn + \new Staff = "ManualTwo" << + \TimeKey + \clef "bass" + \new Voice @{ \ManuelDeuxMusique @} + >> % fin du contexte de la portée ManuelDeux + >> % fin du contexte PianoStaff + \new Staff = "PedalOrgan" << + \TimeKey + \clef "bass" + \new Voice @{ \PedalierOrgueMusique @} + >> % fin du contexte de la portée PedalOrgan + >> +@} % fin du contexte Score +@end example + +Nous en avons fini avec la structure. Toutes les partitions pour orgue +auront cette structure, même si le nombre de voix peut chager. Tout ce +qui nous reste à faire maintenant consiste à saisir la musique et à +regrouper toutes les parties. + +@lilypond[quote,verbatim,ragged-right,addversion] +\header { + title = "Jesu, meine Freude" + composer = "J S Bach" +} +TimeKey = { \time 4/4 \key c \minor } +ManualOneVoiceOneMusic = \relative g' { + g4 g f ees | d2 c2 | +} +ManualOneVoiceTwoMusic = \relative c' { + ees16 d ees8~ ees16 f ees d c8 d~ d c~ | + c c4 b8 c8. g16 c b c d | +} +ManualTwoMusic = \relative c' { + c16 b c8~ c16 b c g a8 g~ g16 g aes ees | + f ees f d g aes g f ees d e8~ ees16 f ees d | +} +PedalOrganMusic = \relative c { + r8 c16 d ees d ees8~ ees16 a, b g c b c8 | + r16 g ees f g f g8 c,2 | + } + +\score { + << % PianoStaff and Pedal Staff must be simultaneous + \new PianoStaff << + \new Staff = "ManualOne" << + \TimeKey % set time signature and key + \clef "treble" + \new Voice { \voiceOne \ManualOneVoiceOneMusic } + \new Voice { \voiceTwo \ManualOneVoiceTwoMusic } + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \TimeKey + \clef "bass" + \new Voice { \ManualTwoMusic } + >> % end ManualTwo Staff context + >> % end PianoStaff context + \new Staff = "PedalOrgan" << + \TimeKey + \clef "bass" + \new Voice { \PedalOrganMusic } + >> % end PedalOrgan Staff context + >> +} % end Score context +@end lilypond +