Guide d’extension#
Ce guide a pour but de couvrir toutes les techniques importantes pour écrire des extensions à LilyPond. Comme vous le verrez, comprendre ces techniques revient souvent à comprendre le fonctionnement interne de LilyPond.
Il existe également un manuel d’extension officiel. Malheureusement, ce manuel est loin d’être complet. Le présent guide sert de substitut à toutes les parties qui n’ont pas été écrites.
Voici la structure générale de ce document :
Tout d’abord, une partie qui détaille toutes les étapes de la compilation d’un fichier LilyPond, et donne un avant-goût des outils les plus fondamentaux sur des exemples ;
Puis un focus sur la manière dont Scheme et LilyPond interagissent, et notamment les différentes manières d’insérer du code Scheme dans LilyPond ;
Des explications sur les expressions musicales, et comment les créer ou les transformer ;
Un saut dans le temps par rapport à l’ordre des étapes dans la compilation, pour s’intéresser au moteur de rendu de LilyPond ;
Pour finir, un retour en arrière vers l’étape de la traduction, qui fait le lien entre les expressions musicales et le moteur de rendu ; cette partie réutilise donc les notions des deux parties précédentes.
- Introduction
- Insertion de code Scheme dans un fichier LilyPond
- Fonctions exportées, conventions de nommage
- Le bac à sable Scheme
- Introduction aux fonctions musicales
- Introduction aux fonctions de rappel
- Affichage de valeurs
- Première incursion dans le fonctionnement interne de LilyPond
- Glossaire des principaux types d’objets
- Aperçu du fonctionnement interne de LilyPond et des façons de l’étendre
- Scheme dans LilyPond
- Expressions musicales
- Moteur de rendu
- L’étape de traduction
- Aperçu général
- Contextes
- Quelques interfaces de programmation simples pour la traduction
- Écrire un graveur en Scheme
- Fondamentaux
- Cycle d’une étape temporelle
- Réagir aux événements
- Exemple de modification de propriétés dans pre-process-music :
Force_chord_at_bar_start_engraver
- Création de grobs
- Exemple de création de grobs :
Tacet_engraver
- Gestion du temps
- Exemple d’utilisation de la longueur d’un événement :
Auto_breathe_engraver
- Réagir aux grobs
- Exemple de réaction aux grobs :
Balloon_notes_engraver
- Réagir à la fin d’un grob
- Exemple de réaction à la fin d’un grob :
No_break_during_tie_engraver
- Réglage des parents et extrémités des grobs
- Exemple de réglage des parents :
Auto_stanza_engraver
- Exemple de réglage des extrémités :
Align_all_dynamics_engraver
- Suicide de grobs
- Exemple de suicide de grobs :
Voice_line_engraver
- Ajout de propriétés et types