25
LilyPond ... みんなの楽譜作成 2015年10月24日 細田 真道 http://www.trueroad.jp/ ~第10回 日本OSS奨励賞 受賞 活動紹介~

LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

Embed Size (px)

Citation preview

Page 1: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

LilyPond... みんなの楽譜作成

2015年10月24日細田 真道

http://www.trueroad.jp/

~第10回 日本OSS奨励賞 受賞 活動紹介~

Page 2: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

LilyPondとは?

● 楽譜作成プログラムです– ソースをコンパイルすると楽譜ができます

● http://www.lilypond.org/

Page 3: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

このソースを

{ c d e f g a b }

入力:ソースファイル test.lyテキストファイル(UTF-8)

Page 4: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

コンパイルします

{ c d e f g a b }

$ lilypond test.lyコンパイル

入力:ソースファイル test.lyテキストファイル(UTF-8)

Page 5: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

楽譜ができました

{ c d e f g a b }

$ lilypond test.lyコンパイル

出力:楽譜 test.pdf

入力:ソースファイル test.lyテキストファイル(UTF-8)

PDFなど

Page 6: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

例えば、こんなソースから、

LilyPondソースファイル一式中のinput/regression/typography-demo.lyより抜粋

\header { title = "LilyPond demo" enteredby="Han-Wen Nienhuys" maintainer="[email protected]" texidoc = "heavily mutilated Edition Peters Morgenlied by Schubert"}\version "2.19.21"#(ly:expect-warning (_ "(De)crescendo with unspecified starting volume in MIDI."))ignoreMelisma = \set ignoreMelismata = ##tignoreMelismaOff = \unset ignoreMelismata #(set-global-staff-size 21)\paper {

%#(set-global-staff-size (* 5.8 mm)) indent = #(* mm 4) line-width = #(* mm 140) system-system-spacing.basic-distance = #10.3 ragged-bottom = ##t % Font settings for Cyrillic and Hebrew % Linux Libertine fonts contain Cyrillic and Hebrew glyphs. #(define fonts (set-global-fonts #:roman "Linux Libertine O,serif" #:sans "Linux Biolinum O,sans-serif" #:typewriter "Linux Libertine Mono O,monospace" ))}modernAccidentals = { \set Staff.extraNatural = ##f \set Staff.autoAccidentals = #'(Staff (same-octave . 1) (any-octave . 0)) \set Staff.autoCautionaries = #'() }

melody = \relative c'' \repeat volta 2 \context Voice = "singer" { \time 6/8 \autoBeamOff << s2.^\markup { \larger \line { \hspace #-3.1 Lieblich, etwas geschwind } } R2. >> r4 r8 c4 g8 | \acciaccatura { f16 } e4 c8 << \new Voice { \stemUp f8. g16 } { \stemDown f8.[ g16] } >> \stemNeutral a8 | fis4 g8 c16[ b a g] f[ e] | d4 f8 \transpose a' e' \relative { a'16[ g fis! g] f![ d] } | g4. r8 gis gis | a4 a16.[ b32] c8[( a]) fis8 | g4.~ 8-\fermata}

firstVerse = \lyricmode { \set stanza = "1." Sü -- ßes Licht! Aus \ignoreMelisma gol -- \ignoreMelismaOff de -- nen Pfor -- ten brichst du __ | sie -- gend durch __ die Nacht. Schö -- ner Tag, du __ bist er -- wacht. __ }

.. .

Page 7: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

\header { title = "LilyPond demo" enteredby="Han-Wen Nienhuys" maintainer="[email protected]" texidoc = "heavily mutilated Edition Peters Morgenlied by Schubert"}\version "2.19.21"#(ly:expect-warning (_ "(De)crescendo with unspecified starting volume in MIDI."))ignoreMelisma = \set ignoreMelismata = ##tignoreMelismaOff = \unset ignoreMelismata #(set-global-staff-size 21)\paper {

%#(set-global-staff-size (* 5.8 mm)) indent = #(* mm 4) line-width = #(* mm 140) system-system-spacing.basic-distance = #10.3 ragged-bottom = ##t % Font settings for Cyrillic and Hebrew % Linux Libertine fonts contain Cyrillic and Hebrew glyphs. #(define fonts (set-global-fonts #:roman "Linux Libertine O,serif" #:sans "Linux Biolinum O,sans-serif" #:typewriter "Linux Libertine Mono O,monospace" ))}modernAccidentals = { \set Staff.extraNatural = ##f \set Staff.autoAccidentals = #'(Staff (same-octave . 1) (any-octave . 0)) \set Staff.autoCautionaries = #'() }

melody = \relative c'' \repeat volta 2 \context Voice = "singer" { \time 6/8 \autoBeamOff << s2.^\markup { \larger \line { \hspace #-3.1 Lieblich, etwas geschwind } } R2. >> r4 r8 c4 g8 | \acciaccatura { f16 } e4 c8 << \new Voice { \stemUp f8. g16 } { \stemDown f8.[ g16] } >> \stemNeutral a8 | fis4 g8 c16[ b a g] f[ e] | d4 f8 \transpose a' e' \relative { a'16[ g fis! g] f![ d] } | g4. r8 gis gis | a4 a16.[ b32] c8[( a]) fis8 | g4.~ 8-\fermata}

firstVerse = \lyricmode { \set stanza = "1." Sü -- ßes Licht! Aus \ignoreMelisma gol -- \ignoreMelismaOff de -- nen Pfor -- ten brichst du __ | sie -- gend durch __ die Nacht. Schö -- ner Tag, du __ bist er -- wacht. __ }

こんな楽譜ができます

.. .

Page 8: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

関わったきっかけ

● 最初は単なるユーザでした● でも、ちょっと気になることが、、、

Page 9: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

LilyPad● Windows版に付属しているテキストエディタ

– タイトルやメニューが化けていました

– でも、特に困りませんでした● 他のエディタを使えばいい● おまけレベル

Page 10: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

とはいえ、

● LilyPadが起動される機会は多い– デスクトップのショートカット

– ソースファイル(*.ly)の編集に関連付け

● これでは人に勧めにくい???– オマケかもしれないがLilyPondの顔ともいえる?

– 起動すると、いきなり文字化け画面が出る

● それよりも、何か気持ち悪い

Page 11: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

原因を探ってみよう!

● ソースのどこかがおかしいんだろう● まずは自分でビルドしてよう

Page 12: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

自分でビルドしてみる

● なんと、文字化けしませんでした– ソースは間違っていない

– ビルド環境に問題がありそう

Page 13: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

では原因は?

● いろいろ調べたら、、、– 古いbinutils(のリソースコンパイラwindres)に

問題あり● 公式バイナリのビルド環境が古いのでは???

Page 14: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

メーリングリストデビュー

● LilyPond開発者メーリングリストへ投稿– 公式バイナリのビルド環境でbinutilsを、アップ

デートして欲しい!!!

Page 15: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

その結果

● でも、なかなかうまく対応してもらえません– 日本語環境なんか興味ない???

– そもそもオマケだし???

● いや、そうじゃなくて、実は結構大変???

Page 16: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

LilyPond公式バイナリ

● http://www.lilypond.org/ からダウンロード可能– Linux

● x86● x86_64● ppc

– FreeBSD● x86● x86_64

– Mac OS X● x86● ppc

– Windows● x86

全8種類

Page 17: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

ビルドツールGUB

● 公式バイナリ全8種をmake一発でビルド● やっていること

– 必要なソースをダウンロード● 環境構築用から依存関係からとにかくすべて

– クロスコンパイル環境を構築● binutils, gcc, glibc, etc.

– 依存関係のあるライブラリ類をクロスコンパイル● fontconfig, pango, freetype, ghostscript, guile, etc.

– LilyPond本体をクロスコンパイル● 楽譜用フォントも生成

– 公式バイナリのインストーラをビルド

Page 18: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

binutilsをアップデートすると

● 依存関係の根っこに近い部分なので、– クロスコンパイル環境すべてビルドしなおし

– 新しいbinutilsではビルドできないものも

● あちこちに影響が

Page 19: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

ちょうどそのころ

● GUBのgccは、かなり古かった● 新しいgccに入れ替えることになった

– LilyPondの開発者は新しいgccを使っていた● C++の新しいテンプレート等を使うと

– 開発者はビルドOK、テストもOK– リポジトリにpush– しかしGUBビルド不能、リリースできず

● でも新しいテンプレートを使いたい!

Page 20: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

gccをアップデートすると

● ほぼすべてのバイナリがgccでビルドされる● ので、あちこちに問題が発生

– 古めのライブラリは全滅に近い● 新しいgccではビルドできないものが多い

– ライブラリをアップデートすると● 新しいgccでビルドできるようになるが● LilyPond向けにパッチを当てていたものは、パッチ作り直し要● 依存関係でさらに別のライブラリ等がビルドできなくなる

– などなど

● 影響範囲はbinutilsの比ではない

Page 21: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

その結果

● LilyPondは新しいテンプレートを使ってしまう● GUBのgccアップデートは未完了● つまり、リリースができない!

Page 22: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

リリース履歴抜粋

● LilyPond 2.19.13 2014-08-31● LilyPond 2.19.14 2014-09-14● LilyPond 2.19.15 2014-09-28

– ここで停滞しはじめました

なんとかしてみよう!(ついでにbinutilsも新しくしよう!!)→というわけで少しずつ直し始めました

Page 23: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

LilyPond 2.19.16 released February 28, 2015At long last, we are very happy to announce the release of LilyPond 2.19.16. This release includes a number of enhancements, and contains some work in progress. You will have access to the very latest features, but some may be incomplete, and you may encounter bugs and crashes. If you require a stable version of Lilypond, we recommend using the 2.18 version. We would like to acknowledge and thank Masamichi Hosoda for making this release possible with his work on updating GUB, the build tool.

約半年の沈黙を破ってリリース

ニュースに謝辞をのせていただきました

文字化けも直りました

Page 24: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

その後は順調にリリース

● LilyPond 2.19.13 2014-08-31● LilyPond 2.19.14 2014-09-14● LilyPond 2.19.15 2014-09-28

– 約半年のブランク

● LilyPond 2.19.16 2015-02-28● LilyPond 2.19.17 2015-03-15● LilyPond 2.19.18 2015-04-05 以下続く

Page 25: LilyPond みんなの楽譜作成 ~第10回 日本OSS奨励賞 受賞 活動紹介~

さいごに

● ぜひ使ってみてください● 公式サイトにチュートリアル等あります

– http://www.lilypond.org/introduction.ja.html

– http://www.lilypond.org/manuals.ja.html

– 先人の方々のおかげで、日本語化はかなり進んでいます

– (開発版Ver. 2.19系列では)最新化されていないマニュアルもありますが、少しずつ進めています

● おかしいなと思ったら英語版マニュアルと見比べてみてください

● オープンソースな楽譜ソースファイルもあります– http://www.mutopiaproject.org/