3.4.4 変数と関数を用いて入力の手間を省く

これまでに、以下のような記述を見てきました:

hornNotes = \relative c'' { c4 b dis c }
\score {
  {
    \hornNotes
  }
}

[image of music]

これは音楽表記を最小化するのに役に立つ可能性があるということに気付くかもしれません:

fragmentA = \relative c'' { a4 a8. b16 }
fragmentB = \relative c'' { a8. gis16 ees4 }
violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA }
\score {
  {
    \violin
  }
}

[image of music]

さらに、これらの変数 (変数、マクロ、(ユーザ定義) コマンドなどと呼ばれます) を調整のために使うこともできます:

dolce = \markup{ \italic \bold dolce }
padText = { \once \override TextScript #'padding = #5.0 }
fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p }
violin = \relative c'' {
  \repeat volta 2 {
    c4._\dolce b8 a8 g a b |
    \padText
    c4.^"hi there!" d8 e' f g d |
    c,4.\fthenp b8 c4 c-. |
  }
}
\score {
  {
    \violin
  }
\layout{ragged-right=##t}
}

[image of music]

これらの明らかに変数は入力の手間を省くのに役立っています。例えそれらの変数が 1 回しか使用されないとしても、変数化することを考慮する価値があります – 複雑さを減らします。以前に使用した変数を使っていない例を見てみましょう。それはとても読み難く、特に最後の行が読み難いです。

violin = \relative c'' {
  \repeat volta 2 {
    c4._\markup{ \italic \bold dolce } b8 a8 g a b |
    \once \override TextScript #'padding = #5.0
    c4.^"hi there!" d8 e' f g d |
    c,4.\markup{ \dynamic f \italic \small { 2nd }
      \hspace #0.1 \dynamic p } b8 c4 c-. |
  }
}

これまでに見てきたのは静的な置き換えです – LilyPond は \padText を見ると、それを定義した内容 (つまり、padText= の右側にあるもの) に置き換えます。

LilyPond は非静的な置き換えも処理できます (それらを関数と見なすことができます)。

padText =
#(define-music-function (parser location padding) (number?)
  #{
    \once \override TextScript #'padding = #$padding
  #})

\relative c''' {
  c4^"piu mosso" b a b
  \padText #1.8
  c4^"piu mosso" d e f
  \padText #2.6
  c4^"piu mosso" fis a g
}

[image of music]

変数を使うことは、LilyPond 入力構文に変更があった場合の作業を減らす良い方法でもあります ( 古い入力ファイルをアップデートする を参照してください)。あなたがあなたの入力ファイルすべてに使用する単一の定義 (\dolce のような) を持っていて、構文が変更された場合、すべての .ly ファイルを変更する代わりに、\dolce 定義をアップデートするだけで済みます。


他の言語: English, deutsch, español, français, magyar, italiano, nederlands

LilyPond — 学習マニュアル

inserted by FC2 system