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