@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- @ignore Translation of GIT committish: 29471848676f1736b10245f8a00c14115feb1007 When revising a translation, copy the HEAD committish of the version that you are working on. For details, see the Contributors' Guide, node Updating translation committishes.. @end ignore @c \version "2.13.39" @c Translators: Valentin Villenave, Jean-Charles Malahieude @c Translation checkers: John Mandereau @c Translation status: post-GDP @node Concepts fondamentaux @chapter Concepts fondamentaux @translationof 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 * Organisation des fichiers LilyPond:: * Les voix contiennent la musique:: * Contextes et graveurs:: * Extension des modèles:: @end menu @node Organisation des fichiers LilyPond @section Organisation des fichiers LilyPond @translationof 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 expérimentés pour qu'ils puissent organiser leurs fichiers comme ils l'entendent. Cependant, les nouveaux utilisateurs peuvent parfois se perdre en raison de cette souplesse. Cette section présente 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{Structure de fichier}. @menu * Introduction à la structure de fichier LilyPond:: * La partition est une (unique) expression musicale composée:: * Expressions musicales imbriquées:: * Non-imbrication des crochets et liaisons:: @end menu @node Introduction à la structure de fichier LilyPond @subsection Introduction à la structure de fichier LilyPond @translationof Introduction to the LilyPond file structure @cindex format d'entrée @cindex structure de ficher Un fichier d'entrée LilyPond ressemble à@tie{}: @example \version @w{"@version{}"} \header @{ @} \score @{ @var{...expression musicale composite...} % c'est là qu'est la musique ! \layout @{ @} \midi @{ @} @} @end example @noindent Il existe de nombreuses variantes à ce schéma simpliste, mais cet exemple est un préambule à notre propos. @funindex \book @funindex book @funindex \score @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 \relative c'' @{ c4 a d c @} @end example @noindent comme un raccourci de @example \book @{ \score @{ \new Staff @{ \new Voice @{ \relative c'' @{ c4 a b c @} @} @} \layout @{ @} @} @} @end example 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 contextes implicites @cindex implicites, contextes @strong{Attention :} de nombreux exemples, dans la documentation de LilyPond, ne font pas apparaître les commandes @code{\new Staff} ou @code{\new Voice}, qui sont créées implicitement. Ce qui n'est pas primordial pour des exemples simples le devient dès que la situation se complexifie un tant soit peu. 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 traitée plus en détails au chapitre @ref{Contextes et graveurs}. @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 StaffGroup << @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@tie{}: @code{@{ @dots{} @}}, LilyPond le considère comme une et une seule expression musicale. Comme nous l'avons vu précédemment, un bloc @code{\score} peut contenir d'autres informations@tie{}: @example \score @{ @{ c'4 a b c' @} \header @{ @} \layout @{ @} \midi @{ @} @} @end example @funindex \header @funindex header @funindex \layout @funindex layout @funindex \midi @funindex midi @cindex header @cindex en-tête @cindex layout @cindex mise en forme @cindex midi @noindent Gardez à l'esprit que ces trois commandes -- @code{\header}, @code{\layout} et @code{\midi} -- sont spécifiques@tie{}: à l'inverse de toutes les commandes débutant par une oblique inversée @code{\} (@emph{backslash} en anglais), @strong{elles ne constituent pas} des expressions musicales et ne peuvent pas faire partie d'expressions musicales. Elles peuvent de ce fait être placées à l'intérieur du bloc @code{\score}, ou bien à l'extérieur. En réalité, ces commandes sont la plupart du temps indépendantes du bloc @code{\score} -- par exemple, la commande @code{\header} intervient souvent avant le bloc @code{\score}, comme le montre l'exemple ci-dessus. 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{Mise en forme de la partition} et @ruser{Création de fichiers MIDI}. @cindex partitions multiples @cindex book, bloc implicite @cindex implicite, bloc book @funindex \book @funindex book 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}) n'est 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 @file{.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 (@file{.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, par exemple un mouvement d'une symphonie. @cindex layout, effets selon l'emplacement Tout bloc @code{\layout} affecte le bloc @code{\score} ou @code{\book} au sein duquel il intervient@tie{}: 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{Plusieurs partitions dans un même ouvrage}. @cindex variables @cindex identificateurs Un autre raccourci pratique est la possibilité de définir des variables, également appelées @qq{identificateurs} -- voir @ref{Organisation du code source avec des variables} à ce sujet. Dans tous les modèles, vous trouverez@tie{}: @example melodie = \relative c' @{ c4 a b c @} \score @{ @{ \melodie @} @} @end example Lorsque LilyPond examinera ce fichier, il va prendre la valeur de la 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 ponctuation, ni caractère accentué, ni espace.}@tie{}; ce peut être @code{melodie}, @code{global}, @code{maindroitepiano}, ou @code{laTeteAToto}, tant qu'il ne s'agit pas de @qq{mot réservé}. Pour plus de détails, voir @ref{Économie de saisie grâce aux identificateurs et fonctions}. @seealso Pour une description complète du format des fichiers d'entrée, voir @ruser{Structure de fichier}. @node La partition est une (unique) expression musicale composée @subsection La partition est une (unique) expression musicale composée @translationof Score is a (single) compound musical expression @funindex \score @funindex score @cindex partition @cindex bloc score, contenu @cindex expression musicale composite Dans la section précédente, @ref{Introduction à la structure de fichier LilyPond}, 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@tie{}: comment diable peut-on savoir quoi mettre après @code{\score}@tie{}? En fait, nous ne l'avons pas éludée du tout@tie{}: le grand mystère est tout simplement qu'@strong{il n'y a pas} de mystère. Allez, expliquons-le en une ligne@tie{}: @quotation @emph{Un bloc @code{\score} doit commencer par une et une seule expression musicale.} @end quotation @noindent Peut-être serait-il judicieux de relire la section @ref{Les expressions musicales en clair}, dans laquelle vous avez appris à construire de grandes expressions musicales petit bout par petit bout -- nous avons vu les notes, puis les accords, etc. Maintenant, nous allons partir d'une grande expression musicale, et remonter la pente. Pour rester simple, nous nous contenterons d'un chanteur accompagné au piano. On n'a pas besoin d'une partition d'orchestre -- c.-à-d. des portées regroupées en @code{StaffGroup} -- donc laissons cela de côté. Par contre, nous voulons bien une voix et une double portée de piano. @example \score @{ @{ << \new Staff = "chanteur" << >> \new PianoStaff = "piano" << >> >> @} \layout @{ @} @} @end example Nous avons ici attribué des noms aux portées -- @qq{chanteur} et @qq{piano}. Bien que cela ne soit pas primordial, c'est une habitude qu'il est bon d'adopter dès le départ@tie{}: vous saurez au premier coup d'œil à quoi correspond chaque portée. Vous vous souvenez que nous avons recours à @code{<<} et @code{>>} en lieu et place de @code{@{ @dots{} @}} 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@dots{} 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, ou bien des notes @strong{et} des paroles. Dans la mesure où nous y ajouterons des paroles, les chevrons sont donc obligatoires. Si vous avez oublié comment ajouter des paroles à l'aide de la commande @code{\addlyrics}, relisez le chapitre @ref{Écriture de chants simples}. @lilypond[verbatim,quote,ragged-right] \score { << \new Staff = "singer" << \new Voice = "vocal" { c'1 } \addlyrics { And } >> \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 LilyPond correspond à une voix, au sens de voix d'une polyphonie plutôt que de voix chantée -- ce pourrait être une partie de violon par exemple --, et des paroles. Nous avons également une partie de piano, qui contient deux portées@tie{}: une pour la main droite, une autre pour la main gauche. Il nous faudra d'ailleurs ajouter une clef de fa à cette dernière. À ce point, on pourrait commencer à ajouter les notes. Dans les accolades qui suivent @code{\new Voice = "chant"}, on pourrait commencer à écrire @example \relative c'' @{ 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, comme nous l'avons vu plus haut. Pour s'assurer que le contenu de la variable @code{texte} soit bien interprété comme des paroles, nous le préfixons d'un @code{\lyricmode}. Sans cette précaution, LilyPond tenterait d'interpréter le contenu de cette variable comme des notes, ce qui déclencherait immanquablement des erreurs. LilyPond dispose de différents types de données -- voir @ruser{Modes de saisie} pour plus de détails. Avec quelques notes de plus et une clef de fa, nous pourrions avoir@tie{}: @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 } >> \new PianoStaff = "piano" << \new Staff = "upper" { \upper } \new Staff = "lower" { \clef "bass" \lower } >> >> \layout { } } @end lilypond 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 large, puis travaillez sur chaque niveau plus détaillé. À ce propos, une indentation stricte et propre est vraiment d'une aide précieuse@tie{}: assurez-vous que chaque élément d'un même niveau a le même décalage horizontal dans votre éditeur de texte@tie{}! @seealso Manuel de notation : @ruser{Structure d'une partition}. @node Expressions musicales imbriquées @subsection Expressions musicales imbriquées @translationof Nesting music expressions @cindex portées, temporaires @cindex ossias Déclarer toutes les portées dès le départ n'est pas une obligation@tie{}; 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@tie{}: @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@tie{}: @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{principal} plutôt qu'en dessous, ce qui est le comportement par défaut. @seealso Les ossia apparaissent souvent sans clef ni métrique, et dans une taille plus petite. Ceci requiert des commandes dont nous n'avons pas encore parlé. Voir @ref{Taille des objets} et @ruser{Portées d'ossia}. @node Non-imbrication des crochets et liaisons @subsection Non-imbrication des crochets et liaisons @translationof On the un-nestedness of brackets and ties @cindex crochets, imbrication @cindex crochets, types de 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 de prime abord. Avant d'examiner ces règles, voici une liste des différents types de crochet@tie{}: @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 Marque le début et la fin d'une liaison @item @code{\( .. \)} @tab Marque le début et la fin d'une liaison de phrasé @item @code{[ .. ]} @tab Marque 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@tie{}: les liaisons de prolongation indiquées par un tilde (@code{~}), les marques de nolet avec @w{@code{\times x/y @{..@}}}, 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{<<@tie{}[@tie{}@{@tie{}(@tie{}..@tie{})@tie{}@}@tie{}]@tie{}>>}, 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 @strong{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 @strong{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@tie{}; 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@tie{}: @lilypond[quote,verbatim,ragged-right,relative=2] g8\( a b[ c b\) a] g4 @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'ornement, 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,ragged-right,relative=1] r16[ g \times 2/3 { r16 e'8] } g,16( a \times 2/3 { b16 d) e } g,8[( a \times 2/3 { b8 d) e~] } | \times 4/5 { e32\( a, b d e } a4.\) @end lilypond @node Les voix contiennent la musique @section Les voix contiennent la musique @translationof Voices contain music Les chanteurs utilisent leur voix pour chanter@tie{}; 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), qui se trouvent être le concept fondamental de LilyPond. @menu * J'entends des Voix:: * Instanciation explicite des voix:: * Voix et paroles:: @end menu @node J'entends des Voix @subsection J'entends des Voix @translationof I'm hearing Voices @cindex polyphonie @cindex calques (layers) @cindex voix multiples @cindex Voice, contexte @cindex contexte de voix @cindex musique simultanée @cindex musique concurrente @cindex voix ou accords @cindex accords ou voix Dans une partition gérée par LilyPond, le niveau le plus bas, ou bien élémentaire ou fondamental, est le @qq{contexte de voix} -- @emph{Voice context} en anglais --. Pour d'autres logiciels, on fait tantôt référence à la notion de @qq{couche} ou de @qq{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 à fait contenir plusieurs notes dans un accord, à partir de quand aurons-nous vraiment besoin de plusieurs voix@tie{}? Considérons déjà ces quatre accords@tie{}: @lilypond[quote,verbatim,ragged-right,relative=1] \key g \major 4 @end lilypond Nous exprimons ici chacun des accords par l'utilisation de chevrons gauche et droite simples, @w{@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@tie{}? Nous avons alors deux notes qui débutent au même moment, mais dont la durée est différente@tie{}: un ré noire et un fa dièse croche. Comment coder cela@tie{}? 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 doubles chevrons gauche/droite, @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@tie{}: @lilypond[quote,verbatim,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@tie{}: @lilypond[quote,verbatim,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 @cindex voix, nommage @cindex voix et constructions simultanées @cindex liaisons et constructions simultanées 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, le positionnement et l'orientation des liaisons, hampes, nuances, etc. est définie automatiquement. @lilypond[quote,verbatim] \new Staff \relative c' { % Main voice c16 d e f % Voice "1" Voice "2" Voice "3" << { g4 f e } \\ { r8 e4 d c8~ } >> | << { d2 e } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b c2 } >> | } @end lilypond Ces voix sont séparées de la voix principale, laquelle 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@tie{}; 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 e } \\ % Voice 2 continues { c8 b16 a b8 g~ g2 } \\ { \voiceThreeStyle s4 b 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 note, 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 cercle barré vert, la quatrième (non utilisée ici) en croix magenta@tie{}; @code{\voiceNeutralStyle} (non utilisé ici) revient au style par défaut. Nous verrons plus tard comment créer de telles commandes. Voir @ref{Visibilité et couleur des objets} et @ref{Utilisation de variables dans les retouches}. @cindex polyphonie et mode relatif @cindex mode relatif et polyphonie 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@tie{}: @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 indication de ce 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@tie{}: 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 écrire 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 notes 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@tie{}: utilisons la construction @code{<<@tie{}\\@tie{}>>} pour saisir la première mesure dans trois voix@tie{}: @lilypond[quote,verbatim,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 @cindex voix et direction des hampes @cindex direction des hampes et voix La direction des hampes est attribuée automatiquement@tie{}: 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 grâce à un @code{\\} supplémentaire@tie{}: @lilypond[quote,verbatim,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 elle 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@tie{}; 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é @code{force-hshift} dans @ref{Correction des collisions d'objets}). @seealso Manuel de notation : @ruser{Plusieurs voix}. @node Instanciation explicite des voix @subsection Instanciation explicite des voix @translationof Explicitly instantiating voices @funindex \voiceOne @funindex voiceOne @funindex \voiceTwo @funindex voiceTwo @funindex \voiceThree @funindex voiceThree @funindex \voiceFour @funindex voiceFour @funindex \oneVoice @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. 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@tie{}: @example \new Staff @{ \relative c' @{ << @{ e4 f g a @} \\ @{ c,4 d e f @} >> @} @} @end example @noindent équivaut à @example \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 @cindex Voice, retour à un seul contexte @cindex retour à un contexte Voice unique Les commandes @code{\voiceXXX} fixent la direction des hampes, 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. 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. 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] \relative c' { % Default behavior or behavior after \oneVoice c4 d8~ d e4( f | g4 a) b-> c | } @end lilypond @lilypond[quote,ragged-right,verbatim] \relative c' { \voiceOne c4 d8~ d e4( f | g4 a) b-> c | \oneVoice c,4 d8~ d e4( f | g4 a) b-> c | } @end lilypond @lilypond[quote,ragged-right,verbatim] \relative c' { \voiceTwo c4 d8~ d e4( f | g4 a) b-> c | \oneVoice c,4 d8~ d e4( f | g4 a) b-> c | } @end lilypond 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 % Start simultaneous section of three voices << % Continue the main voice in parallel { g4 f e | d2 e) | } % Initiate second voice \new Voice { % Set stems, etc., down \voiceTwo r8 e4 d c8~ | c8 b16 a b8 g~ g2 | } % Initiate third voice \new Voice { % Set stems, etc, up \voiceThree s2. | s4 b c2 | } >> } @end lilypond @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@tie{}: @lilypond[quote,ragged-right,verbatim] \new Staff \relative c' { c16^( d e f << { g4 f e | d2 e) | } \new Voice { \voiceTwo r8 e4 d c8~ | << { c8 b16 a b8 g~ g2 | } \new Voice { \voiceThree s4 b c2 | } >> } >> } @end lilypond @cindex espacement des notes 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. @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 Empilement des notes @translationof Note columns @cindex note column @cindex empilement de notes @cindex collisions de notes @cindex shift, commandes @cindex décalage, commandes @funindex \shiftOff @funindex shiftOff @funindex \shiftOn @funindex shiftOn @funindex \shiftOnn @funindex shiftOnn @funindex \shiftOnnn @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@tie{}: 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 ou 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 @ref{Exemple concret}. 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{Plusieurs voix}. @node Voix et paroles @subsection Voix et paroles @translationof Voices and vocals La musique vocale est une gageure en soi@tie{}: il nous faut combiner deux expressions différentes -- des notes et des paroles. @funindex \new Lyrics @funindex \lyricsto @funindex lyricsto @funindex Lyrics @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}@tie{}; vous relierez ensuite ces paroles aux notes grâce à la commande @code{\lyricsto@{@}} et au nom assigné à la voix en question. @lilypond[quote,verbatim] << \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}), @strong{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 @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 ChoirStaff @funindex \lyricmode @funindex lyricmode @cindex structure d'une partition vocale @cindex chœur, partie de 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 -- ou identificateurs -- afin de séparer de la structure de la portée aussi bien la musique que les paroles. 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 = { \key f \major \time 6/8 \partial 8 } SopOneMusic = \relative c'' { c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 } SopOneLyrics = \lyricmode { Let | flee -- cy flocks the | hills a -- dorn, __ } SopTwoMusic = \relative c' { r8 | r4. r4 c8 | a'8([ g)] f f([ e)] d | e8([ d)] c bes' } 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 @cindex SATB, structure @cindex partition vocale avec plusieurs couplets @cindex couplets multiples et musique vocale 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 de la structure de portée aussi bien les notes que les paroles. Vous noterez aussi une variable particulière, que nous avons appelée @qq{ArmureMetrique}, et qui contient plusieurs commandes que nous utiliserons dans les deux portées. Dans de nombreux autres exemples, elle s'appelle @qq{global}. @lilypond[quote,verbatim] keyTime = { \key c \major \time 4/4 \partial 4 } SopMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g } AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 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 \keyTime \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 \keyTime \TenorMusic } \new Voice = "Bass" { \voiceTwo \BassMusic } >> >> } @end lilypond @seealso Manuel de notation : @ruser{Musique vocale}. @node Contextes et graveurs @section Contextes et graveurs @translationof Contexts and engravers Nous avons évoqué rapidement les contextes et graveurs dans les chapitres précédents@tie{}; examinons en détail ces concepts essentiels à la maîtrise de LilyPond. @menu * Tout savoir sur les contextes:: * Création d'un contexte:: * Tout savoir sur les graveurs:: * Modification des propriétés d'un contexte:: * Ajout et suppression de graveurs:: @end menu @node Tout savoir sur les contextes @subsection Tout savoir sur les contextes @translationof Contexts explained @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@tie{}: @lilypond[quote,verbatim,relative=2] cis4 cis2. | a4 a2. | @end lilypond Si le code est assez austère, dans la partition ont été ajoutés un chiffre de mesure, des barres de mesure, des altérations et une clé. Pour une bonne raison@tie{}: LilyPond @emph{interprète} le code. Il le compulse dans l'ordre chronologique, de même qu'on lit une partition de gauche à droite@tie{}; 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@tie{}: 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 @code{Voice}), les portées (contexte @code{Staff}), ou la partition dans son ensemble (contexte @code{Score}). Ils sont ordonnés hiérarchiquement@tie{}: ainsi un contexte @code{Staff} peut contenir plusieurs contextes @code{Voice}, et un contexte @code{Score} peut contenir plusieurs contextes @code{Staff}. @quotation @sourceimage{context-example,5cm,,} @end quotation 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 @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@tie{}: 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. 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 diagrammes pour instruments frettés, la basse chiffrée, etc. Le nom de chacun des contextes est formé d'un ou plusieurs mots aux initiales en capitale et directement accolés les uns aux autres sans ponctuation, comme par exemple @code{GregorianTranscriptionStaff}. @seealso Manuel de notation : @ruser{Tout savoir sur les contextes}. @node Création d'un contexte @subsection Création d'un contexte @translationof Creating contexts @funindex \new @funindex new @cindex nouveaux contextes @cindex contextes, création de Il en va des contextes comme de toute hiérarchie@tie{}: 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. Le bloc @code{\score} contient donc une expression musicale unique ainsi que la définition des supports à produire -- @code{\layout} pour du visuel ou @code{\midi} pour de l'acoustique. 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}@tie{}; mais leur présence explicite devient indispensable 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@tie{}: @example \new @var{type} @var{expression-musicale} @end example @noindent 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. @warning{La commande @bs{}@code{new Score} ne devrait jamais servir en début de partition, puisque le contexte premier que constitue @code{Score} est créé automatiquement par l'interprétation de l'@var{expression-musicale} contenue dans le bloc @code{\score}. Les adaptations affectant les propriétés des différents contextes et qui s'appliqueront à l'ensemble de la partition trouvent leur place au sein d'un bloc @bs{}@code{layout}, en suivant les préceptes énoncés au chapitre @ref{Modification des propriétés d'un contexte}.} 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 abondamment commentée@tie{}: @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 Notez que toute déclaration qui ouvre un bloc par une accolade, @code{@{}, ou un double chevron gauche, @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 appariées}. La structure de la musique apparaît ainsi au premier coup d'œil, et les défauts de parité sont plus facilement repérables. Vous remarquerez que la portée MG est créée à l'aide d'un double chevron gauche -- 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, nommage @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@tie{}: @example \new @var{type} = @var{"UnNom"} @var{expression-musicale} @end example 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. Vous pouvez utiliser des chiffres et espaces, à la stricte condition d'englober le tout dans des guillemets@tie{}; l'identificateur suivant est tout à fait valide@tie{}: @w{@code{\new Staff = "MaPortee 1" @var{expression-musicale}}}. Comme nous l'avons déjà vu dans le chapitre consacré aux paroles (@ref{Voix et paroles}), cet identifiant permettra ensuite de se référer à ce contexte particulier. @seealso Manuel de notation : @ruser{Création d'un contexte}. @node Tout savoir sur les graveurs @subsection Tout savoir sur les graveurs @translationof Engravers explained @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@tie{}! 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}@tie{}; 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 (@emph{beams}) @item Clef_engraver @tab Grave les clefs @item Completion_heads_engraver @tab Divise les notes qui dépassent de la mesure @item New_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 musical 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érence des propriétés internes : @rinternals{Engravers and Performers}. @node Modification des propriétés d'un contexte @subsection Modification des propriétés d'un contexte @translationof Modifying context properties @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 set @funindex \unset @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 grâce à la commande @code{\set}, qui s'utilise ainsi@tie{}: @example \set @emph{ContexteNommé}.@emph{propriétéNommée} = #@emph{valeur} @end example 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 @strong{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 @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 un 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 signes dièse (@code{#}) dans deux cas particuliers@tie{}: ils 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 deux signes dièse -- par exemple @code{##t}. @cindex propriétés et contextes @cindex réglage de propriétés au sein des contextes Avant de déterminer l'une de ces propriétés, nous devons savoir dans quel contexte elle intervient. 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é. @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 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 le contexte @code{Voice}, celle-ci ne sera pas interpré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 @qq{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 proprié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 la Référence des propriétés 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}@tie{}; 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 à @code{##t} (vrai) pour toutes les portées. Si vous lui attribuez la valeur @code{##f} (faux) dans un contexte @code{Staff} particulier, elle ne s'appliquera qu'aux altérations de la portée en question@tie{}; si vous lui attribuez la valeur @qq{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@tie{}: @lilypond[quote,verbatim,ragged-right] << \new Staff \relative c'' { ais2 aes } \new Staff \relative c'' { \set Staff.extraNatural = ##f ais2 aes } >> @end lilypond @noindent et pour toutes les portées : @lilypond[quote,verbatim,ragged-right] << \new Staff \relative c'' { ais2 aes } \new Staff \relative c'' { \set Score.extraNatural = ##f ais2 aes } >> @end lilypond 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@tie{}; 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@tie{}; 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ées par un @code{\unset} ou un nouveau @code{\set}. À titre d'exemple, nous allons jouer avec la taille des fontes, ce qui affecte entre autres la grosseur des têtes de note. Les modifications s'appliquent toujours par rapport à la valeur par défaut, non par rapport à la dernière valeur définie. @lilypond[quote,verbatim,ragged-right,relative=1] c4 d % make note heads smaller \set fontSize = #-4 e4 f | % make note heads larger \set fontSize = #2.5 g4 a % return to default size \unset fontSize b4 c | @end lilypond Nous venons de voir comment déterminer la valeur de différents types de propriété. N'oubliez pas que les nombres, entiers ou réels, doivent être précédés d'un signe dièse (@code{#}) et les valeurs vrai ou faux de deux signes dièse -- respectivement @code{##t} et @code{##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. @subsubheading Définition des propriétés de contexte avec @code{\with} @translationof Setting context properties with @code{\with} @funindex \with @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 @w{@code{\with @{ .. @}}} qui contiendra les réglages des différentes propriétés. Ainsi, si nous voulions par exemple annuler l'impression des bécarres supplémentaires sur la durée d'une portée, nous écririons@tie{}: @example \new Staff \with @{ extraNatural = ##f @} @end example @noindent ce qui donnerait : @lilypond[quote,verbatim,ragged-right] << \new Staff \relative c'' { gis4 ges aes ais } \new Staff \with { extraNatural = ##f } { \relative c'' { gis4 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 grâce à @code{\set}@tie{}; un @code{\unset} les ramènera à leur valeur initialisée par @code{\with}. @cindex fontSize, valeur par défaut et réglage La propriété @code{fontSize} constitue une exception@tie{}: 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. @subsubheading Définition des propriétés de contexte avec @code{\context} @translationof Setting context properties with @code{\context} @cindex propriétés d'un contexte, définition avec \context @funindex \context @funindex 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écé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@tie{}: @lilypond[verbatim,quote] \score { \new Staff { \relative c'' { cis4 e d ces } } \layout { \context { \Staff extraNatural = ##t } } } @end lilypond Dans le cas où ces ajustements de propriété doivent affecter toutes les portées de la partition, nous utiliserons alors@tie{}: @lilypond[quote,verbatim] \score { << \new Staff { \relative c'' { gis4 ges aes ais } } \new Staff { \relative c'' { gis4 ges aes ais } } >> \layout { \context { \Score extraNatural = ##f } } } @end lilypond @noindent Les propriétés de contexte ainsi définies peuvent être adaptées pour chacun des contextes en particulier grâce à un bloc @code{\with} ou bien une commande @code{\set} au fil des notes. @seealso Manuel de notation : @ruser{Modification des réglages par défaut d'un contexte}, @ruser{La commande de fixation (set)}. Référence des propriétés internes : @rinternals{Contexts}, @rinternals{Tunable context properties}. @node Ajout et suppression de graveurs @subsection Ajout et suppression de graveurs @translationof Adding and removing engravers @cindex graveurs, ajout @cindex graveurs, suppression @funindex \consists @funindex consists @funindex \remove @funindex remove Nous avons vu que chaque contexte met en œuvre plusieurs graveurs, et que chacun de ces graveurs est chargé de générer une composante particulière du fichier de sortie, qui les barres de mesure, qui la portée, qui les têtes de note, les hampes, etc. Le fait de supprimer un graveur d'un contexte éliminera sa contribution au fichier de sortie. Bien que ce soit là un moyen radical de modifier le résultat, cette pratique est dans quelques cas fort utile. @subsubheading Modification d'un seul contexte @translationof Changing a single context 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. Illustrons notre propos en reprenant un exemple du chapitre précédent, duquel nous supprimerons les lignes de la portée. Pour mémoire, les lignes d'une portée sont générées par le @code{Staff_symbol_engraver}. @lilypond[quote,verbatim,ragged-right] \new Staff \with { \remove Staff_symbol_engraver } \relative c' { c4 d \set fontSize = #-4 % make note heads smaller e4 f | \set fontSize = #2.5 % make note heads larger g4 a \unset fontSize % return to default size b4 c | } @end lilypond @cindex ambitus, graveur Vous pouvez aussi ajouter individuellement un graveur à un contexte. La commande se formule ainsi@tie{}: @code{\consists @var{Nom_du_graveur}} @noindent et se place dans un bloc @code{\with}. Certaines 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@tie{}: @lilypond[quote,verbatim,ragged-right] \new Staff << \new Voice \with { \consists Ambitus_engraver } { \relative c'' { \voiceOne c4 a b g } } \new Voice { \relative c' { \voiceTwo c4 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@tie{}: @lilypond[quote,verbatim,ragged-right] \new Staff \with { \consists Ambitus_engraver } << \new Voice { \relative c'' { \voiceOne c4 a b g } } \new Voice { \relative c' { \voiceTwo c4 e d f } } >> @end lilypond @subsubheading Modification de tous les contextes d'un même type @translationof Changing all contexts of the same type @funindex \layout @funindex layout Les exemples ci-dessus nous ont montré comment ajouter ou retirer des graveurs à des contextes individuels. Nous pourrions aussi ajouter ou supprimer 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@tie{}: @lilypond[quote,verbatim,ragged-right] \score { << \new Staff { \relative c'' { c4 a b g } } \new Staff { \relative c' { c4 a b g } } \new Staff { \clef "G_8" \relative c' { c4 a b g } } \new Staff { \clef "bass" \relative c { c4 a b g } } >> \layout { \context { \Staff \consists Ambitus_engraver } } } @end lilypond @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{Modification des greffons de contexte}, @ruser{Modification des réglages par défaut d'un contexte}. @node Extension des modèles @section Extension des modèles @translationof Extending the templates Bon, vous avez lu le tutoriel, vous savez écrire de la musique. Mais comment obtenir les portées que vous voulez@tie{}? Les @ref{Modèles}, c'est bien beau, mais que faire quand ils ne traitent pas ce que l'on veut précisément@tie{}? Les exemples qui suivent vous donneront des méthodes générales pour adapter des modèles. @menu * Soprano et violoncelle:: * Partition pour chœur à quatre voix mixtes:: * Écriture d'une partition à partir de zéro:: * Économie de saisie grâce aux identificateurs et fonctions:: * Conducteurs et parties:: @end menu @node Soprano et violoncelle @subsection Soprano et violoncelle @translationof 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@tie{}: dans ce cas, on pourrait commencer par les @qq{notes et paroles}, pour la partie de soprano. @example \version @w{"@version{}"} melodie = \relative c' @{ \clef "treble" \key c \major \time 4/4 a4 b c d @} texte = \lyricmode @{ Aaa Bee Cee Dee @} \score@{ << \new Voice = "un" @{ \autoBeamOff \melodie @} \new Lyrics \lyricsto "un" \texte >> \layout @{ @} \midi @{ @} @} @end example Maintenant, on veut ajouter une partie de violoncelle. Jetons un coup d'œil sur l'exemple avec les notes seules@tie{}: @example \version @w{"@version{}"} melodie = \relative c' @{ \clef "treble" \key c \major \time 4/4 a4 b c d @} \score @{ \new Staff \melodie \layout @{ @} \midi @{ @} @} @end example On n'a pas besoin de deux commandes @code{\version}. Ce dont on a besoin, c'est de 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 parties séparées@tie{}; mais nous voulons un vrai duo, avec les deux parties ensemble. Dans la section @code{\score}, on n'a pas besoin 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@tie{}; il nous faut donc les renommer. 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@tie{}: c'est-à-dire la définition de départ, où l'on trouve @w{@code{melodie = \relative c' @{ }}, et l'endroit où cette dénomination est utilisée, dans la section @code{\score}. Et puis, toujours tant qu'on y est, mettons le violoncelle en clé de fa, comme le veut l'usage, et donnons-lui d'autres notes. @example \version @w{"@version{}"} sopranoMusique = \relative c' @{ \clef "treble" \key c \major \time 4/4 a4 b c d @} sopranoParoles = \lyricmode @{ Laaa Siii Dooo Rééé @} violoncelleMusique = \relative c @{ \clef "bass" \key c \major \time 4/4 d4 g fis8 e d4 @} \score@{ << \new Voice = "un" @{ \autoBeamOff \sopranoMusique @} \new Lyrics \lyricsto "un" \sopranoParoles >> \layout @{ @} \midi @{ @} @} @end example Voilà qui est mieux, mais la partie de violoncelle n'apparaît pas sur la partition -- en effet, nous n'y avons pas fait appel dans la section @code{\score}. Si l'on veut que la partie de violoncelle s'imprime sous la partie de soprano, on va devoir ajouter@tie{}: @example \new Staff \musiqueVioloncelle @end example @noindent en dessous de tout ce qui concerne la soprano. Il nous faut également 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 @{ << << \new Voice = "un" @{ \autoBeamOff \sopranoMusique @} \new Lyrics \lyricsto "un" \sopranoParoles >> \new Staff \violoncelleMusique >> \layout @{ @} \midi @{ @} @} @end example @noindent C'est un peu le bazar dans tout ça@tie{}; mais il vous sera facile de mettre un peu d'ordre dans l'indentation. Voici le modèle pour soprano et violoncelle au complet@tie{}: @lilypond[quote,verbatim,ragged-right,addversion] sopranoMusic = \relative c' { \clef "treble" \key c \major \time 4/4 a4 b c d } sopranoLyrics = \lyricmode { Aaa Bee Cee Dee } celloMusic = \relative c { \clef "bass" \key c \major \time 4/4 d4 g fis8 e d4 } \score { << << \new Voice = "one" { \autoBeamOff \sopranoMusic } \new Lyrics \lyricsto "one" \sopranoLyrics >> \new Staff \celloMusic >> \layout { } \midi { } } @end lilypond @seealso Les patrons originaux sont disponibles à l'annexe @qq{Modèles}, voir @ref{Portée unique}. @node Partition pour chœur à quatre voix mixtes @subsection Partition pour chœur à quatre voix mixtes @translationof Four-part SATB vocal score @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@tie{}: @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 @qq{SATB vocal score and automatic piano reduction} -- voir @ref{Ensemble vocal} -- mais encore faudrait-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 position par défaut@tie{}; 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@tie{}; 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}@tie{}: @example \new ChoirStaff << \new Staff = "sopranos" << \set Staff.instrumentName = #"Soprano" \new Voice = "sopranos" @{ \global \sopranoMusique @} >> \new Lyrics \lyricsto "sopranos" @{ \sopranoParoles @} \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" @{ \tenorParoles @} \new Staff = "basses" << \set Staff.instrumentName = #"Bass" \new Voice = "basses" @{ \global \bassMusique @} >> \new Lyrics \lyricsto "basses" @{ \bassParoles @} >> % fin du ChoirStaff @end example Il nous faut maintenant nous occuper de la partie de piano. Nous allons nous contenter de récupérer la partie de piano du modèle @qq{Solo piano}@tie{}: @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{superieur} et @code{inferieur}. Les systèmes pour chœur et pour piano doivent être combinés à l'aide de doubles chevrons gauche/droite puisqu'ils doivent s'empiler@tie{}: @example << % combine ChoirStaff et PianoStaff l'un au-dessus de l'autre \new ChoirStaff << \new Staff = "sopranos" << \new Voice = "sopranos" @{ \global \sopranoMusique @} >> \new Lyrics \lyricsto "sopranos" @{ \sopranoParoles @} \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 \bassMusique @} >> \new Lyrics \lyricsto "basses" @{ \bassParoles @} >> % fin du 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 obtenons@tie{}: @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 Écriture d'une partition à partir de zéro @subsection Écriture d'une partition à partir de zéro @translationof Building a score from scratch @cindex modèles, création @cindex squelettes, création Après avoir acquis une certaine dextérité dans l'écriture de code LilyPond, vous devez vous sentir suffisament prêt à 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@tie{}; nous y mettrons entre autres le titre et le nom du compositeur. Puis viennent toutes les définitions de toutes les variables. Nous terminons par le bloc @code{\score}. Attelons-nous pour cette aventure, en gardant bien à l'esprit ce que nous venons de dire@tie{}; 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@tie{}: @example \version @w{"@version{}"} \header @{ title = "Jesu, meine Freude" composer = "J S Bach" @} ArmureMetrique = @{ \key c \minor \time 4/4 @} 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 = "ManuelUn" << \new Voice @{ \ManuelUnVoixUnMusique @} \new Voice @{ \ManuelUnVoixDeuxMusique @} >> % fin du contexte de portée ManuelUn \new Staff = "ManuelDeux" << \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 doit rester synchrone avec lui, nous utilisons des doubles chevrons pour les regrouper. Négliger ceci nous renverrait une erreur, et personne n'est à l'abri de cette faute@tie{}! 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 voir de quoi il retourne. @example << % Système pianistique et portée de pédalier sont synchrones \new PianoStaff << \new Staff = "ManuelUn" << \new Voice @{ \ManuelUnVoixUnMusique @} \new Voice @{ \ManuelUnVoixDeuxMusique @} >> % fin du contexte de portée ManuelUn \new Staff = "ManualDeux" << \new Voice @{ \ManuelDeuxMusique @} >> % fin du contexte de portée ManuelDeux >> % fin du contexte PianoStaff \new Staff = "PedalierOrgue" << \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@tie{}; mais cela ne mange pas de pain, et c'est une bonne habitude que de toujours encadrer par des doubles chevrons gauche/droite ce qui suit une commande @code{\new Staff} au cas où il y aurait plusieurs voix. Il en va autrement pour les contextes @code{Voice}@tie{}: ils doivent être toujours suivis d'accolades -- @code{@{...@}} -- au cas où vous auriez 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 grâce à @code{\voiceOne} et @code{\voiceTwo}, et mettre en place la métrique et l'armure de chaque portée grâce à notre variable @code{\MetriqueArmure}. @example \score @{ << % Système pianistique et portée de pédalier sont synchrones \new PianoStaff << \new Staff = "ManuelUn" << \ArmureMetrique % définition de l'armure et de la métrique \clef "treble" \new Voice @{ \voiceOne \ManuelUnVoixUnMusique @} \new Voice @{ \voiceTwo \ManuelUnVoixDeuxMusique @} >> % fin du contexte de la portée ManuelUn \new Staff = "ManuelDeux" << \ArmureMetrique \clef "bass" \new Voice @{ \ManuelDeuxMusique @} >> % fin du contexte de la portée ManuelDeux >> % fin du contexte PianoStaff \new Staff = "PedalierOrgue" << \ArmureMetrique \clef "bass" \new Voice @{ \PedalierOrgueMusique @} >> % fin du contexte de la portée PedalOrgan >> @} % fin du contexte Score @end example @cindex espacement des portées @cindex portées, espacement Cette partition pour orgue est préesque parfaite. Rest juste ce petit défaut qui ne se remarque pas lorsque l'on considère un seul système@tie{}: la distance qui sépare la portée de pédalier de celle de la main gauche devrait être plus ou moins égale à celle qui sépare les deux mains. En fait, la distance entre les deux portées d'un @code{PianoStaff} ne saurait trop se dilater@tie{}; le pédalier devrait adopter le même comportement. @cindex sous-propriétés @cindex propriétéset sous-propriétés @cindex graphical objects @cindex objets graphiques @cindex grobs La propension des portées à se dilater se contrôle à l'aide de la propriété @code{staff-staff-spacing}, attachée à @qq{l'objet graphique} @code{VerticalAxisGroup} -- la documentation de LilyPond utilise souvent l'abréviation @emph{grob} pour @emph{graphical object}. Pas de panique@tie{}! Tout ceci sera expliqué plus tard -- pour les curieux, jetez un œil au chapitre @ruser{Vue d'ensemble de la modification des propriétés}. Revenons à notre propos@tie{}: nous voulons modifier uniquement la sous-propriété @code{stretchability}. Les impatients trouveront les valeurs par défaut de la propriété @code{staff-staff-spacing} dans le fichier @file{scm/define-grobs.scm}, en examinant la définition du @emph{grob} @code{VerticalAxisGroup}. La valeur que nous affecterons à @code{stretchability} est celle que contient la définition du contexte @code{PianoStaff} telle qu'elle apparaît dans le fichier @file{ly/engraver-init.ly}). @example \score @{ << % Système pianistique et portée de pédalier sont synchrones \new PianoStaff << \new Staff = "ManuelUn" << \ArmureMetrique % définition de l'armure et de la métrique \clef "treble" \new Voice @{ \voiceOne \ManuelUnVoixUnMusique @} \new Voice @{ \voiceTwo \ManuelUnVoixDeuxMusique @} >> % fin du contexte de la portée ManuelUn \new Staff = "ManuelDeux" \with @{ \override VerticalAxisGroup #'staff-staff-spacing #'stretchability = 5 @} << \ArmureMetrique \clef "bass" \new Voice @{ \ManuelDeuxMusique @} >> % fin du contexte de la portée ManuelDeux >> % fin du contexte PianoStaff \new Staff = "PedalierOrgue" << \ArmureMetrique \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 changer. 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" } keyTime = { \key c \minor \time 4/4 } ManualOneVoiceOneMusic = \relative g' { g4 g f ees | d2 c | } ManualOneVoiceTwoMusic = \relative c' { ees16 d ees8~ ees16 f ees d c8 d~ d c~ | c8 c4 b8 c8. g16 c b c d | } ManualTwoMusic = \relative c' { c16 b c8~ c16 b c g a8 g~ g16 g aes ees | f16 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" << \keyTime % set key and time signature \clef "treble" \new Voice { \voiceOne \ManualOneVoiceOneMusic } \new Voice { \voiceTwo \ManualOneVoiceTwoMusic } >> % end ManualOne Staff context \new Staff = "ManualTwo" \with { \override VerticalAxisGroup #'staff-staff-spacing #'stretchability = 5 } << \keyTime \clef "bass" \new Voice { \ManualTwoMusic } >> % end ManualTwo Staff context >> % end PianoStaff context \new Staff = "PedalOrgan" << \keyTime \clef "bass" \new Voice { \PedalOrganMusic } >> % end PedalOrgan Staff context >> } % end Score context @end lilypond @seealso Glossaire musicologique : @rglosnamed{system,système}. @node Économie de saisie grâce aux identificateurs et fonctions @subsection Économie de saisie grâce aux identificateurs et fonctions @translationof Saving typing with variables and functions @cindex variables @cindex identificateurs Jusqu'à maintenant, vous avez vu ce type de code@tie{}: @lilypond[quote,verbatim,ragged-right] hornNotes = \relative c'' { c4 b dis c } \score { { \hornNotes } } @end lilypond Vous comprendrez combien cela peut être utile pour écrire de la musique minimaliste@tie{}: @lilypond[quote,verbatim,ragged-right] fragmentA = \relative c'' { a4 a8. b16 } fragmentB = \relative c'' { a8. gis16 ees4 } violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA } \score { { \violin } } @end lilypond Néanmoins vous pouvez aussi utiliser ces identificateurs -- aussi connus sous le nom de variables, macros, ou commandes (définies par l'utilisateur) -- pour des retouches@tie{}: @c TODO Avoid padtext - not needed with skylining @lilypond[quote,verbatim,ragged-right] dolce = \markup { \italic \bold dolce } padText = { \once \override TextScript #'padding = #5.0 } fthenp =_\markup { \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p } violin = \relative c'' { \repeat volta 2 { c4._\dolce b8 a8 g a b | \padText c4.^"hi there!" d8 e' f g d | c,4.\fthenp b8 c4 c-. | } } \score { { \violin } \layout { ragged-right = ##t } } @end lilypond Ces identificateurs sont évidemment utiles pour économiser de la frappe. Mais ils peuvent l'être même si vous ne les utilisez qu'une seule fois@tie{}: ils réduisent la complexité. Regardons l'exemple précédent sans aucun identificateur. C'est beaucoup plus laborieux à lire, et particulièrement la dernière ligne. @example violin = \relative c'' @{ \repeat volta 2 @{ c4._\markup @{ \italic \bold dolce @} b8 a8 g a b | \once \override TextScript #'padding = #5.0 c4.^"hi there!" d8 e' f g d | c,4.\markup @{ \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @} b8 c4 c-. | @} @} @end example @c TODO Replace the following with a better example -td @c Skylining handles this correctly without padText Jusqu'ici nous avons vu des substitutions statiques@tie{}: quand LilyPond rencontre @code{\padText}, il le remplace par le contenu que nous lui avons défini -- c'est-à-dire le contenu à droite de @code{padText=}. LilyPond gère également des substitutions non-statiques -- vous pouvez les voir comme des fonctions. @lilypond[quote,verbatim,ragged-right] padText = #(define-music-function (parser location padding) (number?) #{ \once \override TextScript #'padding = $padding #}) \relative c''' { c4^"piu mosso" b a b | \padText #1.8 c4^"piu mosso" d e f | \padText #2.6 c4^"piu mosso" fis a g | } @end lilypond Utiliser des identificateurs est aussi un bon moyen pour vous épargner du travail si la syntaxe de LilyPond change un jour -- voir @rprogram{Mise à jour avec convert-ly}. Si vous avez une seule définition, par exemple @code{\dolce}, pour tous vos fichiers (voir @ref{Feuilles de style}) et que la syntaxe change, alors vous n'aurez qu'à mettre à jour votre seule définition @code{\dolce}, au lieu de devoir modifier chaque fichier @file{.ly}. @node Conducteurs et parties @subsection Conducteurs et parties @translationof Scores and parts Dans la musique d'orchestre, toutes les notes sont imprimées deux fois. D'abord dans les parties séparées destinées aux musiciens, et ensuite dans le conducteur destiné au chef. Les variables sont là pour vous éviter un double travail. La musique n'est entrée qu'une seule fois, et stockée dans une variable, dont le contenu servira à imprimer à la fois la partie séparée et la partition d'orchestre. Il est judicieux de définir les notes dans un fichier séparé. Par exemple, supposons que le fichier @file{musique-Cor.ly} contienne la partie suivante pour un duo cor/@/basson. @example notesCor = \relative c @{ \time 2/4 r4 f8 a | cis4 f | e d | @} @end example @noindent On établira alors une partie séparée en constituant un nouveau fichier@tie{}: @example \include "musique-Cor.ly" \header @{ instrument = "Cor en Fa" @} @{ \transpose f c' \notesCor @} @end example À la ligne @example \include "musique-Cor.ly" @end example @noindent sera substitué le contenu du fichier @file{musique-Cor.ly}, et de ce fait la variable @code{notesCor} se trouvera définie. La commande @code{\transpose@tie{}f@tie{}c'} indique que son argument @code{\notesCor} sera transposé à la quinte supérieure@tie{}: le son réel @code{f} s'écrit @code{c'}, ce qui est la caractéristique d'un Cor en fa. La transposition est visible comme suit@tie{}: @lilypond[quote,ragged-right] \transpose f c' \relative c { \time 2/4 r4 f8 a | cis4 f | e d | } @end lilypond Dans les pièces d'ensemble, il arrive souvent qu'une voix ne joue pas pendant plusieurs mesures. Un silence spécial, appelé silence multimesures, l'indique alors. On l'obtient par un @code{R} majuscule, suivi d'une durée@tie{}: @code{1}@tie{}pour une pause, @code{2}@tie{}pour une demi-pause, etc. Cette durée peut être multipliée pour établir de plus longs silences. Par exemple, le silence suivant dure 3@tie{}mesures à 2/4. @example R2*3 @end example Dans une partie séparée, les silences multimesure sont compressés. Il faut pour cela définir la propriété @code{skipBars} à @qq{vrai}@tie{}: @example \set Score.skipBars = ##t @end example @noindent Cette commande assigne la valeur @qq{vrai} -- @emph{true} en anglais, et @code{#t} dans le langage Scheme -- à cette propriété dans le contexte @code{Score}. Si l'on ajoute dans la musique ci-dessus le silence multimesure et cette option, on obtient le résultat suivant@tie{}: @lilypond[quote,ragged-right] \transpose f c' \relative c { \time 2/4 \set Score.skipBars = ##t R2*3 | r4 f8 a | cis4 f | e d | } @end lilypond Le conducteur rassemble toute la musique. Si l'on suppose que l'autre voix de notre duo se trouve dans le fichier @file{musique-Basson.ly} en tant que variable @code{notesBasson}, on établira un conducteur avec @example \include "musique-Basson.ly" \include "musique-Cor.ly" << \new Staff \notesCor \new Staff \notesBasson >> @end example @noindent ce qui équivaut à @lilypond[quote,ragged-right] \relative c << \new Staff { \clef "treble" \time 2/4 R2*3 | r4 f8 a | cis4 f | e4 d | } \new Staff { \clef "bass" \time 2/4 r4 d,8 f | gis4 c | b4 bes | a8 e f4 | g4 d | gis4 f | } >> @end lilypond