Introduction à LilyPond

Cette page vise à donner un bref aperçu de LilyPond, et à replacer son rôle dans la sphère de la partition numérique. Elle n’a pas vocation à se substituer aux très complètes ressources (en français) qu’on trouvera sur LilyPond (lilypond.org et les sites en français : lilypond.org/community.fr.html, et fr.wikipedia.org/wiki/LilyPond).

LilyPond qu’est-ce que c’est ?

LilyPond est né du constat — fait par ses créateurs — que les programmes de notation musicale étaient inaptes à rivaliser, en termes de qualité de gravure, avec les éditeurs de musique reconnus tels que les éditions Barenreiter, les éditions Peters, Breitkopf and Hartel, etc …

Les initiateurs de LilyPond ont donc développé un langage de notation musicale, accompagné du programme de gravure permettant de le convertir dans un format standard, comme le format PDF.

Quelle musique permet de représenter LilyPond ?

LilyPond couvre un spectre de partitions allant de la musique ancienne utilisant les neumes et la notation Grégorienne, aux musiques contemporaines, Jazz ou Pop, en passant par tous les genres de musique instrumentale ou symphonique, de baroque ou de classique.

Par exemple, cette partition a été écrite avec du LilyPond :

Celle-là aussi :

Comment se positionne LilyPond par rapport à MusicXML ?

Comme nous allons le voir, LilyPond s’écrit sous forme textuelle, mais dans une syntaxe assez cryptique, inspirée de LaTeX, dont il est l’héritier, via sa filiation GNU.

Mais contrairement à MusicXML, en n’étant pas un dialecte XML, et en introduisant nombre de mots clef spécifiques aux problématiques de gravure, il n’a pas vocation à se positionner en tant que langage universel de représentation de partitions numériques.

A quoi ressemble la syntaxe LilyPond?

A l’instar de ce que nous avons présenté pour MusicXML, un premier exemple permettra de voir rapidement comment représenter une simple note en LilyPond.

Reprenons l’exemple du Do « serrure » :

La syntaxe LilyPond est pour le coup, beaucoup plus simple, car elle se réduit à :

{ c’1 }

qui correspond donc à :

do-serrure-lilypond-std

En effet, nous voilà ici ‘débarrassés’ du côté verbeux d’XML,  au profit d’un langage (assez abscons comme on le verra), qui sous-entend beaucoup de choix implicites, afin de faciliter l’écriture de partitions dans ce formalisme.

Par exemple, par défaut :

  • On est en clef de Sol,
  • Il n’y a pas d’armure,
  • La mesure est à 4/4 affichée par C
  • L’unité de temps par défaut est la noire (une note en LilyPond est suivie de sa durée qui peut être omise si c’est une noire).
  • Le nommage des notes est en notation germanique (= notation anglo-saxonne pour le nom des notes, mais différente pour les altérations).
  • La note do sans plus de précisions correspond au do3 (l’octave par défaut est la 3e).

Dans le court exemple ci-dessus, les accolades permettent d’écrire une expression musicale qui peut avoir de multiples fonctions, selon le contexte : regroupement de notes d’une mesure, regroupement de mesures d’une portée, regroupement de portées d’une partition, etc …

A noter que les accolades doivent être suivies d’un espace ou d’un saut de ligne.

Pour le reste, grâce à toutes ces valeurs par défaut, il reste à faire figurer le Do 4 et la durée d’une ronde.

Le do est représenté par la lettre c, mais attention, bien en minuscule. L’apostrophe indique que le do doit se trouver une octave au dessus de l’octave par défaut, et 1 représente la durée de la note, avec comme convention 1=ronde, 2=blanche, 4=noire (par défaut), 8=croche, 16=double,.. jusqu’à 64 (quadruple croche).

L’utilisation de l’apostrophe et de la virgule « , » permet de désigner la hauteur des notes par rapport à la position relative de la note précédente (resp. une octave au-dessus ou en dessous).

Structure générale d’une partition LilyPond

Dans LilyPond, chaque voix est représentée dans une expression musicale séparée.

A l’inverse de MusicXML où on peut représenter indifféremment une partition en lecture horizontale voix par voix, ou en lecture verticale mesure par mesure à travers toutes les voix, LilyPond nécessite de regrouper toutes les mesures d’une partie dans une expression musicale séparée.

La colonne vertébrale d’une partition LilyPond a typiquement ce genre de contenu (repris de l’exemple du lied « Après un songe » de Gabriel Fauré, partition avec chant et accompagnement de piano) :

structure-partition-lilypond

La structure de la partition apparaît en fin de fichier quand les différentes parties ont été définies.

Un extrait de partition plus significatif

Reprenons le début de la définition de chaque partie sur « Après un rêve … »

Partie chant

apres-un-reve-lilypond-chant

On voit sur cet extrait que la syntaxe de LilyPond alterne entre des directives assez verbeuses et des symboles assez concis comme le début et la fin du crescendo.

Les mesures ne sont pas numérotées, mais séparées par une barre verticale matérialisant la barre de mesure.

A noter (par exemple sur le premier triolet de la 3e mesure), que la durée d’une note est omise sur les suivantes tant qu’elle ne change pas.

A la différence de MusicXML, certaines représentations graphiques n’ont pas à figurer tant qu’elles sont prises en charge par la gravure standard, par exemple les ligatures ou l’orientation des hampes de notes.

Partie lyrique

apres-un-reve-lilypond-paroles

Les double tirets sont utilisés pour séparer les syllables d’un mot. Elles apparaissent séparées par un trait d’union dans la partition finale.

Si un mot est chanté sur deux notes au lieu d’une, on peut utiliser le tiret du bas _ , voire deux __ si la syllabe s’étend sur plusieurs notes ou sur une note très longue.

Partie piano

apres-un-reve-lilypond-piano

A noter que les accords sont représentés par des notes encadrées des symboles < et >.

LilyPond et les fontes musicales

Une des grandes forces de LilyPond est de laisser l’utilisateur choisir sa fonte musicale pour le rendu de sa partition numérique.

La fonte par défaut dans LilyPond s’appelle Feta. Pour utiliser une fonte alternative Haydn pour l’ensemble de la partition, on doit placer les lignes suivantes en tête de partition:

\paper {
#(define fonts (set-global-fonts #:music "haydn" #:brace "haydn"))
}

Attention, cette opération se fait comme indiqué ci-dessus, seulement depuis la version LilyPond 2.19.12 et supérieures (attention, version de développement). Cela n’a pas toujours été le cas : jusqu’à assez récemment, il était beaucoup plus complexe de choisir une fonte musicale alternative.

On voit ici que la fonte Haydn offre plus qu’une fonte musicale : une fonte dédiée aux accolades (#:brace). LilyPond permet également de définir des fontes pour les textes.

Le résultat avec cette fonte est différent de la fonte standard Feta:

Apres-un-reve-lilypond-haydn

Notons que la syntaxe #(define … assez ésotérique fait appel à un langage de programmation dont nous parlerons brièvement plus loin.

Enfin, LilyPond permet de bénéficier (de manière pas encore complètement standard), de la fonte ‘Bravura’ (et elle seule) au standard SMuFL de Steinberg.

On espère que d’autres fontes suivront…

Retouche de partitions ‘à la main’

Comme LilyPond se veut un système permettant de produire des gravures de qualité, le langage se devait d’offrir un grand nombre de possibilités de retouches sur le résultat issu de la génération automatique.

Par exemple, l’extrait suivant :

LilyPondRetoucheMainAvant

Dont le code correspondant LilyPond est (pour la mesure en 6/4 (main droite)):

     { c,8 d fis bes a }  % continuation of main voice
\new Voice {
\voiceTwo
c,8~ c2
}

pose les problèmes suivants :

  • Les deux ré doivent être fusionnés sur la durée d’une blanche
  • Le ré blanche et le do blanche se chevauchent.

LilyPond permet de résoudre ce placement incorrect grâce à des directives spécifiques de gravure que nous ne détaillerons pas ici, mais qui s’écrivent comme:

     { c,8 d fis bes a }  % continuation of main voice
\new Voice {
\voiceTwo
c,8~
% Reposition the c2 to the right of the merged note
\once \override NoteColumn.force-hshift = #1.0
% Move the c2 out of the main note column
% so the merge will work

\shiftOnn c2
}

et qui conduisent à la gravure correcte suivante:

LilyPondRetoucheMainApres

Ecriture de code en Scheme dans une partition LilyPond

Un des aspects les plus puissants de LilyPond (mais en même temps les moins abordables), est la possibilité qu’il offre d’écrire du code dans les partitions.

En tant que descendant de la tradition GNU, le langage de programmation utilisé à cet effet, est un dérivé de Lisp, nommé Scheme.

Nous en avons vu un tout petit extrait pour le choix de la fonte de la partition, mais voilà comment écrire un petit programme qui reproduit deux fois de suite la même séquence de notes:

traLaLa = { c'4 d'4 }
#(define newLa (map ly:music-deep-copy (list traLaLa traLaLa)))
#(define twice (make-sequential-music newLa))
\twice

Association musique-texte

Autre avantage de LilyPond qui le distingue de MusicXML, celui d’offrir la possibilité d’inclure des partitions écrites en LilyPond au sein de texte LaTeX, ou plus intéressant, d’HTML.

Cette opération peut se faire soit de manière statique à l’aide d’un programme qui crée un document final contant texte et partitions, soit à la volée, un interpréteur traduisant directement le texte LilyPond en image.

De manière statique avec lilypond-book

lilypond-book est le programme à invoquer en ligne de commande dans ce cas.

Par exemple au sein d’un fichier HTML, si vous écrivez les lignes suivantes :

<lilypond fragment>
c'4 d'4 c'4 d'4
</lilypond>

lilypond-book produira :

  • Un fichier .png pour le fragment correspondant au fragment de partition (voir plus haut do ré do ré)
  •  Un ancrage au sein du fichier HTML, via une balise <img>, liant l’image au texte:
<img align="middle"
border="0"
src="../c9/lily-7a8f0874.png"
alt="[image of music]">

A la volée

Le code Lilypond est par exemple utilisable dans les articles de Wikipédia, ou tout site MediaWiki, par le biais d’une extension MediaWiki : http://www.mediawiki.org/wiki/Extension:Score

Dans ce cas, l’écriture d’un contenu tel que :

<score>\relative c'' { c d c d }
</score>

dans une page MediaWiki, incluera automatiquement l’image précédente en lieu et place du texte LilyPond.

Techniquement, ce n’est pas  du code SVG qui  est généré, mais à l’instar de lilypond-book, une image png produite à la volée, téléchargée sur le site MediaWiki, et enfin référencée via une balise <img>.

Le même principe est utilisable avec le plugin WordPress :

https://github.com/countergram/wp-lilypond, mais il est à noter que pour l’un ou l’autre de ces plugins, il est nécessaire d’installer au préalable LilyPond sur le serveur web.

Transcription de/vers d’autres formats numériques

Traductions depuis LilyPond

Naturellement, LilyPond, se traduit vers du PDF.

Il est prévu des conversions de LilyPond vers MusicXML et MEI, mais ces conversions ne sont pas encore opérationnelles.

Transcription vers LilyPond

LilyPond fournit en standard une commande en ligne nommée musicxml2ly, permettant de convertir un fichier .mxl (MusicXML) en programme .ly (LilyPond).

Editeurs de code LilyPond

Editeurs semi-graphiques

LilyPond est difficilement dissociable de l’éditeur semi-graphique http://frescobaldi.org/.

Ce logiciel se place au-dessus d’une installation LilyPond, et lance tout seul LilyPond une fois installé.

Il permet de générer un aperçu du résultat sous sa forme définitive, mais pas de saisir graphiquement les symboles de notation musicale.

Un assistant permet néanmoins d’insérer via l’ « insertion rapide », les codes pour les articulations, les nuances, les liaisons et les barres de mesure.

Une fois l’aperçu généré, Frescobaldi permet quand même de savoir sur quelle(s) notes on travaille.

Dans l’exemple suivant, sur sélection du texte LilyPond correspondant aux notes de la première ligne de chant, Frescobaldi met en évidence les notes correspondantes sur la partition :

Capture-frescobaldi

Autres éditeurs syntaxiques

Des éditeurs de texte prenant en charge la coloration syntaxique pour le code LilyPond existent, en particulier JEdit, avec son plugin LilyPond : http://plugins.jedit.org/plugins/?LilyPondTool

Partitions LilyPond

Enfin, il existe un site dédié aux partitions écrites en LilyPond, dont on trouvera les sources .ly et le PDF généré.

Ce site est : http://www.mutopiaproject.org/

Quelques mots pour terminer..

On a vu sur cette petite présentation que LilyPond, bien que complet sur le plan de la restitution de la partition dans une optique d’impression, ne couvrait pas d’autres usages. En particulier, il n’est pas possible, sans un parseur dédié, de rechercher des informations dans une partition, pas possible d’en extraire des parties facilement ou de la transformer facilement pour un usage particulier, par exemple pédagogique…
XML propose énormément d’outils dans ce domaine, qui donnent clairement l’avantage aux dialectes XML tels que MusicXML à cette fin.

Il n’en reste pas moins que LilyPond peut s’écrire « à la main », au moins sur une partition de taille raisonnable, ce qui n’est pas le cas avec MusicXML, qui doit s’accompagner nécessairement d’un éditeur graphique.

Par ailleurs, LilyPond semble soutenu par une communauté assez active, et mérite qu’on s’y intéresse pour ce qu’il sait très bien faire.

2 commentaires :

  1. Très bon article, très clair, mais il manque cette information que je n’arrive pas à trouver avec Google : où trouver des partitions déjà écrites en .ly ? J’imagine que plein d’utilisateurs seraient prêt à partager / ont déjà partagé le travail effectué avec ce merveilleux logiciel gratuitement mis à disposition par ses concepteurs ?!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *