- \contex Staff = "ID name" {...}: First steps
- \context Voice = "ID name" {...}: First steps
- \layout { ... }: First steps
- \midi { ... }: First steps
- \new Staff: First steps
- \score: First steps
- \version: First steps
- s 音符: Second steps
- マクロ記述方式(方法): First steps
First steps
• 始めの一歩
例えば, 何かまわず以下のようにテキストファイルへtypingして, LilyPondで コンパイルすると.
{ c d e f g a b }
結果の表示です(A4版で組版されます, 此処ではobje部分だけを切り抜いて表示).
テキストファイルはWindows OSの「メモ帳」を使用して作成できます.
ファイルネームは任意ネームで, 例えばexa-a.ly等と名前をつけます.
ここで注意は拡張子を必ず .ly にします.
コンパイルは, Windows OS のコマンドプロンプトを開いて
>lilypond exa-a.lyと入力し[Enter]を押せばOKです.
色々表示しますが(文字化けは無視してください(正常です).
—これはWindows OSのコマンドプロンプト
cmd.exeが日本語表示はSIFT-JISコード標準だからです,
lilypond.exeの(メッセージ)言語表示はutf-8コードです—
最終的に, 例ですと...exa-a.ps exa-a.pdf (命令が有ればmidi)等々が 作成されています.
拡張子 .ps .pdfファイルが譜面ファイルで, アクロバット等々で表示印刷出来ます.
• もう少し整理(清書)しますと......
{ \clef treble \key c\major \time 4/4
c'4 d' e' f' | g' a' b' r \bar "|." }
結果の表示です(obje部分を切り抜いて表示).
これら, 2例は単なるlilypond単純理解表示の為のものです.
つまり, このように記述して. ファイル名前を 任意名.lyで作成し,
cmd.exe(Windows OS コンソール画面, プロンプト) >lilypond 任意名.ly[Enter]で
楽譜やそのmidi(曲)を作成できます.
従いまして, lilypondが解釈できるシーケンス(処理命令文字列), コマンド(処理命令), lilypondの決まりごとに則って.
著者は原稿ファイルを記述しなければなりません. 上記2例はその一部分で LilyPondのデフォルト処理の結果を示しています.
• 1). 本格的な清書記述です......
\version "2.10.0" exa = { c'4 d' e' f' | g' a' b' r \bar "|." \break } \score { \new Staff { \clef treble \key c\major \time 4/4 \tempo 4 = 80 \exa } \layout {} \midi {} }結果の表示です(obje部分を切り抜いて表示).
解説
\version "2.10.0"
これは, "譜面原稿ファイルはLilyPond version 2.10.版で記述しました" の意味です. LilyPondは絶えず美的楽譜追求へ変貌し続けています(演奏者がおもわず弾きたく なるような譜面組版). 従って...versionによってlilypond自身の内部処理に差異が 激しく生じます. 譜面原稿ファイルへversion情報記述は極めて重要です.
exa = {
exaという名前付けは任意名前でOKです.
この記述方式(方法は)はマクロ記述フォームです. 譜面コード記述を書き終えたら 必ず}で閉じます, この閉じコード記述を忘れると lilypondコンパイルはその時点で解釈不能...中止終了します.
c'4 d' e' f' | g' a' b' r \bar "|."
\break
\clef treble \key c\major \time 4/4 \tempo 4 = 80
具体的な, これらLilyPondのコーデング文字意味等々は
cheat.pdf, cheat.html 等々を参照してください.
\score { ... }
\score { はlilypondの楽譜や譜面処理の開始命令です. 音楽原稿ファイルを処理すべき 様々な内部ファイルが読み込まれ, 著者の原稿を処理できるように用意されます. これも 従いまして,}で閉じ—此処で楽譜や譜面の処理範囲終了明示—がなければ なりません. 忘れるとlilypondは処理を中止します.
\new Staff { ... }
読み込んだ著者の楽曲原稿ファイルを, 音楽の五線譜上で組版処理しなさいです. 明確のように}でその範囲終了を忘れないでください.
\exa
exa名前で記述した音楽コーデングをこの場所に呼び込んで処理してくださいの意味です.
このexa名前付けは任意命名です. 呼び出すときはLilyPondエスケープ文字"\"を接頭語に 付けます.
\layout { }
これは, 処理音楽情報(組版処理)を楽譜(譜面)としたファイル作成せよの命令です.
{ ...... }の中に組版の際の様々なパラメータを指定できます.
更に, 上記の\new Staffでの呼び出すStaffへの注文設定も, 此処で記述できます
\midi {}
これは, 処理音楽情報をmidi(曲)ファイルとして作成せよの命令です.
{ ...... }の中にdynamics設定等々様々な曲に関係する パラメーターを記述できます.
Second steps
• lilypondコードに於ける" s "の役割
LilyPondに於ける" s "音符コードは非常に重要です. 一つのサンプルコード例です.
\version "2.10.0" exa = { s1_\markup{ \large \box {s } is ghost! } | s2 s | s4^\< s s\sustainDown s\! | s2^\> s\! | s1^\fermata \bar "|." \break } \score { \context Staff = "example4" { \clef treble \key c\major \time 4/4 \tempo 4 = 80 \exa } \layout {} \midi {} }結果の表示です(obje部分を切り抜いて表示).
" s "音符コードで記述した音符は幽霊です! lilypondコンパイル上はrunしますが, 組版結果には音符が幽霊で存在しませんし, 作成指示したmidiへも作用しません.
しかし, 音楽処理(パソコンのCPU 計算)上では例の如く正常に計算されています. 姿が透明だけに色々様々に組版では利用価値があります.
• 譜面記述テクニック" s "の役割
下記の記述を見てください, 譜面記述で......悩んだ時" s "音符を 思い出してください.
—更に, 一気にLilyPondの音楽処理モード説明に入ります—
\version "2.10.0" exa = { \clef bass \key e\major \time 2/4 % no1小節 r8 b,8^\mp^\< fis[ cis']\! | % no2小節 cis'8^\> b4.*1/3 s4.*1/3 s4.*1/3\! | % no3小節 \clef treble \key c\major \time 4/4 << { c''4^\ff c'' c'' c''\( } \\ { e'2 e' } >> | % no4小節 << { g'2\) s2 } \\ { s2 f'\( } >> | % no5小節 << { d''1 } \\ { c'4\) d'8[ e' f'] a'4. } >> \bar "|." \break } \score { \context Staff = "example5" { \tempo 8 = 40 \override Score.BarNumber #'break-visibility = #all-visible \override Score.BarNumber #'break-visibility = #end-of-line-invisible \override Score.BarNumber #'stencil = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) \exa } \layout { } \midi { } }結果の表示です(obje部分を切り抜いて表示).
(midi曲を検証してみてください. mp,ff,(de)crescendiが曲に反映されています)
2小節目と4小節目が" s "を使った組版です.
4小節目のコーデングに注意してください. ちなみに, ここをg'2\) f'\(と 記述してコンパイルすると, Slurの処理error("原稿記述のSlurの閉じ記述に誤り有り"意味) メッセージが画面に表示されますが, コンパイルは原稿譜面もmidiも作成します. 比較する と一目瞭然でslur部分(弧線)が組版外になっています.
3小節目以後のコーデングに見られる譜面組版コーデングですが.
<< {五線譜上位置} \\ {五線譜下位置} >>これがLilyPondの法則です. もちろん, "上位置\\下位置"の小節個数は一致していなければなりません.
—4小節目が単一に見えますが...実態は上下に音符を持った譜面です—
このサンプルが意味しているのは,
但し, いくら" s "音符が透明でも実態は存在しているので音符のカウントは なされています. 例えば,
LilyPondに於いて << {五線譜上位置} \\ {五線譜下位置} >>で コーデングを始めた時に, "五線譜上位置で発信した属性は必ず五線譜上位置で受け止める" "五線譜下位置で発信した属性は必ず五線譜下位置で受け止める" これは鉄則です.
この意味でも, 幽霊音符" s "(実態は有るけれど姿は透明な音符)利用の一つの 例です. プログラミングで語るとcpu計算上は実態があって計算され, 型(譜面/midi)を 持つとき透明化してしまうobjeという意味になります.
\time 2/4で1小節内に4分音符で2個以上の値の音符を "s"だからといって記述は出来ません. それが, 上例2小節目でのコーデング意味 になっています.
• 和音的の組版
Polyphonyのもう一つの和音的組版例です,和音コード類似のコーデングの組版です.
c d e f g a bを一気に4分音符と 全音符で弾かしてみました. ソースコーデングは以下の簡単な実験的な記述です.
\score{ {<c' d' e' f' g' a' b'>4 r2. | <c' d' e' f' g' a' b'>1 | } \layout { indent = 0.00\mm line-width = 60.00\mm } \midi{} }ご自分でテキストファイルへコーデングして, lilypondでコンパイルしてmidiを聴いて 見てください. 上記のようなコーデングはゲーム感覚で実験的な遊び要素的な 楽しみです. パソコンの前で......いくらでも, ご自分の創意で楽しめます.
\layout { indent = 0.00\mm line-width = 60.00\mm }はこの文書での 貼り付けの為に記述したのであって, 実際の実験では\layout{}で済みます.
ちなみに, Windows OSのワードプロセッサーであるワードや, 非常に優れたソフト・ エクセルへも, この文書の様に文章の中に譜面を貼り付けは可能です.
music typesetterであるLilyPondは, 使いようによってMusic Gameソフトとして パソコン上で遊べます.
• LilyPondで遊ぶ楽しむ(音のゲーム)
この文書の最終的な目標は, このLilyPondでゲームを始めよう! が目的でした. まず第一に LilyPondコンパイル後に自動で譜面表示/midi奏でを自動で行う, 簡単なバッチファイル の作成から始めます.
以下の内容を記述したファイルを作成します. ファイルネームly-run.cmd
(バッチファイルの名前は, 任意名.cmd が鉄則です(Windows OS側の法規).
lilypond %1.ly %1.pdf | %1.midiこれは, lilypondの任意名前の原稿ファイルをコンパイル後にpdfファイルと midiファイルを自動openする極めて簡単なWindows OS でのバッチファイルです.
例えば,以下の原稿記述でファイルを新規作成しまして, ファイルネームtest.ly
(音楽原稿ファイル名前は, 任意名.lyが鉄則です(LilyPond OS側の法規).
\score{ {\key c\major <c' e' g'>1 | \key a\major <cis' e' gis'>1} \layout{} \midi{} }ファイル名をtest.ly等と名づけて保存し,
cmd.exe(コマンドプロンプト)で>ly-run test[Enter] とすれば, test.pdfと test.midiが自動でopenします.
ここで, 注意が必要なのは. ly-run.cmdもtest.lyも同じ場所内 (フォルダー or ディレクトリ)に有ることです(一番簡単な方法). その場所内で, cmd.exe(コマンドプロンプト)で>ly-run test[Enter]と実地すること, 曲終了後は, wmplayer.exe(Windows Media Player)を必ず閉じること. 以上です.
test.lyの遊びは, <c' e' g'>1の響きのc,gを半音高くして響きを聴いてみたのですが,
これを, 音楽的なややっこしい(難しい語で)解説すると. 音楽界のデフォルト常識である 4/4拍子ハ長調ト音記号位置c d gの和音響きを, イ長調で響かせ聴いてみた ......と言った説明になります.
LilyPondのデフォルト組版は, この文書の初期の2例で検証済みです. 四分音符・4/4拍子・へ音記号・ハ長調で組版出力されます. midiは指定楽器がなければ, "acoustic grand"(ピアノ)で作成されます.
理論は別として
\score{{...music code...}\layout{}\midi{}}で *****.lyでsaveして, ly-run.cmdと実行すれば, 譜面表示とmidiが鳴り出します.
では, a\major <cis' e' gis>1をtrumpetで鳴らしてみます(test-2.ly).
\score{{\key a\major\set Staff.midiInstrument="trumpet"<cis' e' gis'>1}\layout{}\midi{}}
実行は, cmd.exe >ly-run test-2[Enter] で......自動車の警笛音響きに 類似音でしょうか.
test.ly とtest-2.lyのコーデングで半角空白の有無の差違が 見てとられると思います. 通常は
\key a\major \set Staff.midiInstrument... \layout{} \midi{}ですが,
\key a\major\set Staff.midiInstrument...\layout{}\midi{}は許されます,
\keya\major\set Staff.midiInstrument...は駄目です.
"\文字列"の後に明確である命令語等々が続くときは, 半角空白は概ね省略できる.
"\文字列"の後にテキスト文字が続く場合には, 明示的に命令語文字列は此処で終わり を知らせる為に, 半角空白が必要になります.
またlilyPondのシーケンス文字列の内には半角空白を入れたシーケンス(配列綴り)が 存在します, それも絶対に省略できません.
コーデングに於ける改行は, 明示的に文字列(単語)の終わりで改行です. テキスト文字列 といえども文字列(単語)の途中では改行をしないほうが良いです.
" %一行以内 "はLilyPondではコメント開始で"%"以後の文字列は改行 まで無視されます.
数行に渡るコメント記述は, 行頭を%{で開始し...コメント最終次行頭で%}と 宣言すれば, その間の記述は全て無視されます. これらは, 著者の覚書(備忘録)用です.
Windows OSのCLI(コマンドラインインターフェイス)は
cmd窓で>help > cmd-list.txt[Enter]でコマンドラインの命令語類とその解説が cmd-list.txtファイル名で作成されますので, コマンドの検証はそちらでお願いします.
また, 命令の個別に欲しい時(例えばcopyコマンド)は.
>help copy >> cmd-list.txt[enter]で, 上記のcmd-list.txtの最終行から 追加上書きで取得できます. 詳細は市販本でお願いします.
LilyPondの解説書はそのバージョンによる, オンラインファイルである,
http://lilypond.org/doc/v2.10/Documentation/
に存在しています, また, 音楽記法に関係する情報がサンプルとして格納されています.
• LilyPondで遊ぶ楽しむ・ゲーム
この後に続くと言うか, 来るべき音(or メロディー)は......? 人それぞれで しょう, 貴方ならこの後をどう展開するか? (以下, Draft Source code)%% -*- Coding: utf-8 -*- \version "2.10.0" \header { dedication = "Enjoy by LilyPond" title = "As for coming next, what kind of sound? " subtitle = "Piano " subsubtitle = " Key e minor " instrument = " " poet = "" composer = \markup{\italic "your name"} arranger = \markup{\tiny "date"} } play = { \autoBeamOff %1-6 \repeat volta 2 { r8 e'8_\pp fis'8[^\< a'] g'4 | b' c''8[ e''] d''4\! | } e'4 fis' g' | c'8[ e'16 g'] c''8[ b'] a'4 | fis'2.( | e'2.) | \break %%7- ここから描き始める } %% get music sheet ---------------------------------------------------------- \score { \new Staff { \clef treble \key e\minor \time 3/4 \tempo 8 = 180 \play } \layout {} } %% get music midi ------------------------------------------------------------ \score { \new Staff { \clef treble \key e\minor \time 3/4 \tempo 8 = 180 \unfoldRepeats \play } \midi {} }たとえば, ファイル名をplay.lyとsaveして, 既述の
>ly-run playで 譜面とmidiを検証しながらコーデングを繰り返し, 自分が納得できる作りが出来たら このゲーム貴方の勝ちです. でも, 完全に満足できるコーデングは出来るとは思えない.
\key e\minorが嫌なら\key g\majorを......e\minorとg\majorでmidiを聞き比べてみると......!
私の描き上げた作品; http://www.ipika.info/Poem/html/2007-mind2.html
Concept Index