1.1 Contexte

Cette partie présente les objectifs de LilyPond ainsi que son architecture.


Gravure

L’art de la typographie musicale se nomme la gravure. Ce terme est issu du processus traditionnel d’impression musicale. Il y a seulement quelques dizaines d’années, on faisait les partitions en coupant et en embossant une plaque de zinc ou d’étain en image miroir. Cette plaque était ensuite encrée, les dépressions créées par les creux et les bosses retenant l’encre. Une image était formée en pressant du papier sur la plaque. La découpe et l’embossage étaient entièrement faits à la main. Il était pénible d’appliquer une correction, quand celle-ci n’était pas impossible ; la gravure devait donc être parfaite du premier coup. La gravure demandait une qualification hautement spécialisée : un artisan devait accomplir environ cinq ans de formation avant de mériter le titre de maître graveur, et il lui fallait cinq années d’expérience supplémentaires pour devenir vraiment habile.

De nos jours, toutes les partitions récentes sont produites avec des ordinateurs. Ceci a des avantages évidents : le coût des impressions a diminué, et le travail d’édition peut être envoyé par courriel. Malheureusement, l’utilisation dominante des ordinateurs a également diminué la qualité graphique des partitions. L’impression informatisée leur donne un aspect fade et mécanique qui les rend désagréables à jouer.

Les images ci-dessous illustrent la différence entre la gravure traditionelle et l’impression typique par ordinateur, et la troisième image montre comment LilyPond mime l’aspect traditionnel. L’image de gauche est une numérisation d’un symbole bémol d’une édition publiée en 2000. Celle du centre montre un bémol d’une gravure à la main de l’édition Bärenreiter de la même musique. L’image de gauche illustre des défauts typiques de l’impression informatique : les lignes de portée sont minces, l’épaisseur de trait du bémol est la même que les lignes fines, et il y a un aspect rigide avec des angles pointus. Par contraste, le bémol Bärenreiter possède un aspect gras et arrondi, presque voluptueux. Notre symbole bémol est créé, entre autres, à partir de celui-là. Il est arrondi, et son épaisseur de trait s’harmonise avec nos lignes de portée, lesquelles sont également plus épaisses que celles de l’édition informatique.

pngpngpng

Henle (2000)

Bärenreiter (1950)

Fonte Feta de LilyPond (2003)

En matière d’espacement, la répartition de l’espace devrait refléter les durées entre les notes. Cependant, beaucoup de partitions modernes se contentent des durées avec une précision mathématique, ce qui mène à de mauvais résultats. Dans l’exemple suivant, un motif est imprimé deux fois : une fois en utilisant un espacement mathématique exact, et une autre fois avec des corrections. Pouvez-vous les repérer ?

[image of music]

[image of music]

L’extrait n’utilise que des notes de même durée ; l’espacement devrait le refléter. Malheureusement, notre oeil nous trompe quelque peu ; il ne se contente pas de remarquer la distance entre les têtes de notes, il prend en compte également la distance entre les hampes consécutives. Ainsi, par compensation, les notes avec une combinaison « hampe vers le haut »/« hampe vers le bas » doivent être éloignées l’une de l’autre, et les notes avec une combinaison « hampe vers le bas »/« hampe vers le haut » rapprochées, le tout dépendant de la position verticale des notes. Les deux premières mesures sont imprimées avec cette correction, les deux suivantes sans. Les notes dans les deux dernières mesures forment des blocs de notes « hampe vers le bas »/« hampe vers le haut ».

Les musiciens sont généralement plus absorbés par l’exécution que par l’étude de l’aspect graphique d’une partition, donc discutailler sur les détails typographiques peut paraître peu important. Il n’en est rien. Dans de longues pièces avec des rythmes monotones, les corrections d’espacement engendrent de subtiles variations dans la mise en forme de chaque ligne, donnant à chacune une signature visuelle distincte. Sans cette signature, toutes les lignes auraient le même aspect, et ressembleraient à un labyrinthe. Si un musicien regarde ailleurs un instant ou se déconcentre momentanement, il peut avoir du mal à se retrouver sur la page.

De même, l’aspect robuste des symboles sur d’épaisses lignes de portée ressort mieux quand la partition est éloignée du lecteur, comme sur un pupitre par exemple. Une organisation minutieuse des espaces vides permet de minimiser l’espace qu’occupe la musique, tout en évitant que les symboles s’amassent les uns contre les autres. Le résultat permet de réduire le nombre de pages à tourner, ce qui est un grand avantage.

Ceci est une caractéristique commune à toute typographie. La disposition doit être belle, non seulement pour des raisons esthétiques, mais également pour l’aide apportée au lecteur dans la tâche qu’il doit accomplir. Pour du matériel d’exécution comme les partitions de musique, cela prend une double importance : les musiciens ont une quantité limitée d’attention. Moins ils en ont besoin pour lire, plus ils peuvent se concentrer sur la musique elle-même. Autrement dit, une meilleure typographie permet une meilleure interprétation.

Ces exemples démontrent que la typographie musicale est un art subtil et complexe, et que la produire demande une expertise considérable, que les musiciens ne possèdent généralement pas. LilyPond est le fruit de nos efforts pour restaurer l’excellence graphique de la gravure à la main à l’ère de l’ordinateur, et la rendre accessible à tous les musiciens. Nous avons conçu nos algorithmes, fontes et paramètres de programme pour retrouver la qualité d’édition des anciennes partitions que nous aimons tant lire et jouer.


Gravure automatisée

Comment pouvons-nous implémenter la typographie ? Si les artisans ont besoin de plus de dix ans pour devenir de vrais maîtres, comment nous, simples programmeurs, pourrions-nous jamais écrire un programme pour faire leur travail ?

La réponse est : nous ne le pouvons pas. La typographie se base sur le jugement visuel humain, donc les humains ne peuvent pas être complètement remplacés. Si LilyPond arrive à traiter la plupart des situations correctement, ce sera déjà une grande avancée sur les logiciels existants. Les problèmes restants peuvent être résolus à la main. Au fil des ans, le logiciel peut être affiné pour faire de plus en plus de choses automatiquement, pour que les ajustements manuels soient de moins en moins nécessaires.

Quand nous avons commencé, nous avons écrit le programme Lilypond entièrement dans le language de programmation C++ ; les fonctions du programme étaient figées par les développeurs. Ceci s’est avéré insatisfaisant pour plusieurs raisons :

Ces problèmes ont été résolus en intégrant un interpréteur pour le langage de programmation Scheme, et en réécrivant des parties de LilyPond en Scheme. L’architecture actuelle de formatage est construite autour de la notion d’objets graphiques, décrits par des fonctions et des variables Scheme. Cette architecture comprend les règles de formatage, le style typographique, et des décisions individuelles de formatage. L’utilisateur a un accès direct à la plupart de ces contrôles.

Les variables Scheme contrôlent les décisions de mise en page. Par exemple, beaucoup d’objets graphiques ont une variable de direction qui encode le choix entre haut et bas (ou gauche et droite). Vous pouvez voir ici deux accords, avec des accents, et des arpèges. Dans le premier accord, les objets graphiques sont tous dirigés vers le bas (ou la gauche). Dans le second accord ils sont tous dirigés vers le haut (droite).

[image of music]

Le processus de formatage d’une partition consiste à lire et écrire les variables d’objets graphiques. Certaines variables ont une valeur prédéfinie. Par exemple, l’épaisseur d’un grand nombre de lignes – une caractéristique du style typographique – est une variable avec une valeur prédéfinie. Vous êtes libres d’altérer cette valeur, ce qui vous donne une partition avec une impression typographique différente.

[image of music]

Les règles de formatage ont aussi des variables prédéfinies : chaque objet possède des variables contenant des procédures. Ces procédures exécutent le formatage, et en les substituant par d’autres, nous pouvons changer l’apparence des objets. Dans l’exemple suivant, la règle du choix de têtes de notes est changée au cours de l’extrait de musique.

[image of music]


Gravure des symboles musicaux

Le processus de formatage décide où placer les symboles. Cependant, cela ne peut être fait qu’à partir du moment où il a été décidé quels symboles doivent être imprimés, c’est-à-dire quelle notation utiliser.

La notation musicale usuelle est un système d’écriture qui a évolué à travers les dix derniers siècles. La forme qui est aujourd’hui communément utilisée date du début de la Renaissance. Bien que la forme basique — les têtes de notes sur une portée de cinq lignes — n’ait pas changé, les détails continuent d’évoluer pour exprimer les innovations de la notation contemporaine. Par conséquent, elle comprend quelque 500 ans de musique, avec des applications allant des mélodies monodiques à de monstrueux contrepoints pour grand orchestre.

Comment pouvons nous appréhender un tel monstre à plusieurs têtes, et le confiner dans l’espace réduit d’un programme informatique ? Notre solution consiste à diviser le problème de la notation — par opposition à la gravure, ou typographie — en morceaux digestes et programmables : chaque type de symbole est géré par un module séparé, couramment appelé greffon1. Chaque greffon est entièrement modulaire et indépendant, et donc peut être développé et amélioré séparément. De tels greffons sont nommés graveurs2, par analogie avec les artisans qui traduisent les idées musicales en symboles graphiques.

Dans l’exemple suivant, voyons comment nous commençons avec un greffon pour les têtes de notes, le graveur de têtes de note (Note_heads_engraver) :

[image of music]

Ensuite, le graveur du symbole de portée (Staff_symbol_engraver) ajoute la portée

[image of music]

le graveur de clef (Clef_engraver) définit un point de référence pour la portée

[image of music]

et le graveur de hampes (Stem_engraver) ajoute les hampes :

[image of music]

Le graveur de hampe est informé de chaque tête de note qui survient. Chaque fois qu’une tête de note — plusieurs pour un accord — est rencontrée, un objet hampe est créé et connecté à la tête de note. En ajoutant des graveurs pour les barres de ligature, les liaisons, les accents, les altérations accidentelles, les barres de mesure, la métrique, et les armures, nous obtenons un jeu de notation complet.

[image of music]

Ce système fonctionne bien pour de la musique monodique, mais qu’en est-il de la polyphonie ? En notation polyphonique, plusieurs voix peuvent partager une portée.

[image of music]

Dans cette situation, la portée et les altérations accidentelles sont partagées, mais les hampes, liaisons etc., sont spécifiques à chaque voix. Par conséquent, les graveurs doivent être groupés. Les graveurs des têtes de notes, hampes, liaisons etc., vont dans un groupe appelé « contexte de Voix » 3, alors que les graveurs des clés, altérations accidentelles, barres de mesure etc., vont dans un groupe appelé « contexte de Portée ». Dans le cas de la polyphonie, un seul contexte de Portée contient plusieurs contextes de Voix. De même, plusieurs contextes de Portée peuvent être inclus dans un seul contexte de Partition. Le contexte de Partition est le contexte de notation de plus haut niveau.

Voir aussi

Référence du programme: Contexts.

[image of music]


Représentation de la musique

Idéalement, le format d’entrée pour n’importe quel système de formatage est une description abstraite du contenu. Dans ce cas-ci, ce serait la musique elle-même. Cela pose un formidable problème : comment pouvons-nous définir ce qu’est réellement la musique ? Plutôt que d’essayer de trouver une réponse, nous avons renversé la question. Nous écrivons un logiciel capable de produire de la musique écrite, et adaptons le format pour atteindre la plus grande concision possible. Quand le format ne peut plus être simplifé, il nous reste par définition le contenu lui-même. Notre logiciel sert de définition formelle d’un document de musique.

Pour LilyPond, la syntaxe est également l’interface utilisateur ; par conséquent il est facile de saisir

{
c'4 d'8
}

c’est-à-dire un do central noire et, juste au-dessus, un ré croche

[image of music]

Sur une échelle microscopique, une telle syntaxe est facile à utiliser. À plus grande échelle, la syntaxe a besoin aussi de structure. Comment serait-il possible autrement de rentrer des pièces complexes comme des symphonies ou des opéras ? La structure est formée par le concept d’expression musicale : en combinant de petits fragments de musique pour en former de plus grands, on peut exprimer de la musique plus complexe. Par exemple

f4

[image of music]

Des accord peuvent être construits avec << et >> autour des notes.

<<c4 d4 e4>>

[image of music]

On met cette expression dans une séquence en l’encadrant par des accolades { … }

{ f4 <<c4 d4 e4>> }

[image of music]

Ceci est également une expression, et peut donc encore une fois être combiné avec d’autres expressions simultanées (une blanche) en utilisant <<, \\, et >>

<< g2 \\ { f4 <<c4 d4 e4>> } >>

[image of music]

De telles structures récursives peuvent être spécifiées formellement et de manière ordonnée dans une grammaire indépendante de tout contexte. Le code d’analyse est aussi généré à partir de cette grammaire. Autrement dit, la syntaxe de LilyPond est définie clairement et sans ambiguité.

L’interface utilisateur et la syntaxe sont ce que les gens voient et manipulent le plus. Elles sont en partie une affaire de goût, et aussi sujettes à beaucoup de discussions. Même si ces discussions sur les goûts ont leur mérite, elles ne sont pas très productives. D’un point de vue plus large sur LilyPond, l’importance de la syntaxe est minime : il est facile d’inventer une syntaxe concise, alors qu’écrire un code de formatage décent est beaucoup plus difficile. Ceci est également illustré par le nombre de lignes de codes pour les composants respectifs : l’analyse et la représentation constituent moins de 10% du code source.


Exemples d’application

Nous avons conçu LilyPond comme une expérimentation visant à concentrer l’art de la gravure musicale dans un logiciel. Grâce à tout ce dur labeur, le programme peut maintenant être utilisé pour accomplir des travaux utiles. L’application la plus simple est d’imprimer des notes :

[image of music]

En ajoutant des noms d’accords et des paroles, nous obtenons une partition de chanson :

[image of music]

La notation polyphonique et la musique pour piano peuvent également être générées. L’exemple suivant associe quelques constructions plus exotiques :

[image of music]

Les extraits exposés ici ont tous été écrits à la main, mais ce n’est pas une obligation. Puisque le moteur de formatage est en grande partie automatique, il peut servir de sortie pour d’autres programmes qui manipulent la musique. Par exemple, il peut être utilisé pour convertir des bases de données d’extraits musicaux en images pour des sites Internet et des présentations multimédias.

Ce manuel montre également une application : le format d’entrée est du texte, et peut donc facilement être intégré dans d’autres formats basés sur le texte comme LaTeX, HTML, ou dans le cas de ce manuel, Texinfo. À l’aide d’un programme spécial, les extraits de code peuvent être remplacés par des images de musiques dans les fichiers de sortie PDF ou HTML. Cela donne la possibilité de mélanger de la musique et du texte dans les documents.


Notes de bas de page

[1] traduction de l’anglais plug-in.

[2] engravers en anglais.

[3] ‘Voice context’ en anglais, ‘Voice’ commence par une majuscule comme tous les noms de contexte dans le programme LilyPond.


Autres langues : English, español, deutsch.

Manuel d’initiation