GSoC

Google Summer of Code とは?

GSoC website からの引用です: (LilyPond ドキュメント訳者による訳) “Google Summer of Code はオープン ソース プロジェクトのためにプログラム コードを書いた学生に報酬を提供する世界規模のプログラムです。Google は、次の夏に学生が取り組むべきエキサイティングなプロジェクトを見つけて資金提供するために、オープン ソース コミュニティと活動してきました。”

LilyPond チームは、新しい貢献者を見つけ、すでに LilyPond の開発に参加している学生がより熱心に取り組む動機付けを与え、それに – 最後に重要なこととして – すべての人々の利益となる素晴らしいコードを得るため、GSoC を絶好の機会だと捉えました。

LilyPond チームは GNU プロジェクトの一部として GSoC に参加しています。参加方法は GNU GSoC webpage を参照してください。

LilyPond チームからのアイディア リスト

以下のリストは GSoC に参加する学生に提案されているプロジェクトです。あなたに相応しいプロジェクトが見つからないのであれば、あなた自身で提案してください!リストアップされたプロジェクトが大きすぎると感じるのであれば、プロジェクトをスケール ダウンすることもできます。

参加する学生には git についての基本的な知識を持っていることを求めていますが、それ以外に楽譜記譜についての基本的な知識を持っていることを重視します。

装飾小音符

装飾小音符の同期についての問題を、すべての基本的なアーキテクチャも含めて修正してください (バグ トラッカーの問題 34 を参照してください)。装飾小音符は時間を巻き戻すかのように振舞い、LilyPond のタイミングを混乱させています。これにより予期しない効果 – 特に、ある譜が装飾小音符を持っていて、他の譜が持っていない場合に – が引き起こされています。

難易度:

必須スキル: C++, MIDI

推奨スキル: LilyPond の内部を熟知していること

メンター: Mike Solomon, Carl Sorensen

MusicXML

広範囲にわたる MusicXML エクスポート機能の追加と、インポート機能の改良、それらが機能することのチェックを行ってください。参加時間に応じて以下のいくつか、または全てを実現してください:

  • MIDI エクスポートのような基本的な音楽コンテンツ エクスポート機能(つまり、翻訳クラスから派生したエクスポート専用のクラス) を扱います。
  • 基本的な音楽コンテンツの XML ツリーを構築し、音楽イベントと XML タグを結び付けます。
  • すべての LilyPond エングラーバにエクスポート処理を実行させます。
  • 各出力オブジェクト (基本的には各ステンシル / ステンシルのグループ) を音楽イベントにリンクさせる機能を追加します (そして、それにより、XML ツリーの XML タグにリンクさせます)。
  • XML 出力のバックエンドを追加します。その後、バックエンドには各出力オブジェクトのレイアウト情報を XML タグに追加する機能を持たせます。

ゴールは、MusicXML から楽譜をインポートして、データのロス無しにエクスポートすることです。

難易度:

必須スキル: MusicXML, Python, 基本的な LilyPond の知識

メンター: Reinhold Kainhofer, Mike Solomon

他の楽譜ライターの経験 (クロス テストのために) があると尚良しです。

スラーとタイの改良

スラーとタイのデフォルトのカーブ形状はしばしば満足いかないものです。同音異名の音符間のタイ ({ cis'~ des' }) はサポートされておらず、音部記号や譜の変更によって「中断」されるタイのサポートも十分ではありません。このプロジェクトでは、不満足な出力例を収集、ソートして、どのような出力にするかを決定して実際にコードを記述します。

難易度:

必須スキル: C++, 試行錯誤によるコード記述の経験

推奨スキル: LilyPond の知識, 美的感覚

メンター: Mike Solomon

フォント図柄の特殊な変体を追加する

譜上の線、譜間の線、いくつかの図柄 (例えば臨時記号) を短く幅を縮めたものを追加して、それらをサポートするための一般的なインフラを整備します。使用例には古代記譜法の breve (全音符の 2 倍の長さ) の符頭があり、これには符頭の穴が小さいものと大きいものの 2 つの変体があります。

難易度:

必須スキル: MetaFont, C++, 細部を確認できる眼力

推奨スキル: 基本的な LilyPond の知識

メンター: Werner Lemberg

連桁の改良

連桁 (通常、譜をまたぐ、中断する、符幹が上下に突き出る連桁) のデフォルトの配置を改良する必要があります。連桁はコンテキストと付近の音符に依存します (この PDF のセクション 2.2 を参照してください)。可能であれば、連桁の算出時間を削減してください。

難易度:

必須スキル: C++, 試行錯誤によるコード記述の経験

推奨スキル: 美的感覚

メンター: Mike Solomon, Carl Sorensen

タブ譜サポートの改良

  • ウクレレのようなモノトーンではない弦楽器のチューニング。
  • 中世のリュートのタブ譜を記述するためのタブ譜入力モードを作成します (現在、音楽情報を西洋の一般的な音楽記譜用語 – つまり、“四分音符の f シャープの音符” のように – で入力して、それからタブ譜に変換しています)。
  • ベンド、プル オフ、ハンマー オンのような現代のタブ譜機能を実装します。
  • 与えられた和音に対するフレットボードの形が定義されている場合に、譜上にその和音を表示する時にそのフレットボードの情報を使います (デフォルトの和音の形だけを表示するのではありません)。

難易度:

必須スキル: C++

推奨スキル: タブ譜の記譜に馴染みがあること

メンター: Carl Sorensen

様々なコンパイル警告のクリーン アップ

コンパイラ、静的コード分析、それに valgrind の警告をクリーン アップしてください。自動コード分析ツール (g++clang の警告)、valgrind メモリ リーク検出、それに callgrind コード プロファイラは C++ コードの欠陥についての有用な情報を提供してくれます。これらの警告をクリーン アップすることで、警告を発生させるパッチを自動的に拒絶することが可能になります。

難易度:

必須スキル: C++

メンター: Joe Neeman, Reinhold Kainhofer