X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Ffr%2Fnotation%2Finput.itely;h=9cf94f6a23ff49522ef51a700b9720fc950f9b77;hb=a066a93ee74edebb9d238a1bac93c3bc7e8e6e4a;hp=c78e8154f7fc8001c2fe556c259cae850204f6c4;hpb=3d8089a42af6304edb8dad56220e845c84832bb2;p=lilypond.git diff --git a/Documentation/fr/notation/input.itely b/Documentation/fr/notation/input.itely index c78e8154f7..9cf94f6a23 100644 --- a/Documentation/fr/notation/input.itely +++ b/Documentation/fr/notation/input.itely @@ -1,294 +1,2344 @@ @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- @ignore - Translation of GIT committish: d9b4bfc69674eb4ed7b8c6eaa0b646f00eae6c8d + Translation of GIT committish: d0c96d3f0b1dca7df98ef5586059965dd46ab16f When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. + version that you are working on. For details, see the Contributors' + Guide, node Updating translation committishes.. @end ignore -@c \version "2.12.0" +@c \version "2.14.0" @c Translators: Jean-Charles Malahieude, Valentin Villenave -@node General input and output -@chapter General input and output +@node Généralités en matière d'entrée et sortie +@chapter Généralités en matière d'entrée et sortie +@translationof General input and output -@untranslated +Nous n'allons pas, dans ce chapitre, parler directement de notation, +mais plutôt du contenu des fichiers source et du résultat produit par +LilyPond. @menu -* Input structure:: -* Titles and headers:: -* Working with input files:: -* Controlling output:: -* MIDI output:: +* Agencement du code:: +* Titres et entêtes:: +* Travail sur des fichiers texte:: +* Contrôle des sorties:: +* Sortie MIDI:: +* Extraction d'information musicale:: @end menu -@node Input structure -@section Input structure +@node Agencement du code +@section Agencement du code +@translationof Input structure -@untranslated +LilyPond traite des fichiers textuels. Ces fichiers portent par +convention une extension @code{.ly}. +@menu +* Structure d'une partition:: +* Plusieurs partitions dans un même ouvrage:: +* Plusieurs éditions pour une même source:: +* Nom des fichiers de sortie:: +* Structure de fichier:: +@end menu + + +@node Structure d'une partition +@subsection Structure d'une partition +@translationof Structure of a score + +@funindex \score + +Un bloc @code{\score} contient obligatoirement une seule expression +musicale délimitée par des accolades@tie{}: + +@example +\score @{ +... +@} +@end example + +@warning{Il ne doit y avoir qu'@strong{une seule} expression musicale +globale dans un bloc @code{@bs{}score}, et elle @strong{doit} être +bornée par une paire d'accolades.} + +Cette unique expression musicale peut être de n'importe quelle taille et +contenir d'autres expressions musicales aussi complexes soient elles. +Voici quelques exemples d'expression musicale@tie{}: + +@example +@{ c'4 c' c' c' @} +@end example + +@lilypond[verbatim,quote] +{ + { c'4 c' c' c' } + { d'4 d' d' d' } +} +@end lilypond + +@lilypond[verbatim,quote] +<< + \new Staff { c'4 c' c' c' } + \new Staff { d'4 d' d' d' } +>> +@end lilypond + +@example +@{ + \new GrandStaff << + \new StaffGroup << + \new Staff @{ \flute @} + \new Staff @{ \hautbois @} + >> + \new StaffGroup << + \new Staff @{ \violonI @} + \new Staff @{ \violonII @} + >> + >> +@} +@end example + +Les commentaires constituent l'une des rares exceptions à cette règle +immuable -- voir @ref{Structure de fichier} pour les autres. Qu'il +s'agisse d'une seule ligne ou de tout un bloc -- délimité par @code{%@{ +.. %@}} -- un commentaire peut se placer n'importe où dans le fichier +source, aussi bien à l'intérieur qu'à l'extérieur du bloc @code{\score}, +ou encore à l'intérieur ou à l'extérieur de l'expression musicale +contenue dans un bloc @code{\score}. + +Lorsqu'un fichier ne comprend qu'un bloc @code{\score}, celui-ci est +implicitement inclus dans un bloc @code{\book}. Le bloc @code{\book} +d'un fichier source permet la production d'au moins un fichier dont le +nom sera, par défaut, déduit du fichier source@tie{}: le traitement de +@file{fandangopourelephants.ly} produira donc +@file{fandangopourelephants.pdf}. + +Pour de plus amples informations à propos du bloc @code{\book}, lisez +@ref{Plusieurs partitions dans un même ouvrage}, +@ref{Plusieurs éditions pour une même source} et +@ref{Structure de fichier}. + +@seealso +Manuel d'initiation : +@rlearning{Travail sur les fichiers d'entrée}, +@rlearning{Les expressions musicales en clair}, +@rlearning{La partition est une (unique) expression musicale composée}. + + +@node Plusieurs partitions dans un même ouvrage +@subsection Plusieurs partitions dans un même ouvrage +@translationof Multiple scores in a book + +@cindex mouvements, plusieurs +@cindex plusieurs mouvements + +@funindex \book + +Un ouvrage peut se composer de plusieurs morceaux et de texte. C'est le +cas des cahiers d'exercices ou d'une partie d'orchestre avec ses +différents mouvements. Chaque mouvement fait l'objet d'un bloc +@code{\score}, + +@example +\score @{ + @var{..musique..} +@} +@end example + +et le texte est contenu dans un bloc @code{\markup}, + +@example +\markup @{ + @var{..texte..} +@} +@end example + +@funindex \book + +Les différents mouvements et textes qui apparaissent dans un même +fichier @file{.ly} ne composeront en principe qu'un seul fichier +résultant. + +@example +\score @{ + @var{..} +@} +\markup @{ + @var{..} +@} +\score @{ + @var{..} +@} +@end example + +Attention cependant si vous travaillez avec lilypond-book@tie{}: il vous +faudra explicitement mentionner le bloc @code{\book}, en l'absence de +quoi seul le premier @code{\score} ou @code{\markup} apparaîtra après +traitement. + +L'entête de chaque pièce peut se placer au sein du bloc +@code{\score}@tie{}; le contenu du champ @code{piece} viendra s'imprimer +avant chaque mouvement. De même, le titre de l'ouvrage peut se placer +au sein du bloc @code{\book}. Dans le cas contraire, le contenu du bloc +@code{\header} placé en début de fichier sera utilisé. + +@example +\header @{ + title = "Huit miniatures" + composer = "Igor Stravinsky" +@} +\score @{ + @dots{} + \header @{ piece = "Romance" @} +@} +\markup @{ + ..texte du second couplet.. +@} +\markup @{ + ..texte du troisième couplet.. +@} +\score @{ + @dots{} + \header @{ piece = "Menuet" @} +@} +@end example + +@funindex \bookpart + +Plusieurs pièces seront regroupées dans un même @qq{chapitre} à l'aide +d'un bloc @code{\bookpart}. Ces différents @qq{chapitres} sont séparés +par un saut de page et peuvent comporter un titre à l'instar de +l'ouvrage dès lors que vous y insérez un bloc @code{\header}. + +@example +\bookpart @{ + \header @{ + title = "Titre de l'ouvrage" + subtitle = "Première partie" + @} + \score @{ @dots{} @} + @dots{} +@} +\bookpart @{ + \header @{ + subtitle = "Deuxième partie" + @} + \score @{ @dots{} @} + @dots{} +@} +@end example + + +@node Plusieurs éditions pour une même source +@subsection Plusieurs éditions pour une même source +@translationof Multiple output files from one input file + +Dès lors que vous inscrivez plusieurs blocs @code{\book} dans un même +fichier @file{.ly}, chacun d'eux donnera lieu à un résultat indépendant. +Lorsqu'aucun bloc @code{\book} n'est spécifié dans le fichier source, +LilyPond considère que l'intégralité du fichier constitue un bloc +@code{\book} unique, comme indiqué à la rubrique +@ref{Structure de fichier}. + +LilyPond fait en sorte, lorsque plusieurs fichiers sont produits à +partir d'une même source, qu'aucun résultat d'un bloc @code{\book} +n'écrase celui qui a été généré pour un bloc @code{\book} précédent. + +Dans les faits, et si le nom du fichier produit est repris de sa source +-- comportement par défaut --, un suffixe lui sera ajouté pour chaque +@code{\book}. Il s'agit en principe d'un pseudo numéro de version. +Ainsi, le fichier @file{huitminiatures.ly} qui contiendrait + +@example +\book @{ + \score @{ @dots{} @} + \layout @{ @dots{} @} +@} +\book @{ + \score @{ @dots{} @} + \layout @{ @dots{} @} +@} +\book @{ + \score @{ @dots{} @} + \layout @{ @dots{} @} +@} +@end example + +génèrera + +@itemize +@item +@file{huitminiatures.pdf}, +@item +@file{huitminiatures-1.pdf} et +@item +@file{huitminiatures-2.pdf}. +@end itemize + + +@node Nom des fichiers de sortie +@subsection Nom des fichiers de sortie +@translationof Output file names + +LilyPond vous permet de prendre le contrôle dans la dénomination des +fichiers que vous voulez générer, quel que soit le moteur de rendu +utilisé. + +Nous avons vu dans la rubrique précédente que LilyPond évite les +conflits de nom des fichiers qu'il génère à partir d'une même source. +Vous pouvez même définir vous-même le suffixe qui sera appliqué à chacun +des blocs @code{\book}. Ainsi, en reprenant l'exemple ci-avant, vous +obtiendrez les fichiers @file{huitminiatures-Romance.pdf}, +@file{huitminiatures-Menuet.pdf} et @file{huitminiatures-Nocturne.pdf} +en ajoutant simplement une déclaration @code{\bookOutputSuffix} au sein +de chaque bloc @code{\book}. + +@example +\book @{ + \bookOutputSuffix "Romance" + \score @{ @dots{} @} + \layout @{ @dots{} @} +@} +\book @{ + \bookOutputSuffix "Menuet" + \score @{ @dots{} @} + \layout @{ @dots{} @} +@} +\book @{ + \bookOutputSuffix "Nocturne" + \score @{ @dots{} @} + \layout @{ @dots{} @} +@} +@end example + +La déclaration @code{\bookOutputName} vous permet de définir vous-même +le nom du fichier généré pour un bloc @code{\book}@tie{}: + +@example +\book @{ + \bookOutputName "Romance" + \score @{ @dots{} @} + \layout @{ @dots{} @} +@} +\book @{ + \bookOutputName "Menuet" + \score @{ @dots{} @} + \layout @{ @dots{} @} +@} +\book @{ + \bookOutputName "Nocturne" + \score @{ @dots{} @} + \layout @{ @dots{} @} +@} +@end example + +Le traitement de ce fichier produira@tie{}: + +@itemize +@item +@file{Romance.pdf}, +@item +@file{Menuet.pdf} et +@item +@file{Nocturne.pdf}. +@end itemize + + +@node Structure de fichier +@subsection Structure de fichier +@translationof File structure + +@funindex \paper +@funindex \midi +@funindex \layout +@funindex \header +@funindex \score +@funindex \book +@funindex \bookpart + +Un fichier @code{.ly} peut contenir un certain nombre d'expression de +haut niveau. Les expressions de haut niveau sont les suivantes@tie{}: + +@itemize +@item +Une définition de sortie, comme @code{\paper}, @code{\midi} et +@code{\layout}. Ces définitions, lorsqu'elles se trouvent à un niveau +supérieur, s'appliqueront à l'intégralité de l'ouvrage. Si l'une de ces +expression apparaît à plusieurs reprises, la dernière aura préséance. + +@item +Une expression scheme pure, telle que +@w{@code{#(set-default-paper-size@tie{}"a7"@tie{}'landscape)}} ou +@w{@code{#(ly:set-option@tie{}'point-and-click@tie{}#f)}}. + +@item +Un bloc @code{\header}, dont le contenu sera de portée globale -- ce qui +est le cas en général pour le titre ou l'auteur entre autres. + +@item +Un bloc @code{\score} pour la partition. Cette partition sera assemblée +avec les autres partitions se trouvant au même niveau pour composer le +@code{\book}. Vous pouvez modifier ce comportement à l'aide de la +variable @code{toplevel-score-handler} placée en tête. +@ignore +@c FIXME - I cannot read "toplevel-score-handler" in scm/lily.scm -jcm +The default handler is defined in the init file @file{../scm/lily.scm}. +@end ignore + +@item +Un bloc @code{\book} permet de regrouper naturellement plusieurs +mouvements -- autrement dit plusieurs blocs @code{\score} -- dans un +même document. Lorsqu'il y a plusieurs @code{\score}s, LilyPond génère +un seul fichier dans lequel les mouvements sont mis les uns à la suite +des autres, ce pour chacun des blocs @code{\book} rencontrés. La seule +raison qui peut vous demander d'expliciter plusieurs blocs @code{\book} +dans un fichier @file{.ly} est lorsque vous avez besoin de générer +différents documents à partir d'une même source. La présence explicite +d'un bloc @code{\book} est aussi nécessaire lorsque vous travaillez sur +un document lilypond-book qui reprendrait plusieurs @code{\score}s ou +@code{\markup}s dans un même extrait. Vous pouvez modifier ce +comportement à l'aide de la variable @code{toplevel-book-handler} +placée en tête. +@ignore +@c FIXME - I cannot read "toplevel-book-handler" in scm/lily.scm -jcm +The default handler is defined in the init file @file{../scm/lily.scm}. +@end ignore + +@item +Un bloc @code{\bookpart}. Un ouvrage peut se découper en plusieurs +parties à l'aide de blocs @code{\bookpart}, aussi bien pour alléger le +travail de l'algorithme de calcul des sauts de page, que si les réglages +du bloc @code{\paper} diffèrent d'une partie à l'autre. + +@item +Une expression musicale telle que +@example +@{ c'4 d' e'2 @} +@end example + +Ce bout de code sera placé dans un @code{\score} et intégré à l'ouvrage +en même temps que tous les autres @code{\score}s ou expressions +musicales. En d'autres termes, un fichier qui ne contiendrait que cette +simple expression musicale sera traduit en + +@example +\book @{ + \score @{ + \new Staff @{ + \new Voice @{ + @{ c'4 d' e'2 @} + @} + @} + @} + \layout @{ @} + \header @{ @} +@} +@end example + +Vous pouvez modifier ce comportement à l'aide de la variable +@code{toplevel-music-handler} placée en tête. +@ignore +@c FIXME - I cannot read "toplevel-music-handler" in scm/lily.scm -jcm +The default handler is defined in the init file @file{../scm/lily.scm}. +@end ignore + +@item +Du texte sous forme de @emph{markup} comme les paroles d'un couplet +@example +\markup @{ + 2. Le première ligne du deuxième couplet. +@} +@end example + +De tels @emph{markups} seront imprimés là où ils apparaissent, +avant, après ou entre les expressions musicales. + +@cindex variables +@cindex identificateurs + +@item +Une variable, ou identificateur, telle que +@example +toto = @{ c4 d e d @} +@end example + +Vous pourrez la réutiliser plus loin dans votre fichier en saisissant +simplement @code{\toto}. Le nom des indentificateurs ne doit être +formés que de caractères alphabétiques -- sans chiffre ni caractère +souligné ou tiret. + +@end itemize + +Voici trois éléments que vous pouvez placer à un niveau supérieur@tie{}: + +@example +\layout @{ + % pas en pleine largeur + ragged-right = ##t +@} + +\header @{ + title = "Do-re-mi" +@} + +@{ c'4 d' e2 @} +@end example + +Vous pouvez placer, n'importe où dans votre fichier, les instruction +suivantes@tie{}: + +@itemize +@item @code{\version} +@item @code{\include} +@item @code{\sourcefilename} +@item @code{\sourcefileline} +@item +Une ligne de commentaire, introduite par le signe @code{%}. + +@item +Un bloc de commentaire, délimité par @code{%@{ .. %@}}. + +@end itemize + +@cindex espace +@cindex blanc + +Vous pouvez insérer des espaces dans votre fichier source afin de lui +apporter une meilleure lisibilité. Les espaces superflus sont +normalement ignorés. Notez cependant qu'il est des cas où l'espace est +requis pour éviter tout risque d'erreur@tie{}: + +@itemize +@item +Autour d'une accolade, qu'elle soit ouvrant ou fermante ; + +@item +Après chaque commande ou variable, autrement dit tout élément qui +commence par un @code{\}@tie{}; + +@item +Après tout élément qui sera interprété comme une expression Scheme, +autrement dit tout élément qui commence par un @code{#}@tie{}; + +@item +Pour séparer les éléments d'une expression Scheme ; + +@item +En mode parole -- @code{lyricmode} -- pour séparer les termes des +commandes @code{\override} et @code{\set}. Précisons à ce sujet qu'en +plus d'ajouter une espace avant et après l'intégralité de la commande, +vous devrez encadrer d'espaces le point et le signe égal qu'elle peut +contenir, comme dans +@w{@code{\override Score . LyricText #'font-size = #5}}. + +@end itemize + + +@seealso +Manuel d'initiation : +@rlearning{Organisation des fichiers LilyPond}. + + +@node Titres et entêtes +@section Titres et entêtes +@translationof Titles and headers + +La plupart de la musique qui est éditée comporte un titre et le nom de +son compositeur@tie{}; certains ouvrages divulguent beaucoup plus +d'information. + +@menu +* Création de titres et entête ou pied de page:: +* Titrages personnalisés:: +* Référencement des numéros de page:: +* Table des matières:: +@end menu + + +@node Création de titres et entête ou pied de page +@subsection Création de titres et entête ou pied de page +@translationof Creating titles headers and footers + +@menu +* Contenu des blocs de titrage:: +* Mise en forme par défaut des titrages:: +* Mise en forme par défaut des entête et pied de page:: +@end menu + + +@node Contenu des blocs de titrage +@unnumberedsubsubsec Contenu des blocs de titrage +@translationof Title blocks explained + +@c TODO: figure out how \bookpart titles work + +Il existe en fait deux types de blocs de titrage@tie{}: un bloc pour +contenir le titre principal qui doit apparaître avant le tout premier +@code{\score} d'un ouvrage, et un autre attaché à chacun des blocs +@code{\score} qui le composent. Dans les deux cas, les champs qui +composent un bloc de titrage se saisissent dans un bloc @code{\header}. + +Lorsque l'ouvrage ne comporte qu'un seul morceau, le bloc @code{\header} +peut se placer en dehors ou au sein même du bloc @code{\score}. + +Dans le cas où le bloc @code{\header} est défini à l'intérieur du bloc +@code{\score}, seuls les champs @code{piece} et @code{opus} seront +imprimés. + +@lilypond[papersize=a5,quote,verbatim,noragged-right] +\score { + { c'4 } + \header { + title = "title" % not printed + piece = "piece" + opus = "opus" + } +} +@end lilypond + +@funindex print-all-headers +@noindent +Vous pouvez modifer ce comportement et imprimer tous les champs d'un +bloc @code{\header} défini dans un bloc @code{\score} en ajoutant + +@example +\paper@{ + print-all-headers = ##t +@} +@end example + +@warning{N'oubliez pas que lorsqu'il est placé à l'intérieur d'un bloc +@code{@bs{}score}, le bloc @code{@bs{}header} doit impérativement se +trouver @strong{à la suite} de l'expression musicale.} + +@lilypond[papersize=a5,quote,verbatim,noragged-right] +\header { + title = "SUITE I." + composer = "J. S. Bach." +} + +\score { + \new Staff \relative g, { + \clef bass + \key g \major + \repeat unfold 2 { g16( d' b') a b d, b' d, } | + \repeat unfold 2 { g,16( e' c') b c e, c' e, } | + } + \header { + piece = "Prélude." + } +} + +\score { + \new Staff \relative b { + \clef bass + \key g \major + \partial 16 b16 | + 4 b'16 a( g fis) g( d e fis) g( a b c) | + d16( b g fis) g( e d c) b(c d e) fis( g a b) | + } + \header { + piece = "Allemande." + } +} +@end lilypond + +Tous les champs appartenant au titrage principal d'un ouvrage peuvent se +reporter dans chaque bloc @code{\score} ou être supprimés +manuellement@tie{}: + +@c KEEP LY +@lilypond[papersize=a5,quote,verbatim,noragged-right] +\book { + \paper { + print-all-headers = ##t + } + \header { + title = "DAS WOHLTEMPERIRTE CLAVIER" + subtitle = "TEIL I" + % Pas de pied en dernière page pour ce livret + tagline = ##f + } + \markup { \vspace #1 } + \score { + \new PianoStaff << + \new Staff { s1 } + \new Staff { \clef "bass" s1 } + >> + \header { + title = "PRAELUDIUM I" + opus = "BWV 846" + % Pas de sous-titre pour ce morceau + subtitle = ##f + } + } + \score { + \new PianoStaff << + \new Staff { s1 } + \new Staff { \clef "bass" s1 } + >> + \header { + title = "FUGA I" + subsubtitle = "A 4 VOCI" + opus = "BWV 846" + % Pas de sous-titre pour ce morceau + subtitle = ##f + } + } +} +@end lilypond + +@seealso +Manuel de notation : +@ref{Structure de fichier}, +@ref{Mise en forme personnalisée des blocs de titrage}. + + +@node Mise en forme par défaut des titrages +@unnumberedsubsubsec Mise en forme par défaut des titrages +@translationof Default layout of book and score title blocks + +La mise en forme des blocs de titrage est contrôlée par deux variables +attachées au bloc @code{\paper}@tie{}: @code{bookTitleMarkup} pour le +bloc @code{\header} principal, et @code{scoreTitleMarkup} pour les blocs +@code{\header} relevant des blocs @code{\score}. + +@c KEEP LY +@lilypond[papersize=a6,quote,verbatim,noragged-right] +\header { + % Les champs suivants sont centrés + dedication = "Dédice" + title = "Titre" + subtitle = "Sous-titre" + subsubtitle = "Sous-sous-titre" + instrument = "Instrument" + + % Les champs suivants sont alignés sur le bord gauche + poet = "Librettiste" + meter = "Tempo" + + % Les champs suivants sont alignés sur le bord droit + composer = "Compositeur" + arranger = "Arrangeur" +} + +\score { + { s1 } + \header { + % Les champs suivants sont en opposition sur la même ligne + piece = "Pièce" + opus = "Opus" + } +} +@end lilypond + +@c Is the bit about \null markups true? -mp + +Les champs d'un bloc @code{\header} qui n'auront pas été alimentés +seront remplacés par un @emph{markup} @code{\null} de façon à ne pas +gaspiller d'espace. + +Par défaut, @code{scoreTitleMarkup} place les champs @code{piece} et +@code{opus} de part et d'autre sur une même ligne. + +@cindex breakbefore + +La variable @code{breakbefore} activée dans un bloc @code{\header} situé +dans un bloc @code{\score} force le saut de page avant le morceau +contenu dans ce @code{\score}. Vous pourrez ainsi séparer le titre +principal de la musique. + +@lilypond[papersize=a8landscape,verbatim,noragged-right] +\book { + \header { + title = "This is my Title" + subtitle = "This is my Subtitle" + copyright = "This is the bottom of the first page" + } + \score { + \repeat unfold 4 { e'' e'' e'' e'' } + \header { + piece = "This is the Music" + breakbefore = ##t + } + } +} +@end lilypond + +@seealso +Manuel d'initiation : +@rlearning{Organisation des fichiers LilyPond}. + +Manuel de notation : +@ref{Structure de fichier}. + +Fichiers d'initialisation : +@file{ly/titling-init.ly}. + + +@node Mise en forme par défaut des entête et pied de page +@unnumberedsubsubsec Mise en forme par défaut des entête et pied de page +@translationof Default layout of headers and footers + +Les entête et pied -- @emph{headers} et @emph{footers} -- sont des +lignes de textes qui apparaîssent en haut et en bas de chaque page, +indépendamment du texte de l'ouvrage. Ils sont contrôlés par les +variables suivantes, attachées au bloc @code{\paper}@tie{}: + +@itemize +@item @code{oddHeaderMarkup} -- entête de page impaire +@item @code{evenHeaderMarkup} -- entête de page paire +@item @code{oddFooterMarkup} -- pied de page impaire +@item @code{evenFooterMarkup} -- pied de page paire +@end itemize + +Ces variables @emph{markup} n'accèdent qu'au contenu des champs du bloc +@code{\header} principal, celui qui s'appliquera à tous les blocs +@code{\score} du document. Ces variables sont définies dans le fichier +@file{ly/titling-init.ly}, et sont par défaut@tie{}: + +@itemize + +@item +les numéros sont placés en haut à gauche (si pair) ou à droite (si +impair) de chaque page à compter de la deuxième@tie{}; + +@item +le contenu du champ @code{instrument} est centré en haut de chaque page +à compter de la deuxième@tie{}; + +@item +le texte du @code{copyright} est centré au bas de la première +page@tie{}; + +@item +le @code{tagline} -- mention spéciale -- se place au bas de la dernière +page, ou bien sous le @code{copyright} s'il n'y a qu'une seule page. + +@end itemize + +@lilypond[papersize=a8landscape] +\book { + \score { + \relative c' { + c4 d e f + } + } +} +@end lilypond + +La mention spéciale se modifie en alimentant le champ @code{tagline} au +niveau du bloc @code{\header} principal. + +@lilypond[papersize=a8landscape,verbatim] +\book { + \header { + tagline = "... music notation for Everyone" + } + \score { + \relative c' { + c4 d e f + } + } +} +@end lilypond + +Pour supprimer le @code{tagline}, il suffit de lui assigner la valeur +@code{##f}. + + +@node Titrages personnalisés +@subsection Titrages personnalisés +@translationof Custom headers footers and titles + +@c TODO: somewhere put a link to header spacing info +@c (you'll have to explain it more in NR 4). + +@menu +* Mise en forme personnalisée des champs de titrage:: +* Mise en forme personnalisée des blocs de titrage:: +* Mise en forme personnalisée des entête et pied de page:: +@end menu + + +@node Mise en forme personnalisée des champs de titrage +@unnumberedsubsubsec Mise en forme personnalisée des champs de titrage +@translationof Custom text formatting for title blocks + +Toutes les commandes de mise en forme d'un @code{\markup} permettent de +personnaliser le texte des entête, pied de page et éléments de titre +contenus dans un bloc @code{\header}. + +@lilypond[quote,verbatim,noragged-right] +\score { + { s1 } + \header { + piece = \markup { \fontsize #4 \bold "PRAELUDIUM I" } + opus = \markup { \italic "(Excerpt)" } + } +} +@end lilypond + +@seealso +Manuel de notation : +@ref{Mise en forme du texte}. + + +@node Mise en forme personnalisée des blocs de titrage +@unnumberedsubsubsec Mise en forme personnalisée des blocs de titrage +@translationof Custom layout for title blocks + +L'utilisation de commandes @code{\markup} au sein d'un bloc +@code{\header} permet de modifier aisément l'apparence du texte, +mais n'influence en rien le positionnement précis des éléments de +titrage. L'accès au positionnement des champs de titrage est géré par +les deux variables suivantes, attachées au bloc @code{\paper}@tie{}: + +@itemize +@item @code{bookTitleMarkup} +@item @code{scoreTitleMarkup} +@end itemize + +Ces variables sont abordées à la rubrique +@ref{Mise en forme par défaut des titrages}. + +Voici les réglages par défaut de @code{scoreTitleMarkup}, tels que +définis dans le fichier @file{ly/titling-init.ly}@tie{}: + +@example +scoreTitleMarkup = \markup @{ \column @{ + \on-the-fly #print-all-headers @{ \bookTitleMarkup \hspace #1 @} + \fill-line @{ + \fromproperty #'header:piece + \fromproperty #'header:opus + @} +@} +@} +@end example + +Ceci aura donc pour effet de positionner les champs @code{piece} et +@code{opus} sur la même ligne, en opposition@tie{}: + +@lilypond[quote,verbatim,noragged-right] +\score { + { s1 } + \header { + piece = "PRAELUDIUM I" + opus = "BWV 846" + } +} +@end lilypond + +Voici comment positionner le champ @code{piece}, dont nous modifions +la taille et la graisse, au centre de cette ligne@tie{}: + +@lilypond[papersize=a5,quote,verbatim,noragged-right] +\book { + \paper { + indent = 0\mm + scoreTitleMarkup = \markup { + \fill-line { + \null + \fontsize #4 \bold \fromproperty #'header:piece + \fromproperty #'header:opus + } + } + } + \header { tagline = ##f } + \score { + { s1 } + \header { + piece = "PRAELUDIUM I" + opus = "BWV 846" + } + } +} +@end lilypond + +Les champs normalement réservés au bloc de titrage principal seront +reportés au niveau au niveau inférieur dès lors que vous aurez activé +l'instruction @code{print-all-headers} au sein du bloc @code{\paper}. +Le principal inconvénient de cette fonction réside dans le fait que les +champs réservés au bloc @code{\header} principal devront être supprimés +dans chacun des blocs @code{\score} de votre fichier source -- voir +@ref{Contenu des blocs de titrage}. + +Afin d'éviter ce désagrément, ajoutez le champ que vous désirez voir +apparaître à la définition de @code{scoreTitleMarkup}. Nous allons, +dans l'exemple suivant, ajouter au @code{scoreTitleMarkup} le champ +@code{composer}, normalement associé au @code{bookTitleMarkup}@tie{}; +chaque @code{\score} pourra mentionner un compositeur différent. + +@lilypond[papersize=a5,quote,verbatim,noragged-right] +\book { + \paper { + indent = 0\mm + scoreTitleMarkup = \markup { + \fill-line { + \null + \fontsize #4 \bold \fromproperty #'header:piece + \fromproperty #'header:composer + } + } + } + \header { tagline = ##f } + \score { + { s1 } + \header { + piece = "MENUET" + composer = "Christian Petzold" + } + } + \score { + { s1 } + \header { + piece = "RONDEAU" + composer = "François Couperin" + } + } +} +@end lilypond + +Rien ne vous empêche de créer votre propre champ personnalisé, puis d'y +faire référence dans la définition du @emph{markup}. + +@lilypond[papersize=a5,quote,verbatim,noragged-right] +\book { + \paper { + indent = 0\mm + scoreTitleMarkup = \markup { + \fill-line { + \null + \override #`(direction . ,UP) { + \dir-column { + \center-align \fontsize #-1 \bold + \fromproperty #'header:mycustomtext %% User-defined field + \center-align \fontsize #4 \bold + \fromproperty #'header:piece + } + } + \fromproperty #'header:opus + } + } + } + \header { tagline = ##f } + \score { + { s1 } + \header { + piece = "FUGA I" + mycustomtext = "A 4 VOCI" %% User-defined field + opus = "BWV 846" + } + } +} +@end lilypond + +@seealso +Manuel de notation : +@ref{Contenu des blocs de titrage}. + + +@node Mise en forme personnalisée des entête et pied de page +@unnumberedsubsubsec Mise en forme personnalisée des entête et pied de page +@translationof Custom layout for headers and footers + +@c can make-header and make-footer be removed from +@c paper-defaults-init.ly? -mp + +L'utilisation de commandes @code{\markup} au sein d'un bloc +@code{\header} permet de modifier aisément l'apparence du texte, +mais n'influence en rien le positionnement précis des entête et pied +de page. L'accès au positionnement des champs concernés est géré par +les quatre variables suivantes, attachées au bloc @code{\paper}@tie{}: + +@itemize +@item @code{oddHeaderMarkup} +@item @code{evenHeaderMarkup} +@item @code{oddFooterMarkup} +@item @code{evenFooterMarkup} +@end itemize + +L'exemple suivant illustre la manière de centrer son numéro au bas de +chaque page. Il nous faut tout d'abord annuler la définition de +@code{oddHeaderMarkup} et @code{evenHeaderMarkup} à l'aide d'un +@emph{markup} @code{\null}. Nous redéfinissons ensuite +@code{oddFooterMarkup} pour qu'il contienne le numéro de page, centré. +Enfin, nous appliquons le même paramétrage au @code{\oddFooterMarkup}. + +@lilypond[papersize=a8,quote,verbatim,noragged-right] +\book { + \paper { + print-page-number = ##t + print-first-page-number = ##t + oddHeaderMarkup = \markup \null + evenHeaderMarkup = \markup \null + oddFooterMarkup = \markup { + \fill-line { + \on-the-fly #print-page-number-check-first + \fromproperty #'page:page-number-string + } + } + evenFooterMarkup = \oddFooterMarkup + } + \score { + \new Staff { s1 \break s1 \break s1 } + } +} +@end lilypond + +@seealso +Manuel de notation : +@ref{Contenu des blocs de titrage}, +@ref{Mise en forme par défaut des titrages}. + + +@node Référencement des numéros de page +@subsection Référencement des numéros de page +@translationof Reference to page numbers + +LilyPond vous permet, à l'aide de la commande @code{\label}, d'insérer +des points de référence dans un ouvrage, aussi bien en dehors qu'au fil +de la musique. Ce point de référence pourra être ensuite repris à +l'intérieur d'un @emph{markup}@tie{}; vous pourrez même y ajouter le +numéro de page grâce à la commande de @emph{markup} @code{\page-ref}. + +@c KEEP LY +@lilypond[verbatim] +\header { tagline = ##f } +\book { + \label #'firstScore + \score { + { + c'1 + \pageBreak \mark A \label #'markA + c'1 + } + } + + \markup { Le premier mouvement débute à la page \page-ref #'firstScore "0" "?" } + \markup { Le repère A est à la page \page-ref #'markA "0" "?" } +} +@end lilypond + +L'instruction @code{\page-ref} prend trois arguments@tie{}: +@enumerate +@item +le point de référence, sous la forme d'un symbole scheme, comme par +exemple @code{#'firstScore}, + +@item +un @qq{emporte-pièce} afin d'estimer la longueur totale du +@emph{markup}, + +@item +un texte de remplacement au cas où la référence ne serait pas retrouvée. +@end enumerate + +La présence de l'emporte-pièce est rendue nécessaire par le fait que les +@emph{markups} sont générés avant que les sauts de page ne soient +positionnés. Bien que le numéro de page en question ne soit pas encore +déterminé, LilyPond doit connaître les dimensions de ce @emph{markup}. +Vous pouvez, lorsque l'ouvrage contiendra plus de dix pages, stipuler un +emporte-pièce sur deux caractères -- soit @code{"00"}. + + +@predefined +@funindex \label +@code{\label}, +@funindex \page-ref +@code{\page-ref}. +@endpredefined + + +@node Table des matières +@subsection Table des matières +@translationof Table of contents + +La commande @code{\markuplines \table-of-contents} vous permettra de +générer une table des matières. Les éléments qui la composeront sont +créés par la commande @code{\tocItem}, insérée indépendamment ou au sein +d'une expression musicale. + +@verbatim +\markuplines \table-of-contents +\pageBreak + +\tocItem \markup "Premier mouvement" +\score { + { + c'4 % ... + \tocItem \markup "Passage spécifique du premier mouvement" + d'4 % ... + } +} + +\tocItem \markup "Second mouvement" +\score { + { + e'4 % ... + } +} +@end verbatim + +Les @emph{markups} dévolus à la mise en forme de la table des matières +se définissent dans le bloc @code{\paper}. Il s'agit par défaut de +@code{tocTitleMarkup} pour le titre de la table, et de +@code{tocItemMarkup} pour ses éléments -- composés de leur libellé et +numéro de page. Vous pouvez bien entendu personnaliser ces +variables@tie{}: + +@verbatim +\paper { + %% Translate the toc title into French: + tocTitleMarkup = \markup \huge \column { + \fill-line { \null "Table des matières" \null } + \hspace #1 + } + %% use larger font size + tocItemMarkup = \markup \large \fill-line { + \fromproperty #'toc:text \fromproperty #'toc:page + } +} +@end verbatim + +Notez bien la manière de référencer le libellé et le numéro de page dans +la définition de @code{tocItemMarkup}. + +N'hésitez pas à définir vous-même d'autres commandes et @emph{markups} +afin de construire une table plus élaborée@tie{}: +@itemize +@item +commencez par définir une nouvelle variable de type @code{markup} au +sein du bloc @code{\paper}, + +@item +puis définissez une fonction musicale chargée d'insérer un élément de la +table à partir de cette variable. +@end itemize + +Dans l'exemple qui suit, nous avons créé un nouveau style d'élément dans +le but de mentionner les actes dans la table des matières d'un +opéra@tie{}: + +@verbatim +\paper { + tocActMarkup = \markup \large \column { + \hspace #1 + \fill-line { \null \italic \fromproperty #'toc:text \null } + \hspace #1 + } +} + +tocAct = +#(define-music-function (parser location text) (markup?) + (add-toc-item! 'tocActMarkup text)) +@end verbatim + +@lilypond[line-width=11.0\cm] +\header { tagline = ##f } +\paper { + tocActMarkup = \markup \large \column { + \hspace #1 + \fill-line { \null \italic \fromproperty #'toc:text \null } + \hspace #1 + } +} + +tocAct = +#(define-music-function (parser location text) (markup?) + (add-toc-item! 'tocActMarkup text)) + +\book { + \markuplines \table-of-contents + \tocAct \markup { Atto Primo } + \tocItem \markup { Coro. Viva il nostro Alcide } + \tocItem \markup { Cesare. Presti omai l'Egizzia terra } + \tocAct \markup { Atto Secondo } + \tocItem \markup { Sinfonia } + \tocItem \markup { Cleopatra. V'adoro, pupille, saette d'Amore } + \markup \null +} +@end lilypond + +L'élément et son numéro de page peuvent se rejoindre par une ligne +pointillée@tie{}: + +@lilypond[verbatim,quote] +\header { tagline = ##f } +\paper { + tocItemMarkup = \tocItemWithDotsMarkup +} + +\book { + \markuplines \table-of-contents + \tocItem \markup { Allegro } + \tocItem \markup { Largo } + \markup \null +} +@end lilypond + + +@seealso +Fichiers d'initialisation : +@file{../ly/toc-init.ly}. + + +@predefined +@funindex \table-of-contents +@code{\table-of-contents}, +@funindex \tocItem +@code{\tocItem}. +@endpredefined + + +@node Travail sur des fichiers texte +@section Travail sur des fichiers texte +@translationof Working with input files + +@menu +* Insertion de fichiers LilyPond:: +* Différentes éditions à partir d'une même source:: +* Codage du texte:: +@end menu + +@node Insertion de fichiers LilyPond +@subsection Insertion de fichiers LilyPond +@translationof Including LilyPond files + +@funindex \include +@cindex inclusion de fichiers + +Lorsqu'un projet prend de l'importance en volume, il est judicieux de le +scinder en plusieurs fichiers, auxquels vous fereez référence avec un +simple + +@example +\include "autrefichier.ly" +@end example + +Une ligne @code{\include "autrefichier.ly"} dans un fichier revient à +recopier intégralement le contenu de @file{autrefichier.ly} à l'endroit +même ou est placée l'instruction @code{\include}. Vous pouvez par +exemple écrire un fichier individuel par instrument, puis les regrouper +pour former le fichier @qq{conducteur}. Les différentes variables +définies dans les fichiers séparés seront normalement reprises et +utilisables dans le fichier formant le conducteur. Les sections +balisées dans les fichiers individuels peuvent être réutilisées en +différents endroit de la partition , comme expliqué à la rubrique +@ref{Différentes éditions à partir d'une même source}. + +Lorsque le fichier auquel il est fait référence se trouve dans le même +répertoire, donner seulement son nom en argument à la commande +@code{\include} suffit. S'il se trouve ailleurs, vous devrez indiquer +le chemin d'accès, absolu ou relatif, en respectant toutefois la syntaxe +UNIX -- autrement dit, le séparateur de répertoire est une oblique +normale @code{/} et non l'oblique inverse @code{\} de DOS ou Windows. +Par exemple, si le fichier @file{truc.ly} se trouve dans le répertoire +supérieur au répertoire de travail, la ligne devra être + +@example +\include "../truc.ly" +@end example + +@noindent +ou bien, si les fichiers correspondant aux parties d'orchestre se +trouvent dans le sous-répertoire @file{parties} relativement au +répertoire courant, vous devrez mentionner + +@example +\include "parties/VI.ly" +\include "parties/VII.ly" +... etc. +@end example + +Les fichiers à inclure peuvent eux-même contenir des instructions +@code{\include}. Ces instructions @code{\include} de second niveau ne +pourront, par défaut, être interprétées qu'une fois intégrées dans le +fichier principal@tie{}; leur argument doit donc comporter le chemin +relativement au fichier principal et non par rapport au fichier dans +lequel cette inclusion est mentionnée. Vous pouvez toutefois influer +sur ce comportement à l'aide de l'option @w{@code{-drelative-includes}} +en ligne de commande ou en ajoutant une clause +@code{@w{#(ly:set-option 'relative-includes #t)}} en tête du fichier +principal. Une fois @code{relative-include} activé, le chemin à suivre +pour chacune des commandes @code{\include} sera pris relativement au +fichier qui la contient. Cette option est vouée à être activée par +défaut dans une future version de LilyPond. + +Vous pouvez inclure des fichiers dont vous spécifierez le chemin d'accès +sur la ligne de commande au moment de lancer la compilation. L'appel à +ces fichiers ne mentionnerra alors que leur nom. Par exemple, si vous +voulez compiler avec cette méthode le fichier @file{principal.ly} qui +inclut des fichiers situés dans le sous-répertoire @file{parties}, +placez vous dans le répertoire contenant @file{principal.ly}, puis tapez + +@example +lilypond --include=parties principal.ly +@end example + +tout en ayant bien dans @file{principal.ly} + +@example +\include "VI.ly" +\include "VII.ly" +... etc +@end example + +Lorsqu'un fichier est voué à être inclus dans nombre de partitions, vous +pouvez le placer dans le répertoire de LilyPond @file{../ly}. +Attention@tie{}: ce répertoire varie selon votre installation, comme +indiqué au chapitre @rlearning{Autres sources de documentation}. Ce +fichier sera inclus dès lors que vous fournirez uniquement son nom en +argument à la fonction @code{\include}. C'est par exemple le cas du +fichier de définition particulier @file{gregorian.ly}. + +Au moment où vous lancez LilyPond, un certain nombre de fichiers se +retrouvent inclus par défaut@tie{}; il suffit d'activer le mode verbeux +en faisant @w{@code{lilypond --verbose}} pour s'en rendre compte. Vous +verrez ainsi défiler, en plus de nombreuses informations, le nom d'un +certain nombre de fichiers et de chemins d'accès. Les fichiers les plus +important sont mentionnés au chapitre +@rlearning{Autres sources de documentation}. Si vous venez à les +modifier, rappelez-vous qu'ils seront écrasés à l'installation d'une +nouvelle version de LilyPond. + +Vous trouverez quelques exemples simples d'utilisation de la commande +@code{\include} au chapitre @rlearning{Conducteurs et parties}. + + +@seealso +Manuel d'initiation : +@rlearning{Autres sources de documentation}, +@rlearning{Conducteurs et parties}. + + +@knownissues + +Lorsque vous incluez un fichier qui porte le même nom que l'un des +fichiers d'initialisation de LilyPond, le fichier de la distribution de +LilyPond aura préséance. + + +@node Différentes éditions à partir d'une même source +@subsection Différentes éditions à partir d'une même source +@translationof Different editions from one source + +Différents mécanismes permettent de générer plusieurs versions d'une +partition à partir d'une même source. Les variables -- ou +idendificateurs -- sont sûrement le moyen le plus simple de combiner de +différente manière des passages relativement longs, alors que les +balises permettront de sélectionner de courts fragments selon leur +utilisation. Quelle que soit la méthode utilisée, séparer la notation +de la structure de la partition vous donnera plus de liberté dans +l'agencement de l'ouvrage final, puisque vous ne reviendrez pas sur la +musique qui le compose. + +@menu +* Utilisation de variables:: +* Utilisation de balises:: +* Globalisation des réglages:: +@end menu + +@node Utilisation de variables +@unnumberedsubsubsec Utilisation de variables +@translationof Using variables + +@cindex variables, utilisation de + +Un fragment musical identifié par une variable est réutilisable à divers +endroits de la partition, comme nous l'avons vu à la rubrique +@rlearning{Organisation du code source avec des variables}. Par +exemple, une partition pour chœur @notation{a cappella} comporte souvent +une réduction pour piano reprenant toutes les voix@tie{}; il s'agit de +la même musique, et vous ne devrez donc la saisir qu'une seule fois. +D'autre part, la musique issue de deux variables peut se combiner sur +une seule portée, comme nous l'avons vu à la rubrique +@ref{Regroupement automatique de parties}. Prenons l'exemple +suivant@tie{}: + +@lilypond[verbatim,quote] +sopranoMusic = \relative c'' { a4 b c b8( a) } +altoMusic = \relative g' { e4 e e f } +tenorMusic = \relative c' { c4 b e d8( c) } +bassMusic = \relative c' { a4 gis a d, } +allLyrics = \lyricmode {King of glo -- ry } +<< + \new Staff = "Soprano" \sopranoMusic + \new Lyrics \allLyrics + \new Staff = "Alto" \altoMusic + \new Lyrics \allLyrics + \new Staff = "Tenor" { + \clef "treble_8" + \tenorMusic + } + \new Lyrics \allLyrics + \new Staff = "Bass" { + \clef "bass" + \bassMusic + } + \new Lyrics \allLyrics + \new PianoStaff << + \new Staff = "RH" { + \set Staff.printPartCombineTexts = ##f + \partcombine + \sopranoMusic + \altoMusic + } + \new Staff = "LH" { + \set Staff.printPartCombineTexts = ##f + \clef "bass" + \partcombine + \tenorMusic + \bassMusic + } + >> +>> +@end lilypond + +Générer une partition chorale ou la réduction pour piano ne requiert que +de modifier la structure des éléments, sans aucunement toucher à la +musique. + +Dans le cas d'une partition relativement longue, vous pouvez isoler la +définition des différentes variables dans des fichiers séparés que vous +rappellerez ensuite, comme indiqué à la rubrique +@ref{Insertion de fichiers LilyPond}. + + +@node Utilisation de balises +@unnumberedsubsubsec Utilisation de balises +@translationof Using tags + +@funindex \tag +@funindex \keepWithTag +@funindex \removeWithTag +@cindex tag +@cindex balise + +La commande @code{\tag #'@var{partieA}} affecte à une expression +musicale le nom @var{partieA}. Les expressions ainsi balisées pourront +être filtrées par la suite, à l'aide de +@code{\keepWithTag@tie{}#'@var{nom}} ou +@code{\removeWithTag@tie{}#'@var{nom}}. Ces filtres fonctionnent de la +manière suivante@tie{}: + +@multitable @columnfractions .5 .5 +@headitem Filtre + @tab Résultat + +@item +Musique balisée précédée de @code{\keepWithTag #'@var{nom}} + @tab Musique non balisée et musique balisée par @var{nom} seront + incluses@tie{}; la musique balisée autrement est exclue. + +@item +Musique balisée précédée de @code{\removeWithTag #'@var{nom}} + @tab Musique non balisée et fragments appelés autrement que @var{nom} + seront inclus@tie{}; la musique balisée par @var{nom} est exclue. + +@item +Musique balisée non précédée de @code{\keepWithTag} ou +@code{\removeWithTag} + @tab Musique balisée et non balisée seront incluses. + +@end multitable + +Les arguments des commandes @code{\tag}, @code{\keepWithTag} et +@code{\removeWithTag} doivent être un symbole (tel que +@code{#'conducteur} ou @code{#'partie}), suivi d'une expression +musicale. + +Dans l'exemple qui suit, nous obtenons deux versions du même extrait, +l'une pour le conducteur, l'autre pour l'instrumentiste, et qui +comportera les ornements développés. + +@lilypond[verbatim,quote] +music = \relative g' { + g8. c32 d + \tag #'trills { d8.\trill } + \tag #'expand { \repeat unfold 3 { e32 d } } + c32 d + } + +\score { + \keepWithTag #'trills \music +} +\score { + \keepWithTag #'expand \music +} +@end lilypond + +@noindent +Il est parfois plus aisé d'exclure des fragments@tie{}: + +@lilypond[verbatim,quote] +music = \relative g' { + g8. c32 d + \tag #'trills { d8.\trill } + \tag #'expand {\repeat unfold 3 { e32 d } } + c32 d + } + +\score { + \removeWithTag #'expand + \music +} +\score { + \removeWithTag #'trills + \music +} +@end lilypond + +Ce principe de filtrage peut s'appliquer aux articulations, textes, etc. +Il suffit de positionner + +@example +-\tag #@var{ma-balise} +@end example + +@noindent +avant l'articulation ou le texte, comme ici@tie{}: -@menu -* Structure of a score:: -* Multiple scores in a book:: -* File structure:: -@end menu +@example +c1-\tag #'doigt ^4 +c1-\tag #'gaffe ^"Attention !" +@end example -@node Structure of a score -@subsection Structure of a score +@noindent +Ceci définira une note avec une indication conditionnelle de doigté ou +un texte. -@untranslated +Vous pouvez baliser différemment la même expression musicale en +saisissant plusieurs @code{\tag}@tie{}: +@lilypond[quote,verbatim] +music = \relative c'' { + \tag #'a \tag #'both { a4 a a a } + \tag #'b \tag #'both { b4 b b b } +} +<< +\keepWithTag #'a \music +\keepWithTag #'b \music +\keepWithTag #'both \music +>> +@end lilypond -@node Multiple scores in a book -@subsection Multiple scores in a book +L'application concomitante de plusieurs filtres @code{\removeWithTag} à +la même expression musicale permet d'exclure plusieurs balisages@tie{}: -@untranslated +@lilypond[verbatim,quote] +music = \relative c'' { +\tag #'A { a4 a a a } +\tag #'B { b4 b b b } +\tag #'C { c4 c c c } +\tag #'D { d4 d d d } +} +{ +\removeWithTag #'B +\removeWithTag #'C +\music +} +@end lilypond +L'application de plus d'un filtre @code{\keepWithTag} à la même +expression musicale aboutit à l'exclusion de @b{tous} les balisages. +En effet, si le premier filtre exclut tous les autres balisages, +l'application du second exclura les effets du premier. -@node File structure -@subsection File structure -@untranslated +@seealso +Manuel d'initiation : +@rlearning{Organisation du code source avec des variables}. +Manuel de notation : +@ref{Regroupement automatique de parties}, +@ref{Insertion de fichiers LilyPond}. -@node Titles and headers -@section Titles and headers -@untranslated +@ignore +@c This warning is more general than this placement implies. +@c Rests are not merged whether or not they come from tagged sections. +@c Should be deleted? -td +@knownissues -@menu -* Creating titles:: -* Custom titles:: -* Reference to page numbers:: -* Table of contents:: -@end menu +Lorsqu'elles comportent des silences, ceux-ci ne seront pas fusionnés +si vous imprimez une partition avec les deux sections balisées. + +@end ignore + + +@node Globalisation des réglages +@unnumberedsubsubsec Globalisation des réglages +@translationof Using global settings + +@cindex include-settings -@node Creating titles -@subsection Creating titles +Vous pouvez regrouper dans un fichier indépendant vos réglages +personnels que vous incluerez au besoin@tie{}: -@untranslated +@example +lilypond -dinclude-settings=MES_REGLAGES.ly MA_PARTITION.ly +@end example + +Vous pouvez ainsi stocker dans un fichier séparé vos réglages en matière +de format de papier, de fontes utilisées ou vos définitions +particulières. Selon le fichier de réglages que vous mentionnerez, vous +obtiendrez facilement différentes éditions à partir d'une même source +quelle qu'elle soit. + +Ceete technique peut s'utiliser en combinaison avec des feuilles de +styles, comme indiqué au chapitre @rlearning{Feuilles de style}. +@seealso +Manuel d'initiation : +@rlearning{Organisation du code source avec des variables}, +@rlearning{Feuilles de style}. + +Manuel de notation : +@ref{Insertion de fichiers LilyPond}. + + +@node Codage du texte +@subsection Codage du texte +@translationof Text encoding + +@cindex Unicode +@cindex UTF-8 +@cindex non-ASCII characters + +LilyPond utilise le jeu de caractères défini par le consortium Unicode +et la norme ISO/CEI@tie{}10646. Chaque caractère est identifié par un +nom unique et associé à un point de code, ce qui permet dans l'absolu de +couvrir tous les langages. Unicode permet de coder tous les caractères +utilisés par toutes les langues écrites du monde. LilyPond utilise le +codage UTF-8 (UTF pour @emph{Unicode Transformation Format}) qui permet +de représenter les caractères latins sur un octet et les autres sur une +longueur allant jusqu'à quatre octets. + +L'apparence réelle des caractères est déterminée par les glyphes ou +graphèmes tels que définis dans les différentes polices disponibles. +Une police, ou une fonte, définit la mise en correspondance d'un +sous-ensemble de points de code unicode en glyphes. LilyPond recourt à +la bibliothèque Pango pour assurer le rendu des textes multilingues. + +LilyPond n'effectue aucune conversion d'encodage que ce soit. Ceci +implique donc que tout texte, qu'il s'agisse d'un titre, de paroles ou +même d'instruction musicale, comportant des caractères non ASCII, soit +codé en UTF-8. Le plus sûr moyen de saisir du texte de la sorte +consiste à utiliser un éditeur supportant l'unicode et à enregistrer vos +fichier en UTF-8. C'est le cas pour la plupart des éditeurs actuels, +que ce soit vim, Emacs, jEdit et GEdit. Tous les systèmes Windows +postérieurs à NT utilisent Unicode en natif@tie{}; même Notepad est +capable d'éditer et sauvegarder un fichie en UTF-8 -- sans parler de +l'excellente alternative qu'est BabelPad. + +La compilation d'un fichier LilyPond comportant des caractères non ASCII +qui n'aurait pas été enregistré dans l'encodage UTF-8 vous renverra +l'erreur -@node Custom titles -@subsection Custom titles +@example +FT_Get_Glyph_Name () erreur : invalid argument +@end example -@untranslated +Voici un exemple utilisant du texte en cyrilique, en hébreux et en +portugais. +@lilypond[quote] +%c No verbatim here as the code does not display correctly in PDF +% Cyrillic +bulgarian = \lyricmode { + Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. +} -@node Reference to page numbers -@subsection Reference to page numbers +% Hebrew +hebrew = \lyricmode { + זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. +} -@untranslated +% Portuguese +portuguese = \lyricmode { + à vo -- cê uma can -- ção legal +} +\relative c' { + c2 d e f g f e +} +\addlyrics { \bulgarian } +\addlyrics { \hebrew } +\addlyrics { \portuguese } +@end lilypond -@node Table of contents -@subsection Table of contents +Lorsque vous avez besoin d'un caractère dont vous connaissez le point de +code mais que votre éditeur ne permet pas de saisir directement, vous +pouvez utitliser les instructions @code{\char@tie{}##xhhhh} ou +@code{\char@tie{}#dddd} au sein d'un bloc @code{\markup} -- @code{hhhh} +et @code{dddd} correspondant respectivement à la valeur hexadécimale ou +décimale. Même s'il est inutile de saisir les zéros superflus, il est +de bon ton de stipuler les quatre caractères formant la représentation +hexadécimale. Évitez cependant l'encodage UTF-8 d'un point de code +après un @code{\char}@tie{}; les encodages UTF-8 comprennent un bit +supplémentaire indiquant le nombre d'octets. Une table de +correspondance entre les codes Unicode et le nom des caractères ainsi +que leur code hexadécimal est disponible sur le site du consortium +Unicode, @uref{http://www.unicode.org/}. + +Par exemple, @code{\char ##x03BE} et @code{\char #958} correspondent +tous deux au caractère unicode U+03BE, dénommé @qq{Greek Small Letter +Xi}. + +Quel que soit le point de code spécifié de cette manière, il ne vous +sera alors pas nécessaire d'enregistrer votre fichier en UTF-8. Vous +devrez toutefois disposer d'une fonte contenant ce caractère qui soit +accessible à LilyPond. + +L'exemple suivant illustre la manière d'insérer un caractère sous sa +forme hexadécimale, à la fois dans un repère, dans une articulation, +dans des paroles et dans du texte indépendant. + +@lilypond[quote,verbatim] +\score { + \relative c'' { + c1 \mark \markup { \char ##x03EE } + c1_\markup { \tiny { \char ##x03B1 " to " \char ##x03C9 } } + } + \addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } } +} +\markup { "Copyright 2008--2011" \char ##x00A9 } +@end lilypond -@untranslated +@cindex copyright +Le signe @emph{copyright} dans le champ de titrage consacré s'inscrit de +la manière suivante@tie{}: -@node Working with input files -@section Working with input files +@example +\header @{ + copyright = \markup @{ \char ##x00A9 "2008" @} +@} +@end example -@untranslated +@node Contrôle des sorties +@section Contrôle des sorties +@translationof Controlling output @menu -* Including LilyPond files:: -* Different editions from one source:: -* Text encoding:: -* Displaying LilyPond notation:: +* Extraction de fragments musicaux:: +* Ignorer des passages de la partition:: +* Formats de sortie alternatifs:: +* Changement des fontes musicales:: @end menu -@node Including LilyPond files -@subsection Including LilyPond files +@node Extraction de fragments musicaux +@subsection Extraction de fragments musicaux +@translationof Extracting fragments of music + +LilyPond vous permet d'extraire des fragments d'une partition à l'instar +du choriste amateur qui alimente son album avec des coupures de +journaux. + +Vous devrez pour cela définir les mesures à découper. La définition +suivante, incluse dans votre fichier source, + +@verbatim +\layout { + clip-regions + = #(list + (cons + (make-rhythmic-location 5 1 2) + (make-rhythmic-location 7 3 4))) +} +@end verbatim + +@noindent +vous permettra d'extraire un fragment compris entre le milieu de la +cinquième mesure et quelque part dans la septième. Le triplet +@code{5@tie{}1@tie{}2} signifie@tie{}: après la durée d'une blanche dans +la mesure 5@tie{}; le @code{7@tie{}3@tie{}4} signifie quant à lui que +l'on s'arrête à la mesure 7, après la durée de trois noires. + +Rien ne vous empêche d'extraire plusieurs fragments, dès lors que vous +définissez dans la liste d'autres paires d'emplacements ryhtmiques. + +Cette fonctionnalité n'est toutefois effective que lorsque vous lancez +LilyPond avec l'option @w{@code{-dclip-systems}}. Les @qq{coupures} +seront générées sous la forme de fichiers EPS, convertis en PDF ou PNG +selon le format que vous aurez stipulé. + +Pour de plus amples informations quant au format des résultats, +consultez le chapitre @rprogram{Lancement de lilypond}. + + +@node Ignorer des passages de la partition +@subsection Ignorer des passages de la partition +@translationof Skipping corrected music + +@funindex skipTypesetting +@funindex showFirstLength +@funindex showLastLength + +Dans un travail de transcription ou de recopie de la musique, ce qui +vous intéresse plus particulièrement se situe à la fin, là même où vous +en êtes dans la notation. Dans le but de gagner du temps dans le +processus de correction, vous pouvez @qq{escamoter} le reste et ne +générer que les dernières mesures en insérant + +@verbatim +showLastLength = R1*5 +\score { ... } +@end verbatim + +@noindent +dans votre fichier source. Ceci aura pour effet de ne générer que les +cinq dernières mesures -- si tant est que le morceau soit à 4/4 -- de +tous les @code{\score} de votre fichier. Dans le cas d'un œuvre +conséquente, cette pratique s'avère fort utile puisqu'elle évite de tout +générer. Vous pourriez aussi être amené à retravailler le début d'une +œuvre, pour y ajouter une partie par exemple, auquel cas c'est la +propriété @code{showFirstLength} que vous utiliserez. + +Vous pouvez contrôler très finement les parties à escamoter, grâce au +commutateur @code{Score.skipTypesetting}@tie{}: lorsqu'il est activé, +aucune gravure n'est réalisée. + +Ce commutateur agit aussi sur la sortie MIDI. Notez bien que tous les +événements seront escamotés, y compris les changements de tempo ou +d'instrument -- vous voilà prévenu@tie{}! + +@lilypond[quote,relative=2,ragged-right,verbatim] +c8 d +\set Score.skipTypesetting = ##t +e8 e e e e e e e +\set Score.skipTypesetting = ##f +c8 d b bes a g c2 +@end lilypond + +Dans le cadre de musique polyphonique, @code{Score.skipTypesetting} +s'applique à toutes les voix et portées. Vous gagnerez donc encore plus +de temps. + + +@node Formats de sortie alternatifs +@subsection Formats de sortie alternatifs +@translationof Alternative output formats + +@cindex scalable vector graphics +@cindex SVG, format de sortie +@cindex encapsulated postscript +@cindex EPS, format de sortie + +En matière de partition imprimable, LilyPond génère par défaut des +documents au format PostScript (PS) et Portable Document Format (PDF). +Vous pouvez aussi obtenir des documents au format Scalable Vector +Graphics (SVG), Encapsulated PostScript (EPS) ou Portable Network +Graphics (PNG) dès lors que vous aurez lancé LilyPond en ligne de +commande avec l'option @i{ad hoc} -- voir +@rprogram{Options en ligne de commande pour lilypond} à ce sujet. -@untranslated +@node Changement des fontes musicales +@subsection Changement des fontes musicales +@translationof Replacing the notation font + +Gonville est une alternative à la fonte Feta que LilyPond utilise par +défaut. Vous pouvez la télécharger à partir de +@example +@uref{http://www.chiark.greenend.org.uk/~sgtatham/gonville/ ,http://www.chiark.greenend.org.uk/~sgtatham/gonville/} +@end example + +Voici quelques mesures utilisant la police Gonville@tie{}: + +@c NOTE: these images are a bit big, but that's important +@c for the font comparison. -gp +@sourceimage{Gonville_after,,,} + +Et ces même mesures avec la police de LilyPond, Feta@tie{}: + +@sourceimage{Gonville_before,,,} + + +@subsubheading Instructions d'installation pour MacOS +@translationof Installation Instructions for MacOS + +Téléchargez puis décompressez l'archive zip. Recopiez le répertoire +@code{lilyfonts} dans @file{@var{SHARE_DIR}/lilypond/current} -- voir +@rlearning{Autres sources de documentation} à ce sujet. Renommez le +répertoire @code{fonts} qui s'y trouve en @code{fonts_orig}, puis le +répertoire @code{lilyfonts} en @code{fonts}. Il vous suffira, pour +retrouver la fonte Feta, de renommer @code{fonts_orig} en @code{fonts}. + + +@seealso +Manuel d'initiation : +@rlearning{Autres sources de documentation}. + +@knownissues + +Gonville ne permet pas de générer de la notation ancienne, et certains +glyphes ajoutés depuis lors aux jeux de caractères en soient absent. +Consultez le site de l'auteur pour de plus amples informations ainsi +qu'à propos des conditions d'utilisation. -@node Different editions from one source -@subsection Different editions from one source -@untranslated +@node Sortie MIDI +@section Sortie MIDI +@translationof MIDI output +@cindex son +@cindex MIDI + +MIDI (Musical Instrument Digital Interface) constitue un standard en +matière de connexion et de contrôle des instruments électroniques. Un +fichier MIDI contient une série de notes réparties dans différentes +pistes. Il ne s'agit en rien d'un fichier sonore@tie{}; il vous faudra +un logiciel capable de traduire ces séries de notes en sons réels. + +Vous pouvez convertir vos partition en fichier MIDI de manière à +entendre ce que vous avez saisi. Ceci vous permet de contrôler aisément +ce que vous avez saisi@tie{}: octaves et altérations erronées heuteront +votre oreille avertie grâce au MIDI. + +Le fichier MIDI généré par LilyPond est relativement brut. Vous pouvez +cependant obtenir un meilleur rendu avec @ref{Le script Articulate}. + +@c TODO Check this +Dans une sortie MIDI, LilyPond alloue un canal à chaque portée, plus un +pour les réglages globaux. Par voie de conséquence, un fichier MIDI ne +peut comporter au maximmum que quinze portées (quatorze en l'absence de +percussions)@tie{}; les portées supplémentaires seront tout simplement +silencieuses. @menu -* Using variables:: -* Using tags:: +* Création de fichiers MIDI:: +* Le bloc MIDI:: +* Contenu de la sortie MIDI:: +* Répétitions et MIDI:: +* Gestion des nuances en MIDI:: +* MIDI et percussions:: +* Le script Articulate:: @end menu -@node Using variables -@unnumberedsubsubsec Using variables -@untranslated +@node Création de fichiers MIDI +@subsection Création de fichiers MIDI +@translationof Creating MIDI files +LilyPond génèrera un fichier MIDI dès que vous ajouterez un bloc +@code{\midi} à la structure de votre partition, comme ici@tie{}: -@node Using tags -@unnumberedsubsubsec Using tags -@funindex \tag -@cindex tag - -La commande @code{\tag} affecte un nom à des expressions musicales. -Les expressions ainsi balisées pourront être filtrées par la suite. -Ce mécanisme permet d'obtenir différentes versions à partir d'une même -source musicale. - -Dans l'exemple qui suit, nous obtenons deux versions du même extrait, -l'une pour le conducteur, l'autre pour l'instrumentiste, et qui -comportera les ornements. - @example -c1 -<< - \tag #'partie << - R1 \\ - @{ - \set fontSize = #-1 - c4_"cue" f2 g4 @} - >> - \tag #'conducteur R1 ->> -c1 +\score @{ + @var{...musique...} + \midi @{ @} +@} @end example -@noindent -Ce principe peut s'appliquer aux articulations, textes, etc. Il -suffit de positionner +Lorsque le bloc @code{\score} contient un bloc @code{\midi} mais pas de +bloc @code{\layout}, LilyPond ne produira qu'une sortie MIDI. Si donc +vous avez besoin aussi d'un support visuel, vous devrez aussi mentionner +un bloc @code{\layout}. @example --\tag #@var{votre-balise} +\score @{ + @var{...musique...} + \midi @{ @} + \layout @{ @} +@} @end example -@noindent -avant l'articulation, comme ici : +Hauteurs, durées, liaisons de prolongation, nuances et changements de +tempo seront interprétés et traduits en événements MIDI. Les +indications de nuances, crescendos et decrescendos sont traduits en +niveau de volume@tie{}; les indications sous la forme d'une fraction +déterminée du volume disponible, et crescendos et decrescendos sous la +forme d'une progression linéaire entre les deux extrêmes. Le rendu des +indications de nuance peut être désactivé pour le MIDI -- voir +@ref{Le bloc MIDI}. + +Le tempo initial ainsi que ses changements sont normalement indiqués au +fil de la notation à l'aide de la commande @code{\tempo}@tie{}; ils +seront retranscrits dans le fichier MIDI. La commande @code{\tempo} +donne lieu à l'impression d'une indication métronomique que vous pouvez +toutefois rendre invisible, comme indiqué à la rubrique +@ref{Indication métronomique}. Une autre manière de spécifier le tempo +initial pour un fichier MIDI est indiquée plus avant -- voir +@ref{Le bloc MIDI}. + +En raison de certaines limitations de Windows, les fichiers MIDI doivent +y porter l'extension @code{.mid}. D'autres systèmes utilisent +l'extension @code{.midi}. Si besoin est, placez la ligne suivante au +début de votre fichier source, avant l'ouverture de tout bloc +@code{\book}, @code{\bookpart} ou @code{\score}@tie{}: @example -c1-\tag #'part ^4 +#(ly:set-option 'midi-extension "midi") @end example -@noindent -Ceci définira une note avec une indication de doigté conditionnelle. - -@cindex keepWithTag -@cindex removeWithTag -C'est grâce aux commandes @code{\keepWithTag} et @code{\removeWithTag} -que vous filtrerez les expressions balisées. Par exemple : +Cette ligne déterminera @code{.midi} comme extension par défaut pour les +fichiers MIDI. + +Vous pouvez aussi le faire en ligne de commande@tie{}: @example -<< - @var{de la musique} - \keepWithTag #'score @var{de la musique} - \keepWithTag #'part @var{de la musique} ->> +lilypond … -dmidi-extension=midi fichierLily.ly @end example -@noindent -donnerait : -@lilypondfile[ragged-right,quote]{tag-filter.ly} +@unnumberedsubsubsec Noms d'instrument +@translationof Instrument names + +@cindex instrument, nom d' +@funindex Staff.midiInstrument + +L'instrument MIDI affecté à un canal particulier est déterminé par la +propiété @code{Staff.midiInstrument}. Vous pouvez choisr l'un des +instruments répertoriés à l'annexe @ref{Instruments MIDI}. -Les arguments de la commande @code{\tag} doivent être un symbole (tel -que @code{#'score} ou @code{#'part}), suivi d'une expression musicale. -Vous pouvez utiliser de multiples balises dans un morceau en -saisissant plusieurs @code{\tag}. - @example -\tag #'original-part \tag #'transposed-part @dots{} +\new Staff @{ + \set Staff.midiInstrument = #"glockenspiel" + @var{...notes...} +@} +@end example + +@example +\new Staff \with @{midiInstrument = #"cello"@} @{ + @var{...notes...} +@} @end example +Lorsque l'instrument choisi ne correspond pas exactement à l'une des +dénominations consacrées, LilyPond le replacera par un piano de concert +(@code{"acoustic grand"}). + + +@snippets + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{changing-midi-output-to-one-channel-per-voice.ly} + +@knownissues + +@c In 2.11 the following no longer seems to be a problem -td @ignore -FIXME -@seealso -Exemples : @lsr{parts,tag@/-filter@/.ly} +Un (de)crescendo non terminé ne sera pas correctement rendu en MIDI -- +il y a nécessairement du silence. Il vous faut donc lui donner une fin +explicite. Par exemple, + +@example +@{ a4\< b c d\f @} +@end example + +@noindent +ne fonctionnera pas correctement, contrairement à + +@example +@{ a4\< b c d\!\f @} +@end example @end ignore +Un changement de volume ne peut intervenir que sur le démarrage d'une +note. C'est la raison pour laquelle la succession d'un crescendo et +d'un diminuendo ne peut se produire sur une même note. -@knownissues +Certains lecteurs MIDI ne rendent pas correctement les changements de +tempo. MS Windows Media Player et +@uref{http://@/timidity@/.sourceforge@/.net/,timidity} le font sans +problème. -Lorsqu'elles comportent des silences, ceux-ci ne seront pas fusionnés -si vous imprimez une partition avec les deux sections balisées. +@node Le bloc MIDI +@subsection Le bloc MIDI +@translationof MIDI block + +Dès lors que vous désirez obtenir une sortie MIDI, vous devrez inscrire +un bloc @code{\midi} au sein du bloc @code{\score}. Son fonctionnement +est comparable à ce lui du bloc @code{\layout}, voire plus simple. Si +le bloc @code{\midi} est la plupart du temps laissé vide, il peut +contenir des aménagements pour certains contextes, la définition de +contextes particuliers ou du code permettant de déterminer la valeur de +certaines propriétés. L'exemple suivant détermine le tempo initial du +fichier MIDI tout en se passant de son indication sur la partition +imprimée. -@node Text encoding -@subsection Text encoding +@example +\score @{ + @var{...musique...} + \midi @{ + \context @{ + \Score + tempoWholesPerMinute = #(ly:make-moment 72 4) + @} + @} +@} +@end example -@untranslated +Ici, le tempo est fixé à 72 noires à la minute. Spécifier un tempo de +la sorte ne permet pas de doner une valeur pour une note pointée. Vous +devrez, en pareil cas, subdiviser la note pointée en durée plus courte. +Par exemple, indiquer 90 à la noire pointée est équivalent à spécifier +270 croches à la minute@tie{}: +@example +tempoWholesPerMinute = #(ly:make-moment 270 8) +@end example -@node Displaying LilyPond notation -@subsection Displaying LilyPond notation +@cindex MIDI et définition de contexte +@cindex contexte, définition en MIDI -@untranslated +La syntaxe permettant de définir un contexte pour le @code{\midi} est en +tout point identique à celle que vous utilisez dans le bloc +@code{\layout}, à ceci près que le @qq{graveur} est remplacé par un +@qq{interprète}. Les différents contextes disponibles en matière de +MIDI sont répertoriés dans le fichier d'initialisation +@file{../ly/performer-init.ly} -- pour plus de détail, voir +@rlearning{Autres sources de documentation}. +Si vous voulez vous passer des nuances dans votre fichier MIDI, il vous +suffit d'insérer les lignes suivantes dans votre bloc +@code{\midi@{ @}}. +@example +\midi @{ + ... + \context @{ + \Voice + \remove "Dynamic_performer" + @} +@} +@end example -@node Controlling output -@section Controlling output +LilyPond ne génèrera de sortie MIDI que si vous incluez un bloc +@code{\midi} dans la structure de la partition, initialisée par la +commande @code{\score}. -@untranslated +@example +\score @{ + @{ @dots{}notes@dots{} @} + \midi @{ @} +@} +@end example -@menu -* Extracting fragments of music:: -* Skipping corrected music:: -@end menu +@node Contenu de la sortie MIDI +@subsection Contenu de la sortie MIDI +@translationof What goes into the MIDI output? -@node Extracting fragments of music -@subsection Extracting fragments of music +@c TODO Check grace notes - timing is suspect? -@untranslated +@unnumberedsubsubsec Éléments pris en compte dans le MIDI +@translationof Supported in MIDI -@node Skipping corrected music -@subsection Skipping corrected music +@cindex hauteurs en MIDI +@cindex MIDI, hauteurs +@cindex quart de ton en MIDI +@cindex MIDI, quart de ton +@cindex microtonalité en MIDI +@cindex MIDI, microtonalité +@cindex accords nommés en MIDI +@cindex MIDI, accords nommés +@cindex Rythme en MIDI +@cindex MIDI, Rythme +@cindex articulations et MIDI +@cindex MIDI et articulations +@cindex trilles et MIDI +@cindex MIDI et trilles +@c TODO etc -@untranslated +Un fichier MIDI généré par LilyPond comprendra les éléments de notation +suivants@tie{}: +@itemize +@item +les hauteurs ; -@node MIDI output -@section MIDI output +@item +les microtonalités -- voir @ref{Altérations}. Leur rendu nécessite +cependant un lecteur qui prenne en charge la modulation@tie{}; -@untranslated +@item +les accords nommés ; +@item +le rythme en tant que durée de note, y compris les nolets ; -@menu -* Creating MIDI files:: -* MIDI block:: -* What goes into the MIDI output?:: -* Repeats in MIDI:: -* Controlling MIDI dynamics:: -@end menu +@item +les tremolos, exceptés ceux utilisant la syntaxe +@qq{@code{:}[@var{nombre}]}@tie{}; + +@item +les liaisons de prolongation ; + +@item +les indications de nuance ; + +@item +les crescendos et decrescendos s'étalant sur plusieurs notes@tie{}; + +@item +les changements de tempo indiqués par un @code{\tempo}@tie{}; + +@item +les paroles. +@end itemize + +Si vous utilisez @ref{Le scrip Articulate}, d'autres éléments seront +alors inclus@tie{}: + +@itemize +@item articulations (lié, staccato, etc.), +@item trilles et groupettos, +@item rallentando et accelerando. +@end itemize -@node Creating MIDI files -@subsection Creating MIDI files -@untranslated +@unnumberedsubsubsec Éléments non pris en compte dans le MIDI +@translationof Unsupported in MIDI +@c TODO index as above -@unnumberedsubsubsec Instrument names -@node MIDI block -@subsection MIDI block +LilyPond ne peut générer d'événement MIDI pour les éléments +suivant, sauf à utiliser @ref{Le scrip Articulate}@tie{}: -@untranslated +@itemize +@item +le rythme indiqué sous forme d'annotation (p.ex. @emph{swing})@tie{}; +@item +les changements de tempo indiqués sous forme d'annotation (sans +@code{\tempo})@tie{}; -@node What goes into the MIDI output? -@subsection What goes into the MIDI output? +@item +les staccatos et autres articulations ou ornementations@tie{}; -@untranslated +@item +les liaisons d'articulation et de prhasé@tie{}; +@item +les crescendos ou decrescendos sur une sele note@tie{}; -@unnumberedsubsubsec Supported in MIDI -@unnumberedsubsubsec Unsupported in MIDI +@item +les tremolos indiqués par la syntaxe @qq{@code{:}[@var{nombre}]}@tie{}; -@node Repeats in MIDI -@subsection Repeats in MIDI +@item +la basse chiffrée + +@item +les accords en microtonalité. +@end itemize + + +@node Répétitions et MIDI +@subsection Répétitions et MIDI +@translationof Repeats in MIDI @cindex reprises développées +@cindex MIDI et reprises @funindex \unfoldRepeats Au prix de quelques réglages, les reprises de toutes sortes peuvent être @@ -298,7 +2348,7 @@ d'autre termes, @code{\unfoldRepeats} transforme toutes les reprises en reprises de type @code{unfold}. -@lilypond[quote,verbatim,fragment,line-width=8.0\cm] +@lilypond[quote,verbatim] \unfoldRepeats { \repeat tremolo 8 {c'32 e' } \repeat percent 2 { c''8 d'' } @@ -311,32 +2361,477 @@ en reprises de type @code{unfold}. \bar "|." @end lilypond +Dans une partition comportant plusieurs voix, le développement des +reprises ne sera effectif en MIDI qu'à la condition que ces reprises +soient mentionnée correctement dans @strong{toutes} les voix. Lorsque l'on veut utiliser @code{\unfoldRepeats} seulement pour le rendu -MIDI, il faut établir deux blocs @code{\score} : un pour le MIDI, avec -des reprises explicites, et l'autre pour la partition, avec des reprises -notées sous forme de barres de reprise, de trémolo ou de symboles de -pourcentage. Par exemple +MIDI, il faut établir deux blocs @code{\score}@tie{}: un pour le MIDI, +avec des reprises explicites, et l'autre pour la partition, avec des +reprises notées sous forme de barres de reprise, de trémolo ou de +symboles de pourcentage. Par exemple @example \score @{ - @var{..musique..} - \layout @{ .. @} + @var{..musique..} + \layout @{ .. @} @} \score @{ - \unfoldRepeats @var{..musique..} - \midi @{ .. @} + \unfoldRepeats @var{..musique..} + \midi @{ .. @} +@} +@end example + + +@node Gestion des nuances en MIDI +@subsection Gestion des nuances en MIDI +@translationof Controlling MIDI dynamics + +Les nuances MIDI sont générées par le @code{Dynamic_performer}, affecté +par défaut au contexte @code{Voice}. Vous pouvez contrôler à la fois le +volume général, celui des indications de nuance ainsi que celui des +différents instruments. + + +@unnumberedsubsubsec Indications de nuance +@translationof Dynamic marks + +Les indications de nuances sont transcrites en fraction du volume MIDI. +Nous allons, par défaut, de 0,25 pour un @notation{ppppp} à 0,95 pour un +@notation{fffff}. Les correspondances entre nuance et fraction de +volume sont répertoriées dans le fichier @file{../scm/midi.scm} -- +consultez la rubrique @rlearning{Autres sources de documentation} si +vous ne savez comment le localiser. Vous pouvez modifier ou étendre ce +jeu grâce à une fonction qui prendra en argument une indication de +nuance et renverra la fraction désirée, puis en affectant cette fonction +à @code{Score.dynamicAbsoluteVolumeFunction}. + +Prenons un exemple. Votre partition comporte un @notation{rinforzando} +que vous avez indiqué par @code{\rfz}. Cette indication de nuance +n'étant pas répertoriée dans le jeu par défaut, elle ne produira aucun +effet en MIDI. Il en sera d'ailleurs de même pour toute indication +créée de toute pièce à l'aide de l'instruction +@w{@code{make-dynamic-script}}. Voici comment procéder pour ajuster le +volume MIDI de ce @notation{rinforzando} que le compositeur a indiqué. +La fonction Scheme définit une fraction de 0,9 en cas de @notation{rfz}, +et demande d'utiliser la fonction par défaut dans les autre cas. + +@lilypond[verbatim,quote] +#(define (myDynamics dynamic) + (if (equal? dynamic "rfz") + 0.9 + (default-dynamic-absolute-volume dynamic))) + +\score { + \new Staff { + \set Staff.midiInstrument = #"cello" + \set Score.dynamicAbsoluteVolumeFunction = #myDynamics + \new Voice { + \relative c'' { + a4\pp b c-\rfz + } + } + } + \layout {} + \midi {} +} +@end lilypond + +Si vous étiez amené à devoir modifier l'intégralité du jeu des +correspondances, nous vous conseillons d'utiliser la procédure +@command{default-dynamic-absolute-volume} contenue dans le fichier +@file{../scm/midi.scm} ansi que la table d'association comme base. Le +dernier exemple de cette partie illustre la manière de procéder. + + +@unnumberedsubsubsec Amplitude du volume en MIDI +@translationof Overall MIDI volume + +Les valeurs extrêmes du volume MIDI des nuances se contrôlent à l'aide +des propriétés @code{midiMinimumVolume} et @code{midiMaximumVolume} qui +agissent au niveau @code{Score}. Ces propriétés sont effectives dès +lors qu'une nuance est indiquée@tie{}; une nuance de départ est donc +requise pour que le volume soit ajusté dès le début de la partition. +Vous pouvez alors modifier la fraction correspondant à chaque nuance à +l'aide de la formule + +@example +midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * fraction +@end example + +Voici comment ajuster les nuances tout en limitant l'amplitude du volume +entre 0,2 et 0,5@tie{}: + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \key g \major + \time 2/2 + \set Staff.midiInstrument = #"flute" + \new Voice \relative c''' { + r2 g\mp g fis~ + fis4 g8 fis e2~ + e4 d8 cis d2 + } + } + \new Staff { + \key g \major + \set Staff.midiInstrument = #"clarinet" + \new Voice \relative c'' { + b1\p a2. b8 a + g2. fis8 e + fis2 r + } + } + >> + \layout {} + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + midiMinimumVolume = #0.2 + midiMaximumVolume = #0.5 + } + } +} +@end lilypond + + +@unnumberedsubsubsec Égalisation de plusieurs instruments (i) +@translationof Equalizing different instruments (i) + +La définition de l'amplitude du volume MIDI au niveau d'un contexte +@code{Staff} permet de gérer les volumes relatifs entre les différents +instruments. Ceci constitue en quelque sorte un égaliseur, ce qui +permet d'améliorer notablement la qualité de la sortie MIDI. + +La clarinette de l'exemple suivant jouera relativement moins fort que la +flûte. Rappelez-vous que pour que cela fonctionne correctement, la +première note de chacun des instruments doit être affublée d'une +indication de nuance. + +@lilypond[verbatim,quote] +\score { + << + \new Staff { + \key g \major + \time 2/2 + \set Staff.midiInstrument = #"flute" + \set Staff.midiMinimumVolume = #0.7 + \set Staff.midiMaximumVolume = #0.9 + \new Voice \relative c''' { + r2 g\mp g fis~ + fis4 g8 fis e2~ + e4 d8 cis d2 + } + } + \new Staff { + \key g \major + \set Staff.midiInstrument = #"clarinet" + \set Staff.midiMinimumVolume = #0.3 + \set Staff.midiMaximumVolume = #0.6 + \new Voice \relative c'' { + b1\p a2. b8 a + g2. fis8 e + fis2 r + } + } + >> + \layout {} + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + } + } +} +@end lilypond + + +@unnumberedsubsubsec Égalisation de plusieurs instruments (ii) +@translationof Equalizing different instruments (ii) + +Lorsque les propriétés volume minimum et maximum n'ont pas été définies, +LilyPond appliquera par défaut une légère égalisation pour quelques +instruments. Les instrument concernés ainsi que le niveau d'égalisation +sont répertoriés dans une table @notation{instrument-equalizer-alist} +du fichier @file{../scm/midi.scm}. + +Vous pouvez remplacer l'égaliseur basique en définissant une nouvelle +procédure Scheme @code{instrumentEqualizer} au sein du contexte +@code{Score}. Cette procédure prend en unique argument le nom d'un +instrument MIDI et renverra une paire de fractions correspondant au +minimum et maximum de volume alloué à cet instrument. Cette +substitution fonctionne selon le même principe que celui que nous avons +vu en dédut de chapitre avec @code{dynamicAbsoluteVolumeFunction}. +L'égaliseur par défaut, @notation{default-instrument-equalizer}, est +défini dans le fichier @file{../scm/midi.scm}@tie{}; son analyse vous +aidera à construire votre propre procédure. + +Nous allons, dans l'exemple suivant, régler le volume relatif de la +flûte et de la clarinette -- au même niveau que dans le précédent. + +@lilypond[verbatim,quote] +#(define my-instrument-equalizer-alist '()) + +#(set! my-instrument-equalizer-alist + (append + '( + ("flute" . (0.7 . 0.9)) + ("clarinet" . (0.3 . 0.6))) + my-instrument-equalizer-alist)) + +#(define (my-instrument-equalizer s) + (let ((entry (assoc s my-instrument-equalizer-alist))) + (if entry + (cdr entry)))) + +\score { + << + \new Staff { + \key g \major + \time 2/2 + \set Score.instrumentEqualizer = #my-instrument-equalizer + \set Staff.midiInstrument = #"flute" + \new Voice \relative c''' { + r2 g\mp g fis~ + fis4 g8 fis e2~ + e4 d8 cis d2 + } + } + \new Staff { + \key g \major + \set Staff.midiInstrument = #"clarinet" + \new Voice \relative c'' { + b1\p a2. b8 a + g2. fis8 e + fis2 r + } + } + >> + \layout { } + \midi { + \context { + \Score + tempoWholesPerMinute = #(ly:make-moment 72 2) + } + } +} +@end lilypond + +@ignore +@c Delete when satisfied this is adequately covered elsewhere -td + +@n ode Microtones in MIDI +@s ubsection Microtones in MIDI + +@cindex microtones in MIDI + +Microtones consisting of half sharps and half flats are exported +to the MIDI file and render correctly in MIDI players which support +pitch bending. See @ref{Note names in other languages}. Here is +an example showing all the half sharps and half flats. It can be +copied out and compiled to test microtones in your MIDI player. + +@lilypond[verbatim,quote] +\score { + \relative c' { + c4 cih cis cisih + d4 dih ees eeh + e4 eih f fih + fis4 fisih g gih + gis4 gisih a aih + bes4 beh b bih + } + \layout {} + \midi {} +} +@end lilypond +@end ignore + + +@node MIDI et percussions +@subsection MIDI et percussions +@translationof Percussion in MIDI + +La notation pour percussions recourt généralement à un contexte +particulier -- le @code{DrumStaff} -- qui permet d'affecter directement +les instruments concernés au canal@tie{}10 qui leur est réservé. + +Certains instruments, tels le xylophone, le marimba, le vibraphone ou +les timbales, se traitent cependant comme des instruments +@qq{classiques} puisqu'ils sont capables d'émettre des hauteurs +différentes@tie{}; leurs notation relève donc d'un contexte @code{Staff} +standard, et non d'un @code{DrumStaff} pour pouvoir être rendus +correctement en MIDI. + +D'autres percussions, bien que n'émettant qu'un seul son et inclus dans +le standard @emph{general MIDI}, comme le tom mélodique ou le tambour +taiko, ne sont pas attachés au canal@tie{}10. Ces instruments doivent +donc être saisi dans un contexte @code{Staff}, en utilisant la hauteur +appropiée. + +De nombreux instruments de la famille des percussions, les castagnettes +par exemple, n'existent pas dans le standard @emph{general MIDI}. +L'alternative, bien que peu satisfaisante, consiste à leur attribuer le +son le plus proche dans la banque standard. + +@c TODO Expand with examples, and any other issues + +@knownissues + +Le standard @emph{general MIDI} ne dispose pas du @emph{rim shot}@tie{}; +LilyPond lui subtitue un @emph{sidestick}. + + +@node Le script Articulate +@subsection Le script Articulate +@translationof The Articulate script + +Vous obtiendrez un rendu MIDI plus @qq{réaliste} grâce au script +@code{articulate}. Celui-ci va tout faire pour d'une part prendre en +compte les articulations (liaisons, staccato, etc.) -- en ajoutant un +blanc aux notes raccourcies -- et, d'autre part, développer les trilles +ou groupettos ainsi que tenir compte des éventuels rallentando et +accelerando. + +L'utilisation du script @code{articulate} se fait en deux temps. Vous +devez dans un premier temps inclure son fichier d'initialisation en +ajoutant en tête de votre fichier la ligne + +@example +\include "articulate.ly" +@end example + +puis, dans le bloc @code{\score}, indiquer que toutes les répétitions +seront développées et appliquer la commande à votre musique@tie{}: + +@example +\unfoldRepeats \articulate << + tout le reste du bloc contenant la partition... +>> +@end example + +Une fois votre fichier modifié de la sorte, vous constaterez que la +version imprimable aura été modifiée en profondeur. Le bloc +@code{\midi} produira par contre un fichier MIDI de bien meilleure +qualité. + +Bien que cela ne gène en rien le fonctionnement du script +@code{articulate}, lui adjoindre la commande @code{\unfoldRepeats} comme +illustré ci-dessus permettra le rendu d'un certain nombre +d'articulations tels les trilles. + +@knownissues + +Dans la mesure où la script @code{articulate} tend à raccourcir les +accords, certaines musiques, notamment pour l'orgue, paraîtront de moins +bonne qualité. + + +@node Extraction d'informations musicales +@section Extraction d'informations musicales +@translationof Extracting musical information + +En plus de générer du graphisme et du MIDI, LilyPond peut présenter +l'information musicale sous forme textuelle. + +@menu +* Affichage de notation au format LilyPond:: +* Affichage de la musique sous forme d'expression scheme:: +* Enregistrement d'événements musicaux dans un fichier:: +@end menu + + +@node Affichage de notation au format LilyPond +@subsection Affichage de notation au format LilyPond +@translationof Displaying LilyPond notation + +@funindex \displayLilyMusic + +La fonction musicale @code{\displayLilyMusic}, disponible uniquement +pour un traitement en ligne de commande, permet d'afficher en +notation LilyPond une expression musicale. Par exemple, + +@example +@{ + \displayLilyMusic \transpose c a, @{ c4 e g a bes @} @} @end example +affichera + +@example +@{ a,4 cis e fis g @} +@end example + +LilyPond affichera le résultat sous forme de message en console, au +milieu de toutes les informations de compilation. Afin d'isoler ces +messages et enregistrer le résultat de la fonction +@code{\display@{MATÉRIAU@}}, pensez à rediriger la sortie vers un +fichier. + +@example +lilypond fichier.ly >display.txt +@end example + + +@node Affichage de la musique sous forme d'expression scheme +@subsection Affichage de la musique sous forme d'expression scheme +@translationof Displaying scheme music expressions + +Voir @rextend{Displaying music expressions}. + + +@node Enregistrement d'événements musicaux dans un fichier +@subsection Enregistrement d'événements musicaux dans un fichier +@translationof Saving music events to a file + +LilyPond vous permet de sauvegarder dans un fichier séparé, sur la base +de la portée, les événements musicaux. Vous devrez pour ce faire +inclure dans votre fichier maître un fichier d'initialisation +spécifique@tie{}: + +@example +\include "event-listener.ly" +@end example + +Pour chaque portée que comporte votre partition, vous obtiendrez un +fichier @file{NOMFICHIER-PORTÉENOMMÉE.notes} ou +@file{NOMFICHIER-unnamed-staff.notes}. Notez bien que si plusieurs +portées ne sont pas explicitement nomées, tous leurs événements seront +regroupés et mélangés dans le même fichier. Le résultat ressemblera à +ceci@tie{}: -@node Controlling MIDI dynamics -@subsection Controlling MIDI dynamics +@example +0.000 note 57 4 p-c 2 12 +0.000 dynamic f +0.250 note 62 4 p-c 7 12 +0.500 note 66 8 p-c 9 12 +0.625 note 69 8 p-c 14 12 +0.750 rest 4 +0.750 breathe +@end example + +Il s'agit d'un tableau dont les colonnes sont délimitées par une +tabulation. Chaque ligne comporte deux champs fixes suivis d'un certain +nombre de paramètres optionnels. + +@example +@var{temps} @var{type} @var{...paramètres...} +@end example -@untranslated +Ces informations peuvent faire l'objet d'un retraîtement par d'autres +programmes, comme des scripts python, aux fins de recherche en analyse +musicologique ou des expériences à partir du rendu de LilyPond. -@unnumberedsubsubsec Dynamic marks -@unnumberedsubsubsec Overall MIDI volume -@unnumberedsubsubsec Equalizing different instruments (i) -@unnumberedsubsubsec Equalizing different instruments (ii) +@knownissues + +Tous les événements ne sont pas pris en charge par +@file{event-listener.ly}. Il s'agit en premier lieu d'une +démonstration, un @qq{proof of concept} du potentiel de LilyPond. Si +certains des éléments que vous cherchez à obtenir n'apparaîssent pas, +recopiez le fichier @file{event-listener.ly} dans votre répoertoire et +modifiez-le de telle sorte qu'il travaille selon vos attentes.