GSoC (Google Summer of Code)

Was ist Google Summer of Code?

Der GSoC-Webseite zufolge ist Google Summer of Code ein globales Programm, das Studenten Stipendien offeriert, um Code für Open-Source-Projekte zu schreiben. Google arbeitet mit der Open-Source-Gemeinschaft zusammen und hat unterstützenswerte Projekt für den nächsten Sommer gefunden.

Das LilyPond-Team hat beschlossen, dass sich hier eine ausgezeichnete Möglichkeit bietet neue Mitarbeiter zu finden, Studenten, die sich schon an LilyPond beteiligen, weiter einzubinden und – das Wichtigste – aufregenden Code zur freien Benutzung für alle zu schreiben.

Wir nehmen an GSoC als Teil des GNU-Projekts teil. Siehe auch GNU GSoC-Webseite zu Informationen über die Teilnahme.

Unsere Ideenliste

Unten befindet sich eine Liste mit empfohlenen Projekten für GSoC-Stundenten. Wenn Sie kein Projekt finden, das Ihnen passt, schlagen Sie einfach ein eigenes vor! Es ist auch möglich, ein Projekt einzuschränken, wenn Sie das Gefühl haben, es ist zu umfangreich.

Wir erfordern, dass jeder Student grundlegende Kenntnis von git hat und empfehlen, dass alle, die sich für die Projekte (außer dem letzten) interessieren, grundlegende Kenntnisse in Musiknotation haben. Zusätzlich sollten Sie Englisch sprechen können.

Stichnoten

Lösen Sie Probleme mit der Synchronisation von Verzierungen (Vorschläge usw.), zusammen mit der darunter liegenden Architektur (siehe Nummer 34 in unserem Tracker). Verzierungen bringen das Zeitmaß von LilyPond durcheinander, weil sie sozusagen in der Zeit rückwärts gehen. Dadurch entstehen seltsame Effekte, besonders wenn in einem Notensystem eine Verzierung auftritt und im zweiten nicht.

Schwierigkeit: mittel

Erfordernisse: C++, MIDI

Empfohlen: Bekannt mit den Interna von LilyPond

Mentoren: Mike Solomon, Carl Sorensen

MusicXML

Hinzufügen von erweiterter Unterstützung für den Export von MusicXML und Verbesserung des Imports, zusätzlich Tests, die die Funktionen überprüfen. Abhängig von der zur Verfügung stehenden Zeit kann etwas oder alles der folgenden Punkte implementiert werden:

  • Der Export soll grundlegende Funktionen wie den MIDI-Export können (d. h. die Benutzung von eigenen Exportklassen, abgeleitet von der Übersetzerklasse.)
  • Der XML-Baum soll aus dem grundlegenden musikalischen Inhalt erstellt werden, hinzu kommt eine Verbindung von musikalischem Ereignis zu XML-Tag.
  • Alle LilyPond-Engraver sollen ihre Arbeit verrichten.
  • Alle Ausgabe-Objekte (also alle Stencils/Gruppen von Stencils) sollen der Musik zugeordnet werden (und damit auch dem XML-Tag im XML-Baum).
  • Ein XML-Ausgabebackend soll hinzugefügt werden, welches die Layoutinformationen für jedes Ausgabe-Objekt den XML-Tags hinzufügen kann.

Das Ziel wird als erreicht angesehen, wenn eine (vorher festgelegte) Partitur von MusicXML importiert und dann wieder exportiert werden kann, ohne dass ungewollter Datenverlust eintritt.

Schwierigkeit: mittel

Erfordernisse: MusicXML, Python, grundlegene Kenntnis von LilyPond

Mentoren: Reinhold Kainhofer, Mike Solomon

Kenntnis anderer Notensatzprogramme (zum Testen) wäre ein netter Bonus.

Binde- und Legatobögen verbessern

Die Standardform von Binde- und Legatobögen ist oft nicht zufriedenstellend. Überbindungen von enharmonischen Tönen (etwa { cis'~ des' }) werden nicht unterstützt, auch Überbindungen, die von Schlüssel- oder Systemwechsel unterprochen werden, sind schlecht unterstützt. Das Projekt beinhaltet das Sammeln und Sortieren von Beispielen schlechter Ausgabe, das feststellen der richtigen Formatierung und das Schreiben das dazu notwendigen Codes.

Schwierigkeit: schwer

Erfordernisse: C++, Erfahrung mit Heuristiken

Empfohlene Kenntnisse: LilyPond-Kenntniss, Sinn für Ästhetik

Mentor: Mike Solomon

Eine besondere Variante bestimmter Glyphen hinzufügen

Zusätzliche Varianten von Glyphen schaffen für Situationen wie auf der Linie, zwischen den Linien, kürzere und schmalere Varianten für z. B. Versetzungszeichen, zusammen mit einer Infrastruktur, die das unterstützt. Ein Beispiel ist die Breve der Alten Notation, deren Notenkopf in zwei Varianten vorkommt, mit kleinerem und größerem Loch.

Schwierigkeit: leicht

Erfordernisse: MetaFont, C++, gutes Auge für Details

Empfohlene Kenntnisse: grundlegene LilyPond-Kenntnis

Mentor: Werner Lemberg

Bebalkung verbessern

Die Standardpositionen von normaler Bebalkung, Bebalkung über Systeme hinweg, unterbrochene und Knie-Bebaklung sollte verbessert werden. Balken sollten sich am Kontext und benachbarten Noten orientieren (siehe Abschnitt 2.2). Wenn möglich, sollte die Rechenzeit für die Bebalkung verkürzt werden.

Schwierigkeit: mittel

Erfordernisse: C++, Erfahrung mit Heuristiken

Empfohlene Kenntnisse: Sinn für Ästhetik

Mentoren: Mike Solomon, Carl Sorensen

Bessere Unterstützung für Tabulaturen

  • Nicht-monotonische Saitenstimmungen, wie Ukulele
  • Ein Eingabemodus für Tabulaturen (im Moment wird die Information notiert wie die übliche westliche Notation, beispielsweise eine Viertelnote Fis, und dann in eine Tabulatur konvertiert), um mittelalterliche Lautentabulaturen transkribieren zu können.
  • Wenn ein Bunddiagramm für einen Akkord definiert ist, sollte diese Information benützt werden, um den Akkord auf dem System darzustellen (und nicht nur eine Standarddarstellung benützt werden).

Schwierigkeit: leicht

Erfordernisse: C++

Empfohlene Kenntnisse: Kenntnis von Tabulaturnotation familiarity

Mentor: Carl Sorensen

Kompilationswarnungen aufräumen

Aufräumen von Kompilationswarnungen, statischer Codeanalyse und Valgrind-Warnungen. Werkzeuge zur automatischen Analyse von Code (Warnungen in g++ und clang) und Analysewerkzeuge wie die Valgrind-memory-leak-detection und callgrind code profiler stellen wertvolle Informationen über mögliche Probleme im C++-Code zu Verfügung. Wenn man diese Warnungen aufräumt, könnte man auch automatisch alle Patche zurückweisen, die neue Warnungen mit sich bringen würden.

Schwierigkeit: mittel

Erfordernisse: C++

Mentoren: Joe Neeman, Reinhold Kainhofer