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
Autres langues : English, español, italiano, 日本語, nederlands.
About automatic language selection.