Les pièges de la conception d'un logiciel d'édition musicale
Ce serait formidable si les logiciels d'édition ne nécessitaient pas de mettre les mains dans le cambouis pour produire un résultat acceptable. Notre but avec LilyPond était de mettre au point un tel système : un programme qui produise une belle partition – "gravure" – automatiquement.
À première vue, la notation musicale est organisée de façon complètement hiérarchique. Considérez l'exemple suivant, avec deux portées contenant deux mesures :
Le développement logiciel ne consisterait-t-il pas à découvrir des hiérarchies et à modéliser le monde réel sous forme d'arbres ? Dans l'esprit d'un programmeur naïf, l'extrait musical ci-dessus peut aisément se représenter par un ensemble de boîtes imbriquées :
Il est facile de suivre ce modèle en écrivant un logiciel. Le stockage en mémoire des données est évident, et leur écriture sur le disque est triviale. Dans un fichier XML, ce pourrait être quelque chose comme
<score>
<staff>
<measure id="1">
<chord length="1/2">
<pitch name="c">
</chord>
<chord>
....
</measure>
</staff>
</score>
En résumé, ce modèle est évident, simple et clair. Beaucoup de logiciels sont fondés dessus. Malheureusement, il est également insuffisant. La représentation hiérarchique fonctionne pour beaucoup de partitions simples, mais elle est limitée pour une utilisation poussée. Regardez l'exemple suivant :
Ici, plusieurs suppositions du modèle hiérarchique sont mises à mal : les portées débutent et s'arrêtent n'importe où, les voix passent d'une portée à l'autre, et parfois occupent même deux portées.
La notation musicale est vraiment différente de la musique elle-même. La notation est un langage visuel complexe, qui permet de coder des concepts musicaux souvent beaucoup plus simples. Par conséquent, les logiciels devraient refléter cette séparation.
Suite : Diviser pour mieux régner, un modèle pour la notation automatisée.