@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-

@ignore
   Translation of GIT committish: 4944e92191308c589f9ed1d3796c6403a2280d18

   When revising a translation, copy the HEAD committish of the
   version that you are working on.  For details, see the Contributors'
   Guide, node Updating translation committishes..
@end ignore

@c \version "2.19.24"

@c Translators: Jean-Charles Malahieude, John Mandereau, Gauvain Pocentek

@node La gravure musicale
@chapter La gravure musicale
@translationof Music engraving

Ce chapitre traite des objectifs et de l'architecture de LilyPond.

@c TODO:
@c remove 3mm eps bounding box left padding for Sarabande (This will
@c     require adding a new snippet option to lilypond-book.py
@c check formatting of HTML output
@c

@menu
* L'histoire de LilyPond::      ce qui ne va pas avec les logiciels
* La gravure en détails::       de l'homme à la machine
* La gravure automatisée::      de la machine à l'homme
* De la théorie à la pratique:: qui fait quoi
* Démonstration par l'exemple:: LilyPond à l'œuvre
* Comparatif (BWV 861)::
@end menu


@node L'histoire de LilyPond
@section L'histoire de LilyPond
@translationof The LilyPond story

Bien avant que LilyPond soit à l'origine de tout un matériel d'orchestre
d'excellente facture ou qu'il participe à la création d'ouvrages
universitaires, avant même qu'il serve à imprimer la plus simple des
mélodies, avant que la communauté des utilisateurs de LilyPond
s'étende sur toute la planète, LilyPond est parti du constat
suivant :

@quotation
Pourquoi la plupart des partitions qui sortent d'un ordinateur ne
parvient-elle pas à égaler la beauté et l'élégance des partitions
gravées à la main ?
@end quotation

@noindent
Certaines réponses sont évidentes si l'on considère les deux partitions
@ifnottex
ci-dessous.
@end ifnottex
@iftex
des pages qui suivent.
@end iftex
La première, qui date des années 1950, a été gravée à la main ; la
seconde est une édition informatisée contemporaine.

@ifnottex
@quotation
@noindent
Bärenreiter BA 320, @copyright{}1950 :

@sourceimage{baer-suite1-fullpage,,,png}
@end quotation

@quotation
@noindent
Henle n° 666, @copyright{}2000 :

@sourceimage{henle-suite1-fullpage,,,png}
@end quotation
@end ifnottex

Il s'agit de la même musique, tirée de la première suite pour
violoncelle solo de Bach, mais ce n'est pas si évident, surtout
lorsqu'on imprime ces deux pages et les considère à distance.
@ifnottex
(Les images contenues dans la version PDF de ce manuel sont en haute
résolution, en vue de leur impression.)
@end ifnottex
Si vous posez ces pages sur un pupitre et les lisez ou prenez votre
archet, vous constaterez que la gravure manuelle est nettement plus
agréable à la vue.  Ses lignes sont fluides et il y a du mouvement,
c'est de la musique et c'est vivant.  Quant à l'édition moderne, elle a
l'air terne et mécanique.

Ce qui rend cette nouvelle édition différente n'est pas évident au
premier coup d'œil : c'est propre et condensé, presque « mieux »
que l'autre dans la mesure où tout y est « calculé » pour atteindre
l'uniformité.  À vrai dire, il nous a fallu un moment pour nous en
rendre compte.  Notre but étant d'améliorer la notation informatisée, il
nous fallait mettre le doigt sur ce qui ne va pas.

Le problème se situe au niveau même de la précision toute mathématique
qui amène à l'uniformité de cette nouvelle édition.  Considérons les
barres de mesure en milieu de ligne : dans la partition
traditionnelle, leur emplacement varie quelque peu, à l'inverse de la
nouvelle, où toutes les barres sont rigoureusement alignées.  Pour que
ce soit bien clair, le schéma ci-dessous montre en parallèle ce
positionnement, tant pour la version traditionnelle -- à gauche -- que
pour la version moderne -- à droite.

@quotation
@iftex
@sourceimage{pdf/page-layout-comparison,,,}
@end iftex
@ifnottex
@sourceimage{page-layout-comparison,,,png}
@end ifnottex
@end quotation
@noindent

Sur la partition générée par l'ordinateur, même les notes sont alignées
et la mélodie finit par disparaître derrière un quadrillage à base de
signes musicaux.

Il y a bien sûr d'autres divergences.  En ce qui concerne l'édition
traditionnelle, les traits verticaux sont plus épais, les liaisons plus
rapprochées des têtes de note, et la pente des ligatures -- liens
groupant les croches -- pas toujours la même.  D'aucuns diront que tout
ceci n'est que pinaillerie, il n'en demeure pas moins que cette
partition a plus de lisibilité.  Dans la partition informatisée, il n'y
a pratiquement aucune différence d'une ligne à l'autre, et si
l'interprète la quitte des yeux un instant, il risque de ne plus savoir
où il en était sur la page.

LilyPond a été conçu dans le but de résoudre les problèmes que nous
avons décelés dans divers logiciels existant et aussi dans l'optique
d'atteindre une qualité comparable aux meilleures partitions gravées à
la main.

@iftex
@page
@noindent
Bärenreiter BA 320, @copyright{}1950 :

@sourceimage{baer-suite1-fullpage,16cm,,}
@page
@noindent
Henle no 666, @copyright{}2000 :
@sp 3
@sourceimage{henle-suite1-fullpage,16cm,,}
@page
@end iftex


@node La gravure en détails
@section La gravure en détails
@translationof Engraving details

@cindex gravure
@cindex typographie musicale
@cindex musique et typographie
@cindex plate engraving
@cindex music engraving

L'art de la typographie musicale est celui de la @emph{gravure
musicale}.  Ce terme vient du procédé traditionnel de l'impression
musicale@footnote{Dès le début, les imprimeurs européens ont essayé
plusieurs techniques, allant de la matrice en bois sculpté à la fine
plaque de métal ciselée, en passant par des typons mobiles.  L'avantage
de ces derniers résidait dans la possibilité d'effectuer aisément des
corrections et de facilement ajouter à la musique texte et paroles.
Néanmoins seule la gravure offrait l'avantage d'appréhender le rendu
global.  C'est la raison pour laquelle la gravure est devenue le
standard en matière de musique imprimée, à l'exception près de certains
livres de cantiques, y compris au XXe siècle, essentiellement pour des
raisons de simplicité et de coût.}.  Il y a encore quelques décennies,
les partitions étaient réalisées en taillant et ciselant la musique dans
des plaques de zinc ou d'étain, en inverse, comme dans un miroir.  Ces
plaques étaient encrées et les reliefs créés par les poinçons et les
découpes retenaient l'encre.  La partition était alors réalisée en
pressant le papier contre la plaque.  Découpes et poinçons étaient
entièrement faits à la main.  Dans la mesure où les corrections étaient
presque irréalisables, la gravure devait être correcte dès le premier
essai.  Cela demande évidemment une très grande habileté.  La gravure
musicale est un métier d'artisan, appris sur le tas.  Un graveur ne
devenait un maître accompli qu'après une dizaine d'années de pratique.

@quotation
@iftex
@sourceimage{hader-slaan,,7cm,}
@end iftex
@ifnottex
@sourceimage{hader-slaan,,,jpg}
@end ifnottex
@end quotation

LilyPond s'inspire du travail réalisé par les maîtres graveurs qui
officiaient chez les éditeurs européens jusque dans les années 1950.
Ceux-ci sont bien  souvent considérés comme ayant atteint le sommet de
leur art, et comptent dans leurs rangs des maisons telles que
Bärenreiter, Duhem, Durand, Hofmeister, Peters ou Schott.  Au fil de
notre analyse de ces éditions, nous en avons appris encore plus sur ce
qu'il faut pour obtenir une partition d'excellente facture, et ce sur
quoi LilyPond devait porter ses efforts.

@c Now all newly printed music is produced with computers.  This has
@c obvious advantages: prints are cheaper to make, editorial work can be
@c delivered by email, and the original data can be easily stored.
@c Unfortunately, computer-generated scores rarely match the quality of
@c hand-engraved scores.  Instead, computer printouts have a bland,
@c mechanical look, which makes them unpleasant to play from.

@menu
* Fontes et polices::             De la création des polices musicales
* Espacement::                    Considérations sur les espacements
* Lignes supplémentaires::        Cas particulier en matière de notation
* Tailles::                       Considérations sur la taille des portées
* La raison de tous ces efforts:: Pourquoi s'attacher aux détails
@end menu


@node Fontes et polices
@unnumberedsubsec Fontes et polices
@translationof Music fonts

Les images ci-dessous mettent en évidence certaines différences entre
l'art du graveur traditionnel et le résultat habituel sorti d'un
ordinateur.  L'image de gauche est un fac-similé d'un bémol tiré
d'une édition Bärenreiter traditionnelle ; celle de droite est
issue de la même partition, éditée en 2000.  Bien que toutes deux soient
imprimées avec le même encrage, la version « ancienne » paraît plus
noire : les lignes de la portée y sont plus épaisses et le galbe du
bémol de Bärenreiter est à la limite de la volupté.  Sur l'autre image,
les lignes sont plus fines et le bémol semble raide, coincé.

@multitable @columnfractions .25 .25 .25 .25
@item @tab
@ifnotinfo
@iftex
@sourceimage{baer-flat-gray,,4cm,}
@end iftex
@ifnottex
@sourceimage{baer-flat-gray,,,png}
@end ifnottex

@tab
@iftex
@sourceimage{henle-flat-gray,,4cm,}
@end iftex
@ifnottex
@sourceimage{henle-flat-gray,,,png}
@end ifnottex

@end ifnotinfo
@ifinfo
@sourceimage{henle-flat-bw,,,png}
@sourceimage{baer-flat-bw,,,png}
@sourceimage{lily-flat-bw,,,png}
@end ifinfo


@item @tab
Bärenreiter (1950)
@tab
Henle (2000)

@end multitable

@cindex symboles musicaux
@cindex police
@cindex densité
@cindex contraste

Lorsque nous nous sommes décidés à écrire un programme permettant de
typographier la musique, aucune police librement accessible ne
correspondait à l'esthétique de nos partitions préférées.  Sans
toutefois nous décourager, nous avons créé notre propre jeu de symboles
musicaux à partir des éditions traditionnelles dont nous disposions.
L'expérience aidant, notre goût typographique s'est développé et nous
avons pu appréhender certaines subtilités stylistiques qui nous font
trouver maintenant de piètre qualité des polices que nous avions tout
d'abord appréciées.

À titre d'exemple, voici deux fontes musicales : la première ligne
comporte des caractères de la police par défaut du logiciel Sibelius --
la police @emph{Opus} -- et la deuxième, ces mêmes caractères dans notre
propre police pour LilyPond.

@quotation
@iftex
@sourceimage{pdf/OpusAndFeta,,,}
@end iftex
@ifnottex
@sourceimage{OpusAndFeta,,,png}
@end ifnottex
@end quotation

Les symboles de LilyPond sont plus forts et leur épaisseur plus
équilibrée, ce qui d'ailleurs les rend plus lisibles.  Les extrémités en
pointe, comme pour le soupir, devraient avoir une terminaison légèrement
arrondie plutôt qu'un angle tranchant.  Ceci s'explique par la fragilité
des poinçons qui s'émoussent rapidement lors du martellement et de la
ciselure.  Par ailleurs, la densité de la police doit tenir compte de
l'épaisseur des lignes, ligatures et liaisons afin d'obtenir un rendu
plein d'intensité et d'équilibre.

Vous noterez aussi que notre ronde n'est pas ovoïde, mais plutôt en
forme de losange.  La barre de notre bémol est comme brossée, le haut
étant de fait un peu plus large.  Notre dièse et notre bécarre sont plus
évidents à reconnaître à distance du fait que leurs barres transversales
n'ont pas la même pente et que les verticales sont plus épaisses.


@node Espacement
@unnumberedsubsec Espacement
@translationof Optical spacing

Si l'on considère l'espacement, sa répartition devrait refléter la durée
des notes.  Néanmoins, et comme nous l'avons vu plus haut avec la suite
de Bach, la plupart des éditions modernes se basent sur des durées à la
précision mathématique, ce qui entraîne un effet des plus monotones.
Dans l'exemple qui suit, le même motif est imprimé deux fois : la
première en appliquant un espacement chronométrique, la seconde avec
quelques corrections.  Quelle version remporte vos suffrages ?

@cindex optique et espacement
@cindex espacement et effet d'optique

@lilypond
\paper {
  ragged-right = ##t
  indent = #0.0
}

music = {
   c'4 e''4 e'4 b'4 |
   \stemDown
   b'8[ e'' a' e'']
   \stemNeutral
   e'8[ e'8 e'8 e'8]
}
\score
{
  \music
  \layout {
    \context {
      \Staff
      \override NoteSpacing.stem-spacing-correction = #0.0
      \override NoteSpacing.same-direction-correction = #0.0
      \override StaffSpacing.stem-spacing-correction = #0.0
    }
  }
}
@end lilypond

@lilypond
\paper {
  ragged-right = ##t
  indent = #0.0
}

music = {
   c'4 e''4 e'4 b'4 |
   \stemDown
   b'8[ e'' a' e'']
   \stemNeutral
   e'8[ e'8 e'8 e'8]
}

\score
{
  \music
  \layout {
    \context {
      \Staff
      \override NoteSpacing.stem-spacing-correction = #0.6
    }
  }
}
@end lilypond

@cindex rythmes réguliers
@cindex espacement régulier
@cindex régulier, espacement

Chaque mesure de ce fragment comporte des notes d'égale valeur, ce qui
devrait se constater au niveau de l'espacement.  Malheureusement, notre
œil nous trompe : non seulement il considère la distance séparant
deux têtes de notes mais, de surcroît, il prend en compte l'espace
entre deux hampes.  Par voie de conséquence, une succession de notes
hampe en haut puis hampe en bas devrait comporter un espace accru et,
dans une situation inverse, être plus resserrée, sans oublier de
considérer la hauteur de chacune de ces notes.  La deuxième ligne
comporte de tels aménagements alors que, dans la première ligne, la
succession hampe descendante puis montante laisse apparaître des notes
resserrées.  Un maître graveur ajusterait les espaces pour obtenir un
rendu qui flatte l'œil.

Autre effet d'optique -- que d'ailleurs LilyPond prend en considération
-- l'espace entre la hampe et la barre de mesure.  Lorsqu'une barre est
précédée d'une hampe montante, il est judicieux d'accroître l'espace
qui les sépare pour éviter cette sensation de tassement.  Une note dont
la hampe va vers le bas ne nécessite pas un tel ajustement.


@node Lignes supplémentaires
@unnumberedsubsec Lignes supplémentaires
@translationof Ledger lines

@cindex lignes supplémentaires
@cindex collisions

Les lignes supplémentaires sont une gageure pour le typographe :
les différents symboles musicaux doivent être suffisamment rapprochés
pour que le lecteur identifie la hauteur au premier coup d'œil.  Vous
noterez, dans l'exemple qui suit, que les lignes supplémentaires sont un
peu plus épaisses que celles de la portée.  Par ailleurs, un maître
graveur écourtera la ligne supplémentaire en présence d'une altération.
LilyPond, dans sa recherche d'efficacité, adopte ces pratiques.

@multitable @columnfractions .25 .25 .25 .25
@item @tab

@iftex
@sourceimage{baer-ledger,3cm,,}
@end iftex
@ifnottex
@sourceimage{baer-ledger,,,png}
@end ifnottex

@tab

@iftex
@sourceimage{lily-ledger,3cm,,}
@end iftex
@ifnottex
@sourceimage{lily-ledger,,,png}
@end ifnottex

@end multitable


@node Tailles
@unnumberedsubsec Tailles
@translationof Optical sizing

Une même œuvre peut être imprimée dans différents formats -- d'une
partie instrumentale au conducteur format de poche.  Les graveurs
traditionnels utilisaient alors des poinçons différents pour obtenir le
meilleur rendu selon la taille de la partition.  L'avènement des fontes
digitalisées permet d'obtenir n'importe quelle taille à partir d'un
simple tracé.  Bien que ceci constitue un progrès en soi, il nous faut
cependant nuancer : les glyphes sont moins forts lorsqu'ils sont de
taille réduite.

Pour les besoins de LilyPond, nous avons créé des polices de graisse
différente selon la taille.  Voici ce que produit LilyPond dans une
taille de portée de 26 points :

@quotation
@iftex
@sourceimage{pdf/size26,,23mm,}
@end iftex
@ifnottex
@sourceimage{size26,,,png}
@end ifnottex
@end quotation

@noindent
et la même musique en 11 points, grossie de 236 % pour obtenir
une taille identique à l'image précédente :

@quotation
@iftex
@sourceimage{pdf/size11,,23mm,}
@end iftex
@ifnottex
@sourceimage{size11,,,png}
@end ifnottex
@end quotation

@noindent
Comme vous le constatez, LilyPond imprime des lignes un peu plus
épaisses pour garantir une meilleure lecture à taille réduite.

Ceci permet par ailleurs de faire coexister harmonieusement
plusieurs portées de taille différente sur une même page :

@c Grieg's Violin Sonata Op. 45
@lilypond[indent=1.5\cm]
global = {
  \time 6/8
  \key c \minor
}

\score {
  <<
    \new Staff \with {
      \magnifyStaff #2/3
    }
    \relative {
      \global
      \set Staff.instrumentName = "Violin"
      c'8.(\f^> b16 c d) ees8.(^> d16 c b)
      g8.(^> b16 c ees) g8-.^> r r
      R2.
    }
    \new PianoStaff <<
      \set PianoStaff.instrumentName = "Piano"
      \new Staff \relative {
        \global
        s2.
        s4. s8 r8 r16 <c' f aes c>
        <c f aes c>4.^> <c ees g>8 r r
      }
      \new Staff \relative {
        \global
        \clef "bass"
        <<
        {
          \once \override DynamicText.X-offset = #-3
          <ees g c>2.~->^\f
          <ees g c>4.~ <ees g c>8
        } \\ {
          <c g c,>2.~
          <c g c,>4.~ <c g c,>8
        }
        >>
        r8 r16 <f, c' aes'>16
        <f c' aes'>4.-> <c' g'>8 r r
      }
    >>
  >>
}
@end lilypond


@node La raison de tous ces efforts
@unnumberedsubsec La raison de tous ces efforts
@translationof Why work so hard?

Les musiciens sont normalement plus concentrés sur la manière dont ils
jouent la musique que sur son apparence, aussi ces pinailleries sur des
détails de typographie peuvent paraître académiques.  Il n'en est rien.
La partition contribue, au même titre que bien d'autres éléments, à
l'existence même d'une représentation : tout doit être fait pour
que l'interprète donne le meilleur de lui-même, et ce qui est peu clair
ou pas agréable à lire constitue un frein.

La musique gravée de manière traditionnelle présente des symboles denses
et des lignes épaisses. Ceci produit un résultat équilibré, à plus
forte raison si la partition est éloignée du lecteur, comme lorsqu'elle
est posée sur un pupitre.  Une répartition attentive des blancs permet
de resserrer la musique sans pour autant tasser les symboles et, au
final, diminue le nombre de tournes -- avantage indéniable.

C'est une caractéristique commune de la typographie.  La présentation
devrait être soignée, non seulement pour l'amour de l'art, mais plus
spécialement parce qu'elle vient en aide au lecteur dans sa tâche.
Pour du matériel d'interprétation tel que les partitions de musique,
ceci est doublement important : les musiciens sont limités dans
leur attention.  Au moins leur attention se porte sur la lecture, au
plus ils peuvent se concentrer sur l'exécution.  En d'autres termes, une
meilleure typographie se traduit par une meilleure interprétation.

Ces considérations montrent bien que la typographie musicale est un art
à la fois complexe et plein de subtilités, et qu'elle requiert des
compétences particulières que la majorité des musiciens ne possède pas.
LilyPond s'efforce de transposer le degré d'excellence de la gravure
traditionnelle à l'ère de l'ordinateur et donc de le mettre à
disposition de tous les musiciens.  Nous avons affiné nos algorithmes,
le @emph{design} de nos fontes et les réglages du programme de manière à
produire des partitions d'une qualité comparable aux bonnes vieilles
éditions que nous avons toujours autant de plaisir à voir et à
interpréter.


@node La gravure automatisée
@section La gravure automatisée
@translationof Automated engraving

@cindex gravure automatisée
@cindex automatisée, gravure

Nous allons maintenant examiner les éléments nécessaires à la création
d'un logiciel capable d'imiter le rendu des partitions gravées à
l'ancienne.  Nous commencerons par voir comment inculquer à l'ordinateur
les « bonnes manières » de la présentation.  Nous nous attarderons
ensuite sur l'analyse comparative par rapport aux éditions
traditionnelles, avant de considérer le degré de flexibilité à y inclure
pour être en mesure de gérer les différents cas de figure particuliers à
la notation.

@menu
* Concours de beauté::           l'option du moindre mal
* Modélisation et banc d'essai:: l'évaluation des performances
* Règles de formatage::          l'architecture flexible
@end menu


@node Concours de beauté
@unnumberedsubsec Concours de beauté
@translationof Beauty contests

Quels sont en réalité nos critères de formatage ?  Considérant
l'image suivante, laquelle de ces trois configurations devrions-nous
choisir pour formater la liaison ?

@lilypond
\relative {
    \clef bass
    \once \override Slur.positions = #'(1.5 . 1)
    e8[( f] g[ a b d,)] r4
    \once \override Slur.positions = #'(2 . 3)
    e8[( f] g[ a b d,)] r4
    e8[( f] g[ a b d,)] r4
}
@end lilypond

Seuls quelques ouvrages traitent de l'art de graver la musique.  Ils ne
contiennent malheureusement que des généralités et quelques exemples.
La lecture de telles règles est certes instructive, mais est très loin
de nous conduire à un algorithme prêt à être implémenté dans un
programme.  Dans la pratique, suivre les instructions de ces traités
aboutirait à des algorithmes qui figent bon nombre d'exceptions.
Répertorier tous ces cas de figure demanderait un travail considérable,
qui finalement ne les couvrirait pas tous.

@quotation
@iftex
@sourceimage{ross-beam-scan,7cm,,}
@end iftex
@ifnottex
@sourceimage{ross-beam-scan,,,.jpg}
@end ifnottex
@end quotation

@emph{Règles de formatage définies par l'exemple. Image tirée de
l'ouvrage de Ted Ross « The Art of Music Engraving »}

Plutôt que d'écrire une foultitude de règles qui embrasserait tous les
cas de figure possibles et imaginables en matière de mise en forme, nous
avons préféré inculquer à LilyPond un certain nombre d'objectifs qui lui
permette de choisir entre différentes alternatives selon leur
esthétique.  Pour ce faire, chacune des configurations est analysée en
terme de moins bonne qualité, et nous opterons pour celle étant la moins
mauvaise.

Voici, à titre d'exemple, trois configurations possibles pour le tracé
d'une liaison ; LilyPond leur attribue individuellement une « note
de laideur ».  Le premier essai se voit attribuer 15,39 points
notamment pour l'effleurement de la tête de note.

@lilypond
\relative {
    \clef bass
    \once \override Slur.positions = #'(1.5 . 1)
    e8[(_"15.39" f] g[ a b d,)] r4
}
@end lilypond

La liaison ci-dessous reste à une distance uniforme des notes, mais il
faut tenir compte du fait qu'elle n'est pas rattachée aux première et
dernière notes. Ceci nous fait 1,71 points pour le début de la
liaison et 9,37 pour la terminaison -- qui est beaucoup plus éloignée de
la dernière note.  Par ailleurs, la liaison monte alors que la mélodie
redescend, ce qui entraîne une pénalité de 2 points.  Ceci nous
fait un total de 13,08 points de laideur.

@lilypond
\relative {
    \clef bass
    \once \override Slur.positions = #'(2 . 3)
    e8[(_"13.08" f] g[ a b d,)] r4
}
@end lilypond

Quant à la liaison qui suit, seule la terminaison reste éloignée de la
dernière note, ce qui donne 10,04 points de laideur auxquels nous
ajoutons 2 autres points pour la pente ascendante.  Cette configuration
étant la moins laide, ou plutôt la version la plus satisfaisante, nous
la sélectionnons.

@lilypond
\relative {
    \clef bass
    e8[(_"12.04" f] g[ a b d,)] r4
}
@end lilypond

Cette manière de procéder est générique, et nous y avons recours dans
bon nombre de situations, comme pour déterminer la pente d'un lien de
croches, formater des accords liés, formater des accords avec des
valeurs pointées, positionner les sauts de ligne ou de page.  Cette
technique est consommatrice de temps de calcul, dans la mesure où elle
examine de nombreuses possibilités ; néanmoins, le jeu en vaut la
chandelle, puisque le résultat final est bien meilleur et nous rapproche
des éditions traditionnelles.


@node Modélisation et banc d'essai
@unnumberedsubsec Modélisation et banc d'essai
@translationof Improvement by benchmarking

Au fil du temps, le rendu de LilyPond a évolué, et continue de
s'améliorer lorsqu'on le compare aux partitions gravées à la main.

Voici un extrait de l'une de nos éditions de référence (Bärenreiter
BA 320) :

@iftex
@sourceimage{baer-sarabande-hires,16cm,,}
@end iftex
@ifnottex
@sourceimage{baer-sarabande,,,png}
@end ifnottex

@noindent
et ce que génère l'une des anciennes versions de LilyPond -- la 1.4,
publiée en mai 2001 :

@iftex
@sourceimage{pdf/lily14-sarabande,16cm,,}
@end iftex
@ifnottex
@sourceimage{lily14-sarabande,,,png}
@end ifnottex

@noindent La sortie LilyPond est certes lisible, et acceptable pour
beaucoup de gens.  Cependant, une comparaison minutieuse avec une
édition gravée à la main révèle de nombreuses erreurs de
formatage :

@iftex
@sourceimage{lily14-sarabande-annotated-hires,16cm,,}
@end iftex
@ifnottex
@sourceimage{lily14-sarabande-annotated,,,png}
@end ifnottex

@itemize @bullet
@item trop d'espace avant la métrique
@item la hampe des notes ligaturées est trop longue
@item les deuxième et quatrième mesures sont trop tassées
@item la liaison est affreuse
@item les indications de trille sont trop grosses
@item les hampes sont trop fines
@end itemize

@noindent
Passons sous silence les notes et indications absentes, tout comme
la faute de hauteur !

En ajustant les algorithmes, paramètres et polices concernés, nous avons
pu améliorer le résultat.  La deuxième ligne ci-dessous a été générée
par la version la plus récente de LilyPond (@version{}).

@iftex
@sourceimage{baer-sarabande-hires,16cm,,}
@end iftex
@ifnottex
@sourceimage{baer-sarabande,,,png}
@end ifnottex

@lilypond[staffsize=17.5,line-width=15.9\cm]
\relative c {
  \clef "bass"
  \key d \minor
  \time 3/4
  \mergeDifferentlyDottedOn
  <<
    {\slurDashed d8.-\flageolet( e16) e4.-\trill( d16 e)}
     \\
    {d4_2 a2}
  >>
  \slurDashed
  <f' a, d,>4. e8( d c)
  \slurSolid
  bes g' f e16( f g_1 a_2 bes_3 d,_2)
  \slurDashed
  cis4.-\trill b8_3( a g)
  <<
    {\slurDashed d'8.( e16) e4.-\trill( d16 e)}
     \\
    {<f, a>4 a2}
  >>
}
@end lilypond

@noindent
Sans être un clone de l'édition de référence, cette sortie est plus
proche d'une qualité de publication que les précédentes.


@node Règles de formatage
@unnumberedsubsec Règles de formatage
@translationof Getting things right

Nous pouvons aussi évaluer les capacités de LilyPond dans ses choix, en
comparant ses résultats avec ce que génèrent d'autres logiciels du
marché.  Notre choix s'est porté sur Finale 2008, l'un des logiciels les
plus populaires notamment en Amérique du Nord. Son plus
proche concurrent est Sibelius, très répandu sur le marché européen.

Pour cette analyse comparative, nous avons choisi la fugue en sol mineur
du premier livre du Clavier bien tempéré de Bach (BWV 861). En
voici le thème :

@lilypond
\relative {
  \key g \minor
  \clef "treble_8"
  r8 d' ees g, fis4 g
  r8 a16 bes c8 bes16 a bes8
}
@end lilypond

@noindent

Nous nous sommes intéressés aux sept dernières mesures (27 à 34) de
l'œuvre, que nous avons saisies à la fois avec Finale et avec LilyPond.
C'est à cet endroit que le sujet est rappelé, dans une strette à trois
voix, avant de mener à la conclusion.  Pour ce qui est de Finale, nous
nous sommes abstenus d'effectuer quelque ajustement que ce soit dans le
but d'obtenir un résultat par défaut.  Ceci permet de vraiment apprécier
conjointement ce que génère chacun des deux logiciels sans retouche
aucune.  Nous avons toutefois redimensionné la page pour les besoins de
cet essai et forcé la musique à tenir sur deux systèmes pour que la
comparaison soit plus évidente.  En effet, Finale crée par défaut deux
systèmes de trois mesure, et un troisième -- s'étalant sur toute la
ligne -- pour la dernière mesure.

La plupart des différences entre ces deux éditions -- Finale pour la
première image -- se situent dans les mesures 28 et 29 :

@iftex
@sourceimage{pdf/bwv861mm28-29,14cm,,}
@end iftex
@ifnottex
@sourceimage{bwv861mm28-29,,,png}
@end ifnottex

@lilypond[staffsize=19.5,line-width=14\cm]
global = { \key g \minor }

partI = \relative {
  \voiceOne
  fis'8 d' ees g, fis4 g
  r8 a16 bes c8 bes16 a d8 r r4
}

partII = \relative {
  \voiceTwo
  d'4 r4 r8 d'16 c bes8 c16 d
  ees8 d c ees a, r r4
}

partIII = \relative {
  \voiceOne
  r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
}

partIV = \relative {
  \voiceTwo
  d4 r r2
  r8 d ees g, fis4 a
}

\score {
  <<
    % \set Score.barNumberVisibility = #all-bar-numbers-visible
    % required in 2.13
    \set Score.currentBarNumber = #28
    \bar ""
    \new PianoStaff <<
      \new Staff = "RH" <<
        \global
        \new Voice = "voiceI" { \partI }
        \new Voice = "voiceII" { \partII }
      >>
      \new Staff = "LH"
      <<
        \clef "bass"
        \global
        \new Voice = "voiceIII" { \partIII }
        \new Voice = "voiceIV" { \partIV }
      >>
    >>
  >>
  \layout {
    \context {
      \Staff
      \remove "Time_signature_engraver"
    }
    \context {
      \PianoStaff
      \override StaffGrouper.staff-staff-spacing.padding = #1
    }
  }
}
@end lilypond

Entre autres défauts du résultat brut de Finale, nous notons :

@itemize @bullet
@item La majorité des ligatures est trop éloignée de la portée.
Lorsqu'une ligature se retrouve vers le milieu de la portée, la hauteur
des hampes qui la portent est d'environ une octave.  Néanmoins, un
maître graveur les raccourcira dès lors que cette ligature est en dehors
de la portée d'une section à plusieurs voix.  Les règles de ligatures de
Finale peuvent être améliorées à l'aide du greffon @emph{Patterson
Beams}, que nous avons décidé de laisser de côté pour cet exemple.

@item Finale n'ajuste pas la position des notes qui s'entrecroisent.  Il
en résulte une lecture peu évidente lorsque les voix supérieure et
inférieure de croisent temporairement :

@c KEEP LY
@lilypond
collide = \once \override NoteColumn.force-hshift = #0

\score {
  <<
    \new Voice = "sample" \relative c''{
      \key g \minor
      <<
        { \voiceOne g4 \collide g4 }
        \new Voice { \voiceTwo bes \collide bes }
      >>
    }
    \new Lyrics \lyricsto "sample" { "bien " " mauvais" }
  >>
}
@end lilypond

@item Finale positionne tous les silences d'une même voix à une hauteur
fixe de la portée.  Si l'utilisateur peut les déplacer à loisir, le
logiciel ne se soucie en rien de ce qui se passe dans les autres voix.
Par chance, il n'y a aucune collision entre un silence et une note dans
cet exemple ; cela tient plutôt à la position des notes qu'à celle
des silences.  Tout compte fait, le mérite en revient à Bach plutôt qu'à
Finale d'éviter les collisions.

@end itemize

Cet exemple ne vise en aucun cas à démontrer que Finale est incapable de
fournir un résultat admirable.  Au contraire, un utilisateur chevronné
pourra obtenir quelque chose d'excellent, mais au prix d'une bonne dose
tant de dextérité que de temps.  La différence fondamentale entre
LilyPond et les générateurs de partition commerciaux réside dans le fait
suivant : LilyPond tend à réduire l'intervention de l'utilisateur à
sa plus simple expression, alors que les autres programmes font tout
pour avoir une interface attractive pour effectuer toutes les retouches.

Par ailleurs, Finale commet une erreur particulièrement flagrante :
il manque un bémol à la mesure 33

@quotation
@iftex
@sourceimage{pdf/bwv861mm33-34-annotate,7.93cm,,}
@end iftex
@ifnottex
@sourceimage{bwv861mm33-34-annotate,,,png}
@end ifnottex
@end quotation

@noindent
Il faut un bémol pour annuler le bécarre qui se trouve dans la même
mesure, mais Finale ne s'en rend pas compte parce qu'il se trouve dans
une autre voix.  Ainsi, l'utilisateur doit non seulement recourir à un
greffon pour gérer les ligatures, repositionner têtes de note et
silences, il lui faut de surcroît vérifier qu'à chaque mesure les
altérations sont en conformité indépendamment des voix s'il veut être à
l'abri de toute interruption d'une répétition pour une erreur dans la
partition.

S'il vous plaît d'examiner ces sept mesures de plus près, elles sont
reproduites en intégralité à la fin de cet essai, ainsi que quatre
autres versions.  Vous noterez certaines variations entre les éditions
traditionnelles, et LilyPond tient un rang acceptable.  Il reste tout de
même quelques petits défauts à régler, comme le raccourcissement peut
être exagéré des hampes ; il y a donc encore de quoi faire pour les
développeurs.

La typographie relevant d'un jugement humain, les personnes ne peuvent
être remplacées.  Beaucoup de tâches rébarbatives peuvent cependant être
automatisées : si LilyPond parvenait à gérer la plupart des
situations usuelles correctement, ce serait un grand pas en avant pour
l'édition informatisée.  Au fil du temps, le logiciel pourra être révisé
afin d'automatiser de plus en plus d'actions, de sorte que les
ajustements manuels seront de moins en moins nécessaires.  Les cas
particuliers peuvent être traités manuellement, notamment grâce à
l'architecture flexible de LilyPond.


@node De la théorie à la pratique
@section De la théorie à la pratique
@translationof Building software

Nous allons nous intéresser, dans les paragraphes qui suivent, aux
arbitrages en terme de programmation qui ont participé à l'élaboration
de LilyPond.

@menu
* Représentation de la musique::   le format de saisie
* Les constituants de la gravure:: quels symboles graver
* Flexibilité architecturale::
@end menu


@node Représentation de la musique
@unnumberedsubsec Représentation de la musique
@translationof Music representation

@cindex syntaxe
@cindex structures récursives
@cindex récursivité des structures

Le format de saisie idéal pour un système évolué de formatage consiste
en la description abstraite du contenu.  Dans le cas qui nous occupe, il
s'agit tout bonnement de la musique.  Cela n'est pas sans poser un
énorme problème : comment définir @emph{ce qu'est} la
musique ?  Pour résoudre ce problème, nous l'avons inversé.  Au
lieu de définir ce qu'est la musique, notre programme sert de
définition : nous avons écrit un programme capable de produire des
partitions, et avons ajusté son format de saisie pour être aussi léger
que possible.  Lorsque le format ne peut plus être simplifié, nous
avons par définition atteint le contenu même.  Autrement dit, notre
programme utilise la définition formelle d'un document musical.

La syntaxe est également celle de l'interface utilisateur de LilyPond,
puisqu'elle peut être facilement tapée au clavier :

@example
@{
  c'4 d'8
@}
@end example

@noindent
sont un do médium noire et un ré croche juste au-dessus.

@lilypond[quote]
{
  c'4 d'8
}
@end lilypond

À petite échelle, une telle syntaxe est pratique.  À plus grande
échelle, une structuration est nécessaire.  Sans cela, comment saisir
des pièces aussi complexes qu'un opéra ou une symphonie ?  La
structure est construite selon le même concept que les expressions
musicales : c'est en combinant de petits fragments qu'une musique
plus complexe peut être représentée.  Par exemple :

@lilypond[quote,verbatim,fragment]
f'4
@end lilypond

@noindent
Quand des notes sont combinées simultanément, il suffit de les insérer
entre @code{<<} et @code{>>} :

@example
<<c4 d4 e4>>
@end example

@lilypond[quote,fragment,relative=1]
\new Voice { <<c4 d4 e>> }
@end lilypond

@noindent
Insérées dans une paire d'accolades @code{@{ @dots{} @}}, ces
expressions sont intégrées dans une séquence :

@example
@{ f4 <<c4 d4 e4>> @}
@end example

@lilypond[quote,relative=1,fragment]
{ f4 <<c d e4>> }
@end lilypond

@noindent
Ceci constitue une nouvelle expression, qui peut être à son tour
combinée avec une autre expression simultanée (en l'occurrence une
blanche) à l'aide de @code{<<}, @code{\\} et @code{>>} :

@example
<< g2 \\ @{ f4 <<c4 d4 e4>> @} >>
@end example

@lilypond[quote,fragment,relative=2]
\new Voice { << g2 \\ { f4 <<c d e>> } >> }
@end lilypond

De telles structures récursives peuvent être définies formellement et
de manière ordonnée avec une @emph{grammaire libre de tout contexte}.
Le code d'analyse de la saisie est également généré depuis cette
grammaire.  Autrement dit, la définition de la syntaxe de LilyPond est
claire et sans ambiguïté.

Ce sont la syntaxe et l'interface qui concernent les utilisateurs.
Elles sont sujettes à discussion, puisque relatives aux goûts de chacun.
Bien que ces discussions soient intéressantes, elles ne sont pas
productives.  À l'échelle de LilyPond, l'importance du format de saisie
est minime : inventer une syntaxe claire est bien plus aisé
qu'écrire un code de mise en page décent.  Ceci est d'ailleurs
illustré par le nombre de lignes de code de ces composants
respectifs : l'analyse du texte de saisie et sa représentation
pèsent moins de 10 % du code.

Dans la conception des structures utilisées par LilyPond, nous avons
pris certaines options divergentes des autres logiciels.  Considérons la
nature par essence hiérarchique de la notation musicale :

@lilypond[quote,fragment]
<<
\new Staff \relative {
  \key g \major
  \time 3/4
  d''4 g,8 a b c d4 g, g
}
\new Staff \relative {
  \clef "bass"
  \key g \major
  <g b d>2 a4 b2.
}
>>
@end lilypond

Nous y voyons des hauteurs regroupées en accords appartenant à des
mesures elles-mêmes rattachées à des portées.  On pourrait représenter
cela par un système de boîtes imbriquées :

@quotation
@iftex
@sourceimage{pdf/nestedboxes,,4cm,}
@end iftex
@ifnottex
@sourceimage{nestedboxes,,,png}
@end ifnottex
@end quotation

Cette structure est cependant réductrice car reposant sur des postulats
extrêmement restrictifs.  Cela devient plus évident dès lors que la
musique se complique :

@lilypond[quote]
\layout {
  \context {
    \Score
    \remove "Timing_translator"
    \remove "Default_bar_line_engraver"
  }
  \context {
    \Staff
    \consists "Timing_translator"
    \consists "Default_bar_line_engraver"
  }
}

\new PianoStaff <<
  \new Staff = "RH" <<
    \new Voice = "I" \relative {
      \time 3/4
      \voiceOne
      \tuplet 7/6 {g''8 g g g g g g}
      \oneVoice
      r4 <b,, fis' g bes> r4\fermata
    }
    \new Voice = "II" \relative {
      \voiceTwo
      c'4
      \tuplet 5/4 {
        <c ees>8 f g
        \change Staff = "LH" \oneVoice
        \stemUp g,( c}
      r4
      \override Stem.cross-staff = ##t
      \override Stem.length = #12
      <fis, b>) r\fermata
    }
  >>
  \new Staff = "LH" <<
    \new Voice = "III" \relative {
      \time 2/4
      \clef "bass"
      g4 \stopStaff s
      \startStaff s2*2
    }
  >>
>>
@end lilypond

Ici, les portées débutent et s'arrêtent n'importe où, les voix passent
d'une portée à l'autre, et parfois même occupent deux portées.  Nombre
de logiciels auront d'énormes difficultés à reproduire cet exemple, pour
la bonne et simple raison qu'ils se basent sur le modèle hiérarchique de
boîtes imbriquées.  LilyPond, quant à lui, tend à préserver la
dichotomie entre le format de saisie et une structure aussi flexible que
possible.


@node Les constituants de la gravure
@unnumberedsubsec Les constituants de la gravure
@translationof What symbols to engrave?

@cindex gravure
@cindex typographie
@cindex graveur
@cindex greffon
@cindex module

Si le processus de formatage se charge de décider où positionner les
symboles, encore faudrait-il savoir @emph{quels} symboles doivent
apparaître -- ou bien, quelle notation utiliser.

La notation musicale constitue une forme d'enregistrement de la musique
qui a d'ailleurs évolué sur un millier d'années.  La forme que nous
utilisons de nos jours remonte au début de la Renaissance.  Bien que ses
fondements n'aient pas changé -- des têtes de note réparties sur une
portée à cinq lignes --, certains détails sont apparus qui permettent de
rendre compte des apports de la notation contemporaine.  La notation
musicale couvre cinq siècles de musique, allant de la simple monodie à
de gigantesques contrepoints orchestraux.

Comment intégrer un tel monstre aux si nombreux visages ? Notre solution
est de clairement distinguer la notation -- @emph{quels} symboles
utiliser -- de la gravure -- @emph{où} les placer.  Pour appréhender la
notation, nous l'avons disséquée en éléments simples (et
programmables) : chaque type de symbole est géré par un module --
ou greffon -- différent.  Tous ces modules sont entièrement
configurables et indépendants, chacun pouvant être développé et amélioré
séparément.  Nous appelons ces modules des graveurs (@emph{engravers} en
anglais), par analogie avec ces professionnels qui mettent en forme
graphiquement les idées musicales.


Le module le plus basique, qu'on appelle @code{Note_heads_engraver},
crée les têtes de notes :

@lilypond[quote,ragged-right]
\include "engraver-example.ily"

\score {
  \topVoice
  \layout {
    \context {
      \Voice
      \remove "Stem_engraver"
      \remove "Phrasing_slur_engraver"
      \remove "Slur_engraver"
      \remove "Script_engraver"
      \remove "New_fingering_engraver"
      \remove "Beam_engraver"
      \remove "Auto_beam_engraver"
    }
    \context {
      \Staff
      \remove "Accidental_engraver"
      \remove "Key_engraver"
      \remove "Clef_engraver"
      \remove "Bar_engraver"
      \remove "Time_signature_engraver"
      \remove "Staff_symbol_engraver"
      \consists "Pitch_squash_engraver"
    }
  }
}
@end lilypond

@noindent
Puis le module @code{Staff_symbol_engraver} génère les objets
représentant les lignes de portée :

@lilypond[quote,ragged-right]
\include "engraver-example.ily"

\score {
  \topVoice
  \layout {
    \context {
      \Voice
      \remove "Stem_engraver"
      \remove "Phrasing_slur_engraver"
      \remove "Slur_engraver"
      \remove "Script_engraver"
      \remove "New_fingering_engraver"
      \remove "Beam_engraver"
      \remove "Auto_beam_engraver"
    }
    \context {
      \Staff
      \remove "Accidental_engraver"
      \remove "Key_engraver"
      \remove "Clef_engraver"
      \remove "Bar_engraver"
      \consists "Pitch_squash_engraver"
      \remove "Time_signature_engraver"
    }
  }
}
@end lilypond

@noindent
le module @code{Clef_engraver} fournit au @code{Note_heads_engraver}
la hauteur à laquelle doit être placée chaque tête de note :

@lilypond[quote,ragged-right]
\include "engraver-example.ily"

\score {
  \topVoice
  \layout {
    \context {
      \Voice
      \remove "Stem_engraver"
      \remove "Phrasing_slur_engraver"
      \remove "Slur_engraver"
      \remove "Script_engraver"
      \remove "New_fingering_engraver"
      \remove "Beam_engraver"
      \remove "Auto_beam_engraver"
    }
    \context {
      \Staff
      \remove "Accidental_engraver"
      \remove "Key_engraver"
      \remove "Bar_engraver"
      \remove "Time_signature_engraver"
    }
  }
}
@end lilypond

@noindent
et, enfin, les hampes et leurs crochets sont gérés par le
@code{Stem_engraver} :

@lilypond[quote,ragged-right]
\include "engraver-example.ily"

\score {
  \topVoice
  \layout {
    \context {
      \Voice
      \remove "Phrasing_slur_engraver"
      \remove "Slur_engraver"
      \remove "Script_engraver"
      \remove "New_fingering_engraver"
      \remove "Beam_engraver"
      \remove "Auto_beam_engraver"
    }
    \context {
      \Staff
      \remove "Accidental_engraver"
      \remove "Key_engraver"
      \remove "Bar_engraver"
      \remove "Time_signature_engraver"
    }
  }
}
@end lilypond

@noindent
Le module @code{Stem_engraver} est appelé dès qu'une tête de note
apparaît.  Pour chaque note rencontrée -- ou groupe de notes s'il s'agit
d'un accord --, un objet hampe est créé et attaché à la tête de note.
Si l'on ajoute les modules en charge des ligatures, des liaisons, des
accents, des barres de mesure, de la métrique et de l'armure, nous avons
tout ce qui est nécessaire à une partition.

@lilypond[quote,ragged-right]
\include "engraver-example.ily"
\score { \topVoice }
@end lilypond

@cindex polyphonie
@cindex gravure de plusieurs voix
@cindex contextes

Le principe décrit plus haut fonctionne très bien pour de la musique
monophonique, mais qu'en est-il de la polyphonie ?  Dans ce cas,
plusieurs voix peuvent partager la même portée :

@lilypond[quote,ragged-right]
\include "engraver-example.ily"
\new Staff << \topVoice \\ \botVoice >>
@end lilypond

Ici, la portée et les altérations sont partagées mais les hampes,
liaisons, liens, etc. dépendent de chaque voix.  De plus, les graveurs
doivent être regroupés.  Les graveurs de têtes de note, hampes,
liaisons, etc. sont donc inclus dans un groupe appelé @emph{Voice
context} (contexte de voix),  alors que l'armure, les altérations, les
barres de mesures, etc. sont placées dans un groupe @emph{Staff context}
(contexte de portée).  Dans le cas d'une polyphonie, un contexte de
portée contient plusieurs contextes de voix.  De même, plusieurs
contextes de portée peuvent être assemblés dans un contexte de partition
(@emph{Score context}) :

@lilypond[quote,ragged-right]
\include "engraver-example.ily"
\score {
   <<
      \new Staff << \topVoice \\ \botVoice >>
      \new Staff << \pah \\ \hoom >>
   >>
}
@end lilypond

@seealso
Référence des propriétés internes :
@rinternals{Contexts}.


@node Flexibilité architecturale
@unnumberedsubsec Flexibilité architecturale
@translationof Flexible architecture

Pour ses premiers pas, LilyPond était totalement écrit en langage
C++ ; les programmeurs gravaient les fonctionnalités du programme
dans le marbre.  Cela s'est avéré peu satisfaisant pour plusieurs
raisons :

@itemize

@item Il peut arriver que LilyPond commette une erreur, auquel cas
l'utilisateur doit pouvoir déroger aux décisions arbitraires, et donc
se servir du moteur de formatage.  Par conséquent,  les règles et
paramètres ne peuvent être fixés lors de la compilation, mais doivent
être accessibles lors de l'exécution.

@item Graver est une affaire de jugement visuel, donc une affaire de goût.
Nous savons que les utilisateurs peuvent ne pas être d'accord avec nous.
Il faut donc qu'il aient accès aux définitions des styles
typographiques.

@item Enfin, nous redéfinissons continuellement les règles de formatage,
et avons donc besoin d'une approche souple des règles.  Le C++ implique
une méthode de groupement des règles qui ne correspond pas au
fonctionnement de la notation musicale.

@end itemize

@cindex Scheme, langage de programmation
@cindex langage de programmation Scheme

Nous avons résolu ces problème par l'adjonction d'un interpréteur pour
le Scheme et la réécriture de parties entières de LilyPond dans ce
langage.  L'architecture du programme repose sur la notion d'objets
graphiques que l'on peut décrire par des variables ou des fonctions
Scheme.  Elle doit prendre en compte les règles de formatage, le style
typographique et les décisions de formatage individuelles.
L'utilisateur de LilyPond peut accéder directement à la majorité de ces
contrôles.

La mise en page dépend des variables Scheme.  Par exemple, la variable
@var{direction} définie pour de nombreux objets, encode le choix entre
haut et bas (ou gauche et droite).  L'image qui suit présente deux
accords, accentués et arpégés.  Pour le premier accord, la direction de
chaque objet est vers le bas (ou la gauche).  Les objets sont dirigés
vers le haut (ou la droite) pour le second.

@lilypond[quote,ragged-right]
\score {
  \relative {
    \stemDown <e' g b>4_>-\arpeggio
    \override Arpeggio.direction = #RIGHT
    \stemUp <e g b>4^>-\arpeggio
  }
  \layout {
    \context {
      \Score
      \override SpacingSpanner.spacing-increment = #3
      \hide TimeSignature
    }
  }
}
@end lilypond

@cindex partition, formatage
@cindex formatage d'une partition
@cindex formatage, règles de

@noindent
Le processus de mise en forme d'une partition consiste à lire et
écrire des variables d'objets.  Certaines variables ont une valeur
prédéfinie.  Par exemple, l'épaisseur de nombreuses lignes --
caractéristiques d'un style typographique -- est préétablie.  La changer
entraîne un changement du style typographique.

@lilypond[quote,ragged-right]
fragment = {
   \clef bass f8 as8
   c'4-~ c'16 as g f e16 g bes c' des'4
}
<<
   \new Staff \fragment
   \new Staff \with {
      \override Beam.beam-thickness = #0.3
      \override Stem.thickness = #0.5
      \override Bar.thickness = #3.6
      \override Tie.thickness = #2.2
      \override StaffSymbol.thickness = #3.0
      \override Tie.extra-offset = #'(0 .  0.3)
      }
      \fragment
>>
@end lilypond

Les valeurs prédéfinies de certaines variables font aussi partie des
règles de formatage.  Chaque objet possède des variables contenant des
procédures.  Ces procédures réalisent le formatage prédéfini, dont
l'apparence peut être changée en remplaçant ces procédures par d'autres.
Dans l'exemple suivant, la règle permettant à l'objet « tête de note »
de dessiner son symbole est modifiée au cours de l'extrait
musical :

@lilypond[quote,ragged-right]
#(set-global-staff-size 30)

#(define (mc-squared grob orig current)
  (let* ((interfaces (ly:grob-interfaces grob))
         (pos (ly:grob-property grob 'staff-position)))
    (if (memq 'note-head-interface interfaces)
        (begin
          (ly:grob-set-property! grob 'stencil
            (grob-interpret-markup grob
              (make-lower-markup 0.5
                (case pos
                  ((-5) "m")
                  ((-3) "c ")
                  ((-2) (make-smaller-markup (make-bold-markup "2")))
                  (else "bla")))))))))

\new Voice \relative {
  \stemUp
  \set autoBeaming = ##f
  \time 2/4
  <d' f g>4
  \once \override NoteHead.stencil = #note-head::brew-ez-stencil
  \once \override NoteHead.font-size = #-7
  \once \override NoteHead.font-family = #'sans
  \once \override NoteHead.font-series = #'bold
  <d f g>4
  \once \override NoteHead.style = #'cross
  <d f g>4
  \applyOutput Voice #mc-squared
  <d f g>4
  <<
    { d8[ es-( fis^^ g] fis2-) }
    \repeat unfold 5 { \applyOutput Voice #mc-squared s8 }
  >>
}
@end lilypond


@node Démonstration par l'exemple
@section Démonstration par l'exemple
@translationof Putting LilyPond to work

@cindex simples exemples
@cindex exemples simples

Nous vous avons montré ce que devrait être la gravure musicale, et
comment nous avons construit notre logiciel pour imiter cette apparence.
Nous nous sommes énormément investis dans cette construction. En guise
de  récompense pour ce long travail, vous pouvez à votre tour
utiliser le programme pour imprimer votre musique.
Commençons par quelques notes@dots{}

@lilypond[quote,relative=1]
{
  \time 2/4
  c4 c g'4 g a4 a g2
}
@end lilypond

@noindent
Lorsqu'on leur ajoute des accords et des paroles, on obtient une chanson
populaire@dots{}

@lilypond[quote,ragged-right]
<<
   \chords { c2 c f2 c }
   \new Staff
   \relative {
     \time 2/4
     c'4 c g' g a a g2
   }
   \addlyrics { twin -- kle twin -- kle lit -- tle star }
>>
@end lilypond

On peut aussi éditer de la polyphonie ou une partition pour piano.
Quant à ce qui suit, admirez l'exotisme de certaines
constructions@dots{}

@lilypond[quote]
\header {
  title = "Screech and boink"
  subtitle = "Random complex notation"
  composer = "Han-Wen Nienhuys"
}

\score {
  \context PianoStaff <<
    \new Staff = "up" {
      \time 4/8
      \key c \minor
      << {
        \revert Stem.direction
        \change Staff = down
        \set subdivideBeams = ##t
        g16.[
          \change Staff = up
          c'''32
          \change Staff = down
          g32
          \change Staff = up
          c'''32
          \change Staff = down
          g16]
        \change Staff = up
        \stemUp
        \set followVoice = ##t
        c'''32([ b''16 a''16 gis''16 g''32)]
      } \\ {
        s4 \tuplet 3/2 { d'16[ f' g'] } as'32[ b''32 e'' d'']
      } \\ {
        s4 \autoBeamOff d''8.. f''32
      } \\ {
        s4 es''4
      } >>
    }

    \new Staff = "down" {
      \clef bass
      \key c \minor
      \set subdivideBeams = ##f
      \override Stem.french-beaming = ##t
      \override Beam.beam-thickness = #0.3
      \override Stem.thickness = #4.0
      g'16[ b16 fis16 g16]
      << \makeClusters {
        as16 <as b>
        <g b>
        <g cis>
      } \\ {
        \override Staff.Arpeggio.arpeggio-direction =#down
        <cis, e, gis, b, cis>4\arpeggio
      }
    >> }
  >>
  \midi {
    \tempo 8 = 60
  }
  \layout {
    \context {
      \Staff
      \consists "Horizontal_bracket_engraver"
    }
  }
}
@end lilypond

Ces fragments ont tous été écrits à la main, mais ce n'est pas une
obligation.  Dans la mesure où le moteur de formatage est presque
complètement automatisé, il peut servir à générer du matériel imprimable
pour d'autres programmes en charge de manipuler de la musique.  LilyPond
est parfaitement en mesure de convertir des bases de données musicales
aux fins de les utiliser dans des sites internet ou des présentations
multimédia.

Vous avez constaté, au fil de notre propos, que le format source est
purement textuel et peut donc être réutilisé dans d'autres formats basés
sur une description textuelle comme @LaTeX{}, HTML ou -- ce qui est le
cas pour la documentation de LilyPond -- Texinfo.  À l'aide du script
@command{lilypond-book} fourni avec LilyPond, les fragments de code
insérés feront place à une image dans le fichier résultant, qu'il soit
au format PDF ou HTML.  Il existe aussi une extension pour
OpenOffice.org et LibreOffice -- OOoLilyPond -- qui permet d'insérer des
extraits dans un document.

Pour mieux voir LilyPond en action, consulter la documentation ou
accéder directement au logiciel, rendez-vous sur www.lilypond.org.


@page
@node Comparatif (BWV 861)
@section Comparatif (BWV 861)
@translationof Engraved examples (BWV 861)

Cette annexe présente quatre éditions de référence et deux éditions
informatisées des sept dernières mesures de la fugue en sol mineur
extraite du Premier livre du clavier bien tempéré de Bach
(BWV 861).

@noindent
Bärenreiter BA5070 (Neue Ausgabe Sämtlicher Werke, Serie V, Band 6.1,
1989) :

@iftex
@sourceimage{bwv861-baer,16cm,,}
@end iftex
@ifnottex
@sourceimage{bwv861-baer-small,,,png}
@end ifnottex

@noindent
Bärenreiter BA5070 (Neue Ausgabe Sämtlicher Werke, Serie V, Band 6.1,
1989), à partir d'une autre source.  En plus de différences au niveau
des éléments textuels, ce travail montre que, au sein d'une même maison
d'édition, les appréciations peuvent être différentes selon le
graveur :

@iftex
@sourceimage{bwv861-baer-alt,16cm,,}
@end iftex
@ifnottex
@sourceimage{bwv861-baer-alt-small,,,png}
@end ifnottex

@noindent
Breitkopf & Härtel, édité par Ferruccio Busoni (Wiesbaden, 1894),
disponible à la Petrucci Music Library (IMSLP #22081).  Les
éléments éditoriaux tels que doigtés et articulations en ont été gommés
aux fins de comparaison avec les autres éditions :

@iftex
@sourceimage{bwv861-breitkopf,16cm,,}
@end iftex
@ifnottex
@sourceimage{bwv861-breitkopf-small,,,png}
@end ifnottex

@noindent
Bach-Gesellschaft edition (Leipzig, 1866), disponible à la Petrucci
Music Library (IMSPL #02221) :

@iftex
@sourceimage{bwv861-gessellschaft,16cm,,}
@end iftex
@ifnottex
@sourceimage{bwv861-gessellschaft-small,,,png}
@end ifnottex

@noindent
Finale 2008 :

@iftex
@sourceimage{pdf/bwv861-finale2008a,,,}
@end iftex
@ifnottex
@sourceimage{bwv861-finale2008a,,,png}
@end ifnottex

@sp 4
@noindent
LilyPond, version @version{} :

@lilypond[staffsize=14.3,line-width=15.9\cm]
global = {\key g \minor}

partI = \relative {
  \voiceOne
  fis'8 d' ees g, fis4 g
  r8 a16 bes c8 bes16 a d8 r r4
  r2 r8 d16 ees f8 ees16 d
  ees4 ~ 16 d c bes a4 r8 ees'16 d
  c8 d16 ees d8 e16 fis g8 fis16 g a4 ~
  8 d, g f ees d c bes
  a2 g\fermata \bar "|."
}

partII = \relative {
  \voiceTwo
  d'4 r4 r8 d'16 c bes8 c16 d
  ees8 d c ees a, r r4
  r8 fis16 g a8 g16 fis g2 ~
  2 r8 d' ees g,
  fis4 g r8 a16 bes c8 bes16 a
  bes4. <g b>8 <a c> r <d, g> r
  <ees g>4 <d fis> d2
}
partIII = \relative {
  \voiceOne
  r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
  bes2 ~ 8 b16 a g8 a16 b
  c4 r r2
  R1
  r8 d ees g, fis4 g
  r8 a16 bes c8 bes16 a b2
}
partIV = \relative {
  \voiceTwo
  d4 r r2
  r8 d ees g, fis4 a
  d,8 d'16 c bes8 c16 d ees2 ~
  8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a
  d,8 d'16 c bes8 c16 d ees8 c a fis'
  g f ees d c bes a g
  c a d d, g2\fermata
}

\score {
  <<
    % \set Score.barNumberVisibility = #all-bar-numbers-visible
    % required in 2.13
    \set Score.currentBarNumber = #28
    \bar ""
    \new PianoStaff <<
      \new Staff = "RH" <<
        \global
        \new Voice = "voiceI" { \partI }
        \new Voice = "voiceII" { \partII }
      >>

      \new Staff = "LH" <<
        \clef "bass"
        \global
        \new Voice = "voiceIII" { \partIII }
        \new Voice = "voiceIV" { \partIV }
      >>
    >>
  >>
  \layout {
    \context {
      \Staff
      \remove "Time_signature_engraver"
    }
    \context {
      \PianoStaff
      \override StaffGrouper.staff-staff-spacing.padding = #1
    }
  }
}
@end lilypond
