GSoC 2012

Le Google Summer of Code

Le Google Summer of Code est un programme global qui rémunère des étudiants durant la période estivale, pour travailler au profit de projets open source.

L’équipe LilyPond considère qu’il s’agit là d’une excellente opportunité pour recruter de nouveaux contributeurs, encourager et motiver des étudiants qui participent déjà au développement de LilyPond. L’un de nos contributeurs a été reçu pour participer à l’édition 2012 du programme, sous l’égide du projet GNU, et nous comptons bien participer aux éditions futures.

Recensement de nos idées pour 2012

Voici les projets que nous avons proposés aux étudiants du GSoC 2012. Bien que la période de candidature soit close, nous avons décidé de maintenir en ligne cette page du site, comme source d’inspiration pour ceux qui seraient intéressés au développement de LilyPond. Des membres de l’équipe de développement aideront volontiers ceux qui aimeraient s’attaquer à l’un de ces projets.

Il y a naturellement bien d’autres choses à améliorer dans LilyPond, y compris dans les détails. Une liste exhaustive des problèmes est disponible ici.

Notes d’ornement (grace notes)

Résolution des problèmes de synchronisation des notes d’ornement, tout en tenant compte de l’architecture sous-jacente (voir le numéro 34 de notre traceur). Les notes d’ornement perturbent LilyPond dans sa gestion du temps, dans la mesure où elles correspondent quelque peu à un retour en arrière. Ceci entraîne des effets indésirables tout particulièrement lorsqu’elles interviennent dans une portée seulement.

Difficulté : moyenne

Préalables : C++, MIDI

Recommandé : familiarité avec les arcanes de LilyPond

Mentors : Mike Solomon, Carl Sorensen

MusicXML

Ajout d’une fonctionnalité d’export au format MusiXML et amélioration de l’import, tout en fournissant des tests de performance. Selon le temps imparti, ceci pourrait se restreindre à :

  • L’exportation d’un minimum d’informations musicales tel que cela se pratique déjà au niveau du MIDI, autrement dit à l’aide de classes d’exportateurs dérivées de la classe translator ;
  • Construction de l’arborescence XML d’après le contenu musical de base, et connexion des éléments musicaux à des balises XML ;
  • Faire en sorte que tous les graveurs LilyPond restent pleinement opérationnels ;
  • Ajout d’une capacité de lier tout objet de rendu – autrement dit chaque stencil ou groupe de stencils – à l’élément musical qui en est la cause et, par voie de conséquence, à la balise correspondante dans l’arborescence XML ;
  • Ajout d’un moteur de rendu XML qui pourrait alors inclure l’information de mise en forme pour tout objet de rendu dans les balises XML.

Le but sera considéré atteint dès lors qu’une partition en XML aura été importée, puis ré-exportée dans ce même format sans perte non intentionnelle de donnée.

Difficulté : moyenne

Préalables : MusicXML, Python, les bases de LilyPond

Mentors : Reinhold Kainhofer, Mike Solomon

La connaissance d’autres éditeurs de partition, dans un but de tests comparatifs, constituerait un plus.

Amélioration des liaisons

Le galbe par défaut des liaisons n’est souvent pas pleinement satisfaisant. Il est par ailleurs impossible de marquer une liaison de prolongation entre des enharmoniques ({ cis'~ des' }), et la « coupure » d’une liaison par un changement de clef ou de ligne n’est pas totalement fonctionnelle. Ce projet comporte entre autres un recensement d’exemples de résultats défectueux, l’appréciation du résultat optimal et l’écriture du code approprié.

Difficulté : difficile

Préalables : C++, expérience dans l’écriture d’heuristiques

Connaissances appréciées : LilyPond, sens de l’esthétique

Mentor : Mike Solomon

Ajout de variantes spécifiques pour certains glyphes

Il s’agit ici de pouvoir disposer de variantes, sur la ligne ou entre deux lignes, plus courts ou plus étroits, pour certains glyphes – les altérations par exemple – ainsi que d’une infrastructure générique de gestion. Autre exemple, dans le domaine de la notation ancienne, avec deux variantes de la brève, l’une avec un évidement plus important que l’autre.

Difficulté : facile

Préalables : MetaFont, C++, une bonne vue pour les détails

Connaissance appréciée : les bases de LilyPond

Mentor : Werner Lemberg

Amélioration des ligatures

Le positionnement des ligatures, qu’elles soient rectilignes, passent d’une portée à l’autre, discontinues ou coudées, n’est pas optimal. Une ligature devrait dépendre du contexte et des notes adjacentes (voir la section 2.2 de cet article). Dans la mesure du possible, raccourcir le temps de calcul nécessaire à la génération des ligatures.

Difficulté : moyenne

Préalables : C++, expérience dans l’écriture d’heuristiques

Connaissance appréciée : sens de l’esthétique

Mentors : Mike Solomon, Carl Sorensen

Nettoyage des messages en cours de compilation

Il s’agit d’assainir les messages du compilateur, l’analyse du code statique, ainsi que les messages de valgrind. Les outils d’analyse automatique du code (messages en g++ ou clang) ainsi que les outils d’analyse comme valgrind pour les éventuelles fuites de mémoire ou callgrind pour le profilage du code, fournissent des informations précieuses quant à d’éventuelles faiblesses du code C++. Faire le ménage dans tous ces messages nous permettrait de rejeter tout patch qui introduirait des messages superflus.

Difficulté : moyenne

Préalable : C++

Mentors : Joe Neeman, Reinhold Kainhofer