4.6.6 Scheme を用いた高度な調整

\override\tweak コマンドを用いることで多くのことが可能になりますが、LilyPond のアクションを変更するもっと強力な手段が LilyPond 内部処理へのプログラム可能なインタフェイスを通じて利用可能です。Scheme プログラミング言語で書かれたコードは LilyPond の内部処理に直接組み込むことができます。もちろん、それを行うには Scheme プログラミングについての基礎知識が必要であり、その手引きが @ref{Scheme チュートリアル} で提供されています。

多くの実現可能なことの 1 つの例としては、プロパティに定数をセットする代わりに Scheme プロシージャをセットすることができます。このプロパティが LilyPond によってアクセスされたときに、このプロシージャが呼び出されます。このプロシージャが呼び出されたときに、このプロシージャによって決定された値を動的にそのプロパティにセットすることができます。以下の例では、符頭にその音符の譜表上での位置に従って色を付けています:

#(define (color-notehead grob)
  "Color the notehead according to its position on the staff."
  (let ((mod-position (modulo (ly:grob-property grob 'staff-position) 7)))
    (case mod-position
      ;;   Return rainbow colors
      ((1) (x11-color 'red    ))  ; for C
      ((2) (x11-color 'orange ))  ; for D
      ((3) (x11-color 'yellow ))  ; for E
      ((4) (x11-color 'green  ))  ; for F
      ((5) (x11-color 'blue   ))  ; for G
      ((6) (x11-color 'purple ))  ; for A
      ((0) (x11-color 'violet ))  ; for B
    )
  )
)

\relative c' {
  % Arrange to obtain color from color-notehead procedure
  \override NoteHead #'color = #color-notehead
  c2 c' |
  b4 g8 a b4 c |
  c,2 a' |
  g1 |
}
\addlyrics {
  Some -- where o -- ver the Rain -- bow, way up high,
}

[image of music]

@ref{Tweaking with Scheme} に、これらのプログラム可能なインタフェイスの使い方を示している例がもっとあります。


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

LilyPond — 学習マニュアル

inserted by FC2 system