@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- @c This file is part of lilypond-learning.tely @ignore Translation of GIT committish: 007d0b5b94c36f9d9e228309d5b0e6a67ae27ebc When revising a translation, copy the HEAD committish of the version that you are working on. See TRANSLATION for details. @end ignore @c \version "2.11.38" @c Translators: Valentin Villenave @c Translation checkers: Jean-Charles Malahieude, John Mandereau @node Fundamental concepts @chapter Fundamental concepts @menu * How LilyPond files work:: * Voices contain music:: * Contexts and engravers:: * Extending the templates:: @end menu @node How LilyPond files work @section How LilyPond 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{File structure}. @menu * Introduction to the LilyPond file structure:: * Score is a (single) compound musical expression:: * Nesting music expressions:: * On the un-nestedness of brackets and ties:: @end menu @node Introduction to the LilyPond file structure @subsection Introduction to the LilyPond file structure @c FIXME this subsection translation is very outdated @c but wait until it is in a stable state in English La plupart des exemples de ce manuel sont de courts fragments, par exemple @example c4 a b c @end example Comme vous le savez maintenant (du moins nous l'espèrons), ceci ne peut pas être traité en tant que tel. Il s'agit de formes abrégées des exemples complets ; pour pouvoir être traitées, ces formeulations doivent au moins être encadrées par des accolades : @example @{ c4 a b c @} @end example La plupart des exemples font aussi intervenir la commande @code{\relative}, suivie de @code{c'} ou @code{c''}. Elle n'est pas à proprement parler nécessaire pour le traitement des exemples, mais dans la plupart des cas le résultat sera vraiment déplorable si vous l'oubliez. @lilypond[quote,fragment,ragged-right,verbatim] \relative c'' { c4 a b c } @end lilypond C'est ici que nous passons aux choses sérieuses : le code LilyPond, sous cette forme, est en réalité un @emph{autre} raccourci. Même s'il est traité sans problème, et aboutit au bon résultat, c'est une forme abrégée de : @example \score @{ \relative c'' @{ c4 a b c @} @} @end example Un bloc @code{\score} doit commencer par une et une seule expression musicale. Rappelez-vous que cette expression peut être ce que vous voulez, d'une note toute seule à un gigantesque @example @{ \new GrandStaff << collez ici la partition complète de votre opéra de Wagner préféré >> @} @end example @noindent Dès lors que tout cela est entre accolades : @code{@{ ... @}}, c'est une et une seule expression musicale. Le bloc @code{\score} peut contenir d'autres éléments, tels que @example \score @{ @{ c'4 a b c' @} \layout @{ @} \midi @{ @} \header @{ @} @} @end example @noindent Certains préfèrent mettre ces commandes en dehors du bloc @code{\score} --- par exemple, on met souvent le @code{\header} au-dessus. C'est juste là une autre forme abrégée que LilyPond accepte. @cindex variables @cindex identificateurs Un autre raccourci pratique est la possibilité de définir des variables --- également appelées @qq{identificateurs}. Dans tous les modèles, vous trouverez : @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 tiret, ni caractère accentué.} ; ce peut être @code{melodie}, @code{global}, @code{maindroitepiano}, ou @code{laTeteAToto}. Pour plus de détails, voir @ruser{Saving typing with identifiers and functions}. Pour une description complète du format des fichiers d'entrée, voir @ruser{File structure}. @node Score is a (single) compound musical expression @subsection Score is a (single) compound musical expression Dans la section précédente, nous avons vu l'organisation générale des fichiers d'entrée de LilyPond. Mais c'est comme si nous avions éludé la question essentielle : comment diable peut-on savoir quoi mettre après @code{\score} ? En fait, nous ne l'avons pas éludée du tout : le grand mystère est tout simplement qu'il n'y a @emph{pas} de mystère. Allez, expliquons-le en une ligne : @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 @ruser{Music expressions explained}, 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. @example \score @{ @{ % cette accolade marque le début de l'expression musicale \new GrandStaff << insérez ici votre opéra de Wagner préféré >> @} % cette accolade marque la fin de l'expression musicale \layout @{ @} @} @end example Un opéra de Wagner multiplierait facilement la longueur de ce manuel par deux ou trois, alors faisons-le en version chant/piano. On n'a plus besoin d'une partition d'orchestre --- @code{GrandStaff} --- donc laissons cela de côté. Par contre, un chanteur et un piano @emph{pourraient} nous être utiles. @example \score @{ @{ << \new Staff = "chanteur" << >> \new PianoStaff = piano << >> >> @} \layout @{ @} @} @end example Vous vous souvenez que nous avons recours à @code{<<} et @code{>>} pour mettre en place des musiques simultanées. Et, pour le coup, on aimerait @emph{vraiment} que la partie vocale et l'accompagnement soient imprimés ensemble... @example \score @{ @{ << \new Staff = "chanteur" << \new Voice = "chant" @{ @} >> \new Lyrics \lyricsto chant \new Lyrics @{ @} \new PianoStaff = "piano" << \new Staff = "mainDroite" @{ @} \new Staff = "mainGauche" @{ @} >> >> @} \layout @{ @} @} @end example 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. Nous avons également une partie de piano, qui contient deux portées : une pour la main droite, une autre pour la main gauche. À ce point, on pourrait commencer à ajouter les notes. Dans les accolades qui suivent @code{\new Voice = chant}, on pourrait commencer à écrire @example \relative c'' @{ a4 b c d @} @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 : @example melodie = @{ @} texte = @{ @} mainDroite = @{ @} mainGauche = @{ @} \score @{ @{ << \new Staff = "chanteur" << \new Voice = "chant" @{ \melodie @} >> \new Lyrics \lyricsto chant \new Lyrics @{ \texte @} \new PianoStaff = "piano" << \new Staff = "mainDroite" @{ \mainDroite @} \new Staff = "mainGauche" @{ \mainGauche @} >> >> @} \layout @{ @} @} @end example @noindent Souvenez-vous que vous pouvez donner aux variables le nom que vous voulez, à condition de respecter les caractères autorisés. Ces limitations sont décrites dans @ruser{File structure}. 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 : assurez-vous que chaque élément d'un même niveau a le même décalage horizontal dans votre éditeur de texte ! @node Nesting music expressions @subsection Nesting music expressions UNTRANSLATED NODE: IGNORE ME @node On the un-nestedness of brackets and ties @subsection On the un-nestedness of brackets and ties UNTRANSLATED NODE: IGNORE ME @node Voices contain music @section Voices contain music UNTRANSLATED NODE: IGNORE ME @menu * I'm hearing Voices:: * Explicitly instantiating voices:: * Voices and vocals:: @end menu @node I'm hearing Voices @subsection I'm hearing Voices UNTRANSLATED NODE: IGNORE ME @node Explicitly instantiating voices @subsection Explicitly instantiating voices Les contextes @internalsref{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. En particulier, @example << \upper \\ \lower >> @end example @noindent équivaut à @example << \new Voice = "1" @{ \voiceOne \upper @} \new Voice = "2" @{ \voiceTwo \lower @} >> @end example Les commandes @code{\voiceXXX} fixent la direction des hampes, des liaisons de prolongations et de phrasé, des articulations, des annotations, des points d'augmentation des notes pointées et des doigtés. @code{\voiceOne} et @code{\voiceThree} font pointer ces objets vers le haut, alors que @code{\voiceTwo} et @code{\voiceFour} les font pointer vers le bas. La commande @code{\oneVoice} les ramène aux critères normaux. Une expression séquentielle qui apparaît en premier dans un @code{<< >>} appartient à la voix principale. Ceci est utile lorsque des voix supplémentaires apparaissent pendant que la voix principale est jouée. Voici une meilleure réalisation de l'exemple de la section précédente. Les notes colorées et en croix mettent en évidence le fait que la mélodie principale est maintenant dans un seul contexte de voix. @lilypond[quote,ragged-right,verbatim] \new Staff \relative c' { \override NoteHead #'style = #'cross \override NoteHead #'color = #red c16 d e f \voiceOne << { g4 f e | d2 e2 } \new Voice="1" { \voiceTwo r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 \oneVoice } \new Voice { \voiceThree s2. | s4 b4 c2 \oneVoice } >> \oneVoice } @end lilypond La définition correcte des voix permet à la mélodie d'être liée. @lilypond[quote,ragged-right,verbatim] \new Staff \relative c' { c16^( d e f \voiceOne << { g4 f e | d2 e2) } \context Voice="1" { \voiceTwo r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 \oneVoice } \new Voice { \voiceThree s2. s4 b4 c2 \oneVoice } >> \oneVoice } @end lilypond Le fait d'éviter le séparateur @code{\\} permet aussi d'imbriquer des constructions polyphoniques, ce qui peut être une manière plus naturelle de saisir la musique. @lilypond[quote,ragged-right,verbatim] \new Staff \relative c' { c16^( d e f \voiceOne << { g4 f e | d2 e2) } \context Voice="1" { \voiceTwo r8 e4 d c8 ~ | << {c8 b16 a b8 g ~ g2} \new Voice { \voiceThree s4 b4 c2 \oneVoice } >> \oneVoice } >> \oneVoice } @end lilypond Dans certaines circonstances de polyphonie complexe, vous pourrez être amené à recourir à des voix supplémentaires afin d'éviter des collisions de notes. Ces voix additionnelles s'ajoutent en définissant un identificateur, comme le montre l'exemple suivant : @lilypond[quote,verbatim,ragged-right,relative=2] voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice) \relative c''' << { \voiceOne g4 ~ \stemDown g32[ f( es d c b a b64 )g] } \\ { \voiceThree b4} \\ { \voiceFive d,} \\ { \voiceTwo g,} >> @end lilypond @node Voices and vocals @subsection Voices and vocals UNTRANSLATED NODE: IGNORE ME @node Contexts and engravers @section Contexts and engravers Nous avons évoqué rapidement les contextes et graveurs dans les sections précédentes ; examinons en détail ces concepts essentiels dans la maîtrise de LilyPond. @menu * Contexts explained:: * Creating contexts:: * Engravers explained:: * Modifying context properties:: * Adding and removing engravers:: @end menu @node Contexts explained @subsection Contexts explained Imprimer de la musique impose d'ajouter un certain nombre d'éléments de notation. Par exemple, voici un fragment de partition, précédé du code qui l'engendre : @lilypond[quote,verbatim,relative=2,fragment] cis4 cis2. g4 @end lilypond Si le code est assez austère, dans la parition ont été ajoutés un chiffre de mesure, des barres de mesure, des altérations et une clé. Pour une bonne raison : LilyPond @emph{interprète} le code. Il le compulse dans l'ordre chronologique, de même qu'on lit une partition de gauche à droite ; et pendant ce traitement, le logiciel garde en mémoire les limites des mesures, ou encore quelles hauteurs de notes demandent des altérations accidentelles. Ces informations se présentent à plusieurs niveaux : ainsi, une altération n'a d'effet que sur une seule portée, tandis qu'une barre de mesure doit être synchronisée sur toute l'étendue verticale de la partition. LilyPond regroupe ces règles et ces fragments d'information dans des @emph{Contextes}. Certains contextes sont les voix (contexte @context{Voice}), les portées (contexte @context{Staff}), ou la partition dans son ensemble (contexte @context{Score}). Ils sont ordonnés hiérarchiquement : ainsi un contexte @context{Staff} peut contenir plusieurs contextes @context{Voice}, et un contexte @context{Score} peut contenir plusieurs contextes @context{Staff}. @quotation @image{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 @context{Voice} peut faire intervenir une altération accidentelle, puis le contexte @context{Staff} devra déterminer si cette dernière devra être imprimée ou non dans la suite de la mesure. Les barres de mesure, enfin, sont alignées verticalement grâce au contexte @context{Score}. En revanche, dans une musique polymétrique, par exemple mélant une portée à 3/4 et une autre à 4/4, les barres de mesures n'ont plus à être alignées : il faut alors modifier les comportement par défaut des contextes @context{Score} et @context{Staff}. Dans une partition très simple, les contextes sont créés implicitement, et peuvent être ignorés. Mais lorsqu'il s'agit de morceaux plus amples -- entendons par là tout ce qui s'écrit sur plus d'une portée -- il faut les créer explicitement pour être sûr d'obtenir toutes les portées nécessaires, et dans le bon ordre. Enfin pour des morceaux impliquant une notation spéciale, modifier les contextes ou en créer de nouveaux devient extrêment utile. Une description exhaustive de tous les contextes disponibles peut être trouvée dans la référence du programme : voir @ifhtml @internalsref{Contexts}. @end ifhtml @ifnothtml Translation @expansion{} Context. @end ifnothtml @c [TODO: describe propagation] @node Creating contexts @subsection Creating contexts Dans une partition contenant une seule voix sur une seule portée, les contextes sont automatiquement créés. Dans une partition plus complexe, il faut les crééer à la main. Trois commandes le permettent : @itemize @bullet @item La plus facile, et la plus rapide à saisir, est @code{\new} -- @qq{nouveau} en français. Elle introduit une expression musicale, comme suit : @funindex \new @cindex nouveaux contextes @cindex Contextes, création de @example \new @var{Contexte} @var{expression musicale} @end example @noindent le choix du @var{Contexte} pouvant être, par exemple, @code{Staff} ou @code{Voice}. Cette commande crée un contexte, puis interprète l'@var{expression musicale} dans ledit contexte. En pratique, la commande @code{\new} peut servir dans une partition comprenant plusieurs portées. Comme chaque partie doit se trouver sur sa propre portée, il faut la faire précéder de @code{\new Staff}. @lilypond[quote,verbatim,relative=2,ragged-right,fragment] << \new Staff { c4 c } \new Staff { d4 d } >> @end lilypond La commande @code{\new} peut aussi permettre de nommer le contexte créé : @example \new @var{Contexte} = @var{"inventezUnNom"} @var{musique} @end example Le nom que vous choisirez ne pourra être attribué que si aucun autre contexte n'a été créé précédemment avec le même nom. @funindex \context @item Tout comme @code{\new}, la commande @code{\context} envoie une expression musicale vers un contexte donné, mais attribue nécessairement un nom à ce contexte. La syntaxe est la suivante : @example \context @var{Contexte} = @var{unNom} @var{musique} @end example Cette commande va partir à la recherche d'un contexte déjà existant, de type @var{Contexte}, et portant le nom @var{unNom}. Ce qui peut être fort utile pour se référer à un contexte existant. S'il s'avère que le contexte en question n'existe pas encore, il est créé. Dans le cas de musique vocale avec des paroles, cela donne : @example \context Voice = "@b{tenor}" @var{musique} @end example @noindent et (pour que le texte soit aligné correctement avec les notes) : @example \new Lyrics \lyricsto "@b{tenor}" @var{paroles} @end example @noindent Une autre utilité de dénommer les contextes est de superposer en un même contexte différentes expressions musicales. Dans l'exemple suivant, les notes et les ponctuations ont été saisies séparément : @example musique = @{ c4 c4 @} ponctuation = @{ s4-. s4-> @} @end example En les envoyant toutes deux dans le même contexte @context{Voice}, on les combine : @example << \new Staff \context Voice = "A" \musique \context Voice = "A" \ponctuation >> @end example @lilypond[quote,ragged-right] music = { c4 c4 } arts = { s4-. s4-> } \relative c'' << \new Staff \context Voice = "A" \music \context Voice = "A" \arts >> @end lilypond De cette façon, il est possible d'élaborer une édition Urtext (c'est-à-dire originale, la plupart du temps sans ponctuations), en laissant la possibilité d'ajouter différentes ponctuations sur les mêmes notes. @cindex crééer des contextes @item La dernière commande pour créer des contextes est @example \context @var{Contexte} @var{musique} @end example @noindent Elle ressemble à l'emploi de @code{\context} avec @code{= @var{unNom}}, mais cette fois elle se considèrera chez elle partout où elle trouvera un contexte de type @var{Contexte}, quel que puisse être son nom. @c Au secours ! --vv Cette variante sert à des expressions musicales qui peuvent être interprétées à plusieurs niveaux. Par exemple, une commande telle que @code{\applyOutput} (voir @c FIXME: broken link @c @ref{Running a function on all layout objects}) : si elle n'est pas associée avec @code{\context}, elle s'applique par défaut dans le contexte @context{Voice}. @example \applyOutput #'@var{Contexte} #@var{fonction} % s'applique dans le contexte Voice @end example Pour l'appliquer au contexte @context{Score} ou @context{Staff}, il faut utiliser : @example \applyOutput #'Score #@var{fonction} \applyOutput #'Staff #@var{fonction} @end example @end itemize @node Engravers explained @subsection Engravers explained UNTRANSLATED NODE: IGNORE ME @node Modifying context properties @subsection Modifying context properties UNTRANSLATED NODE: IGNORE ME @node Adding and removing engravers @subsection Adding and removing engravers UNTRANSLATED NODE: IGNORE ME @node Extending the templates @section Extending the templates Bon, vous avez lu le tutoriel, vous savez écrire de la musique. Mais comment obtenir les portées que vous voulez ? Les @ref{Templates}, c'est bien beau, mais que faire quand ils ne traitent pas ce que l'on veut précisément ? Les exemples qui suivent vous donneront des méthodes générales pour adapter des modèles. @menu * Soprano and cello:: * Four-part SATB vocal score:: * Building a score from scratch:: @end menu @node Soprano and cello @subsection Soprano and cello Commencez par le modèle qui vous semblera le plus proche de ce à quoi vous voulez aboutir. Disons par exemple que vous voulez écrire une pièce pour soprano et violoncelle : dans ce cas l'on pourrait commencer par les @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 @{ Laaa Siii Dooo Rééé @} \score@{ << \new Voice = "voixUn" @{ \autoBeamOff \melodie @} \new Lyrics \lyricsto "voixUn" \texte >> \layout @{ @} \midi @{ @} @} @end example Maintenant, on veut ajouter une partie de violoncelle. Jetons un coup d'oeil sur l'exemple avec les notes seules : @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 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 ; 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 ; il nous faut donc les renommer. Appelons la section pour la soprano @code{musiqueSoprano} et celle pour le violoncelle @code{musiqueVioloncelle}. Tant qu'on y est, renommons @code{texte} en @code{parolesSoprano}. Attention à bien renommer les deux occurrences de chacune de ces dénominations : c'est-à-dire la définition de départ, où l'on trouve @code{mélodie = relative c' @{ }, 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{}"} musiqueSoprano = \relative c' @{ \clef treble \key c \major \time 4/4 a4 b c d @} parolesSoprano = \lyricmode @{ Laaa Siii Dooo Rééé @} musiqueVioloncelle = \relative c @{ \clef bass \key c \major \time 4/4 d4 g fis8 e d4 @} \score@{ << \new Voice = "voixUn" @{ \autoBeamOff \musiqueSoprano @} \new Lyrics \lyricsto "voixUn" \parolesSoprano >> \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 : @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 à @example \score@{ << << \new Voice = "voixUn" @{ \autoBeamOff \musiqueSoprano @} \new Lyrics \lyricsto "voixUn" \parolesSoprano >> \new Staff \musiqueVioloncelle >> \layout @{ @} \midi @{ @} @} @end example @noindent C'est un peu le bazar dans tout ça ; mais il vous sera facile de mettre un peu d'ordre dans l'indentation. Voici le modèle pour soprano et violoncelle au complet : @lilypond[quote,verbatim,ragged-right] \version "2.11.38" 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 @node Four-part SATB vocal score @subsection Four-part SATB vocal score UNTRANSLATED NODE: IGNORE ME @node Building a score from scratch @subsection Building a score from scratch UNTRANSLATED NODE: IGNORE ME