GSoC

Le Google Summer of Code

Pour reprendre les termes même du site du GSoC, « Le Google Summer of Code est un programme global qui rémunère des étudiants pour écrire du code au bénéfice de projets open source. Google a travaillé de concert avec la communauté open source afin d’identifier et subventionner des projets passionnants au cours de l’été prochain. »

L’équipe LilyPond considère qu’il s’agit là d’une excellente opportunité pour recruter de nouveaux contributeurs, encourager et motiver les étudiants qui participent déjà au développement de LilyPond et, pourquoi pas, écrire du code qui bénéficiera à tout le monde.

Nous participons au GSoC sous l’égide du projet GNU. Vous trouverez plus d’informations sur les conditions de participations sur la page GNU GSoC.

Recensement de nos idées

Voici les projets que nous proposons aux étudiants du GSoC. N’hésitez pas à émettre vos propres suggestions si aucun d’entre eux ne vous convient. Par ailleurs, si l’un de ces projets vous semble trop volumineux, il est toujours possible d’en réduire l’ampleur.

Nous exigeons des étudiants intéressés un minimum de connaissances de git. En dehors du dernier projet, il serait souhaitable que les candidats connaissent un peu la musique.

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

Amélioration du support des tablatures

  • Accordages non monotoniques, tel le Ukulele ;
  • Création d’un mode de saisie spécifique – pour l’instant, l’information musicale est saisie en notation occidentale moderne, comme « un fa dièse noire », puis convertie en tablature – pour faciliter la transcription de tablatures médiévales pour luth ;
  • Implémentation de fonctionnalités de tablatures modernes, tels les désinences, pichenettes et tapotements ;
  • Un diagramme de fret correspondant à un accord particulier devrait pouvoir permettre de reproduire cet accord sur la portée, sans être limité à l’accord par défaut.

Difficulté : facile

Préalable : C++

Connaissance appréciée : notation en tablature

Mentor : 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