Flexibilité architecturale (Essai sur la gravure musicale automatisée)

#### Flexibilité architecturale

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 :

- 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.
- 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.
- 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.

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 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.

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.

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 :

#### Essai sur la gravure musicale automatisée v2.26.0 (stable-branch).

- 1 La gravure musicale
  - 1.1 L’histoire de LilyPond
  - 1.2 La gravure en détails
    - Fontes et polices
    - Espacement
    - Lignes supplémentaires
    - Tailles
    - La raison de tous ces efforts
  - 1.3 La gravure automatisée
    - Concours de beauté
    - Modélisation et banc d’essai
    - Règles de formatage
  - 1.4 De la théorie à la pratique
    - Représentation de la musique
    - Les constituants de la gravure
    - Flexibilité architecturale
  - 1.5 Démonstration par l’exemple
  - 1.6 Comparatif (BWV 861)
- 2 Références bibliographiques
  - 2.1 Bibliographie succincte
  - 2.2 Bibliographie développée
- Appendix A GNU Free Documentation License
- Appendix B Index