年初に書いた、今年やっていきたいことの一つの「作曲、音楽理論」の研究。
ぶっちゃけ、ラモーの音楽理論の「不協和音の二重用法」がホントに意味不明で、ずっと止まってたんだけど、ちょっとずつ再開しようかなと。
そのうえでブログを書くときに必要になってくるのが、楽譜の作成。
それと、実際の響きを確認するための、音の作成。
調べてみると、楽譜作成ソフトのLilyPondで、楽譜の作成はもちろん、MIDIへの出力も出来るということだった。
これはよさそうということで、インストールしてみた。
LilyPondってどんなソフト?
すごく簡単にいうと、楽譜向けの。
テキストファイルにコマンドで音符などを書いていき、楽譜やMIDIを出力させる。
ちなみに、楽譜向けののマクロパッケージとしては、MusiXTeXというのもあるみたい。
ただ、LilyPondはそれとは別物で、昔こそバックエンドでを使っていたものの、今は直接PostScript(やPDF、PNG)を出力するようになってるみたい。
けど、その名残か、書き方はかなりに近い。
例えば、以下のような特徴がある:
- コマンドは
\
(バックスラッシュ)で始まる - コメントは
%
(パーセント)で始まる
LilyPondのファイルの一例を挙げると、以下のような感じ:
\version "2.18.2" % メリーさんの羊(冒頭) % merry.ly \header { title = "メリーさんの羊" } \score { << \relative c' { \tempo 4 = 120 e4. d8 c4 d | e4 e e r | d d d r | e g g r | } \addlyrics { メ リ さん の ひ つ じ ひ つ じ ひ つ じ } >> \layout { } \midi { } }
これをコマンドにかけてやると、以下のような出力が得られる:
さらに、MIDIファイルも出力される。
ダウンロード
まずはダウンロードから。
公式HPの「ダウンロード」からダウンロードできる。
自分はMacなので、Mac OS Xのページからx86向けのバイナリ(lilypond-2.18.2-1.darwin-x86.tar.bz2)をダウンロードした。
ダウンロードしたものを解凍すると、LilyPond.appが出来るので、それをアプリケーションのフォルダ(/Applications)にコピー。
あとは、コピーしたLilyPond.appを実行すれば、LilyPond(GUI)が立ち上がる。
(※たぶんセキュリティで一回ブロックされるので、「システム環境設定」の「セキュリティとプライバシー」から実行許可を与える必要があることに注意)
README的な文章を一緒に表示されるので、まずはその手順に従ってみるといいと思う。
最初の一歩という感じで、簡単な楽譜が作れるんで。
コマンドラインからの実行
さて、そんなわけで、GUIからも一応ファイルの作成〜タイプセットまで出来るようにはなっているものの、実際には使い慣れたエディタを使いたいわけで、コマンドラインから実行できるに越したことはない。
ということで、コマンドラインから実行(タイプセット)が出来るようにした。
LilyPondの各コマンドは、LilyPond.app/Contents/Resources/bin
以下に置かれている。
ここに直接PATHを通してもいいんだけど、いろいろコマンドが置かれてるんで、ヘルパースクリプトを用意して~/bin
とかに置き、そこにPATHを通した方がいいみたい。
以下のヘルパースクリプトを~/bin/lilypond
として用意:
#!/bin/bash exec /Applications/LilyPond.app/Contents/Resources/bin/lilypond "$@"
そして、実行権限をつける:
$ chmod 755 ~/bin/lilypond
あとは、~/bin
にPATHを通してあげればいい。
(自分の場合、すでに~/bin
にPATHを通していたんで、特に何もしなかった)
コマンドの構文は、以下のとおり:
$ lilypond [OPTION]... FILE...
主なオプションは、以下:
オプション | 説明 |
---|---|
-I<dir> ,--include=<dir> |
<dir> を入力ファイルのサーチパスに追加する。 |
-o<file> ,--output=<file> |
出力ファイル、もしくは、ディレクトリを指定する。 |
-l<level> ,--loglevel=<level> |
コンソールの出力を設定する。<level> は以下のいずれか:
|
-f<format> ,--format=<format> |
出力フォーマットを指定する。<format> は以下のいずれか:
|
--ps |
PostScriptを出力。 |
--pdf |
PDFを出力。 |
--png |
PNGを出力。 |
-h ,--help |
ヘルプを出力して終了。 |
-v ,--version |
バージョンを出力して終了。 |
-V ,--verbose |
冗長出力する。 |
他にも、高度なオプションのための-d
などがあったりする。
パッチ
さて、これで問題なく動けばいいんだけど、自分の環境の場合、いくつか問題があったので、ローカルで修正を入れた。
まず、PNGを出力させようと--png
オプションを指定したら、次のようなエラーが出た:
Converting to PNG...dyld: Library not loaded: ./bin/../sobin/libgs.8.70.dylib Referenced from: /Applications/LilyPond.app/Contents/Resources/bin/../bin/gs Reason: image not found
調べてみると、PNGを出力させるのに内部的にGhostScript(コマンドはgs)を使っているっぽいのだけど、そのリンクすべき動的ライブラリのパスが間違っているっぽい。
$ cd /Applications/LilyPond.app/Contents/Resources/bin $ otool -L gs # リンクの確認 gs: ./bin/../sobin/libgs.8.70.dylib (compatibility version 0.0.0, current version 0.0.0) # これが正しくない /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.1.2)
libgs.8.70.dylibは、LilyPond.app/Contents/Resources/lib/libgs.8.70.dylib
にあるので、install_name_tool
コマンドで以下のように修正:
$ install_name_tool -change ./bin/../sobin/libgs.8.70.dylib @executable_path/../lib/libgs.8.70.dylib gs
これでPNGの出力自体は出来るようになったんだけど、まだ以下のようなワーニングが出ていた:
Converting to PNG... *** Warning: GenericResourceDir doesn't point to a valid resource directory. the -sGenericResourceDir=... option can be used to set this.
これは、GhostScriptのGenericResourceDir
の設定が正しくないっぽい。
GenericResourceDir
の設定は、LilyPond.app/Contents/Resources/share/ghostscript/8.70/Resource/Init/gs_res.ps
に書かれていたので、以下のように修正:
- /GenericResourceDir () .resource_dir_name + /GenericResourceDir (/Applications/LilyPond.app/Contents/Resources/share/ghostscript/8.70/Resource/) .resource_dir_name
これでワーニングも出ないようになった。
Vimの設定
さらに、vimのLilyPond用の設定が用意されていたので、それも設定した。
~/.vimrc
に、以下を追加:
filetype off set runtimepath+=/Applications/LilyPond.app/Contents/Resources/share/lilypond/current/vim/ filetype on
これでLilyPondのファイルタイプが認識され、インデントや構文ハイライトが使えるようになった。
画像出力
ちなみに、そのまま出力すると、A4で出力されることになる。
それだと、ちょっとした画像を貼りたいときには、不便。
そんな場合には、以下のようにすればいいみたい:
まず、余計な余白を出さない設定を追加する:
\paper { indent=0\mm line-width=120\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f }
そして、コマンドラインで以下のように高度なオプションを指定すればいい:
# PNG $ lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png (ファイル名) # 透過PNG $ lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts -dpixmap-format=pngalpha --png (ファイル名)
これで出力すると、以下のようになる:
余白がなくて、いい感じ。
今日はここまで!