| [ < ] | [ > ] | [ << ] | [ 上へ ] | [ >> ] | [トップ] | [目次] | [インデックス] | [ ? ] |
@translationof Using music functions
調整を異なる音楽表記に再利用する必要がある場合、その調整を音楽関数にしておくと便利です。このセクションでは、置換 関数についてだけ議論します。置換関数は変数を LilyPond 入力コードに置き換えます。他のもっと複雑な関数については、 (extending)Music functions section ‘Music functions’ in Extending で記述されています。
| 5.6.1 置換関数の構文 | ||
| 5.6.2 置換関数の例 |
| [ < ] | [ > ] | [ << ] | [ 上へ ] | [ >> ] | [トップ] | [目次] | [インデックス] | [ ? ] |
@translationof Substitution function syntax
変数を LilyPond コードに置換する関数を作成することは簡単にできます。置換関数の一般的な形式は以下のようなものです:
function =
#(define-music-function
(arg1 arg2 …)
(type1? type2? …)
#{
…music…
#})
|
ここで
argN | n 番目の引数 |
typeN? | argN が #t を返す Scheme の 型述語 (type predicate)。 |
…music… | 通常の LilyPond 入力。引数を参照するには $ (LilyPond 構造が許可されている場合のみ) や # (引数を Scheme 値、音楽関数の引数、あるいは音楽リスト内部の音楽として使う場合) を用います
(例: ‘#arg1’)。 |
です。
引数として、型述語のリストが必須です。音楽関数で用いられる一般的な型述語には下記のものがあります:
boolean? cheap-list? (‘list?’ の代わりに用いることで、処理を高速にします) ly:duration? ly:music? ly:pitch? markup? number? pair? string? symbol? |
利用可能な型述語のリストは、@ref{Predefined type predicates} を参照してください。ユーザが型述語を定義することもできます。
記譜法リファレンス: @ref{Predefined type predicates}
拡張: (extending)Music functions section ‘Music functions’ in Extending
インストールされているファイル: ‘lily/music-scheme.cc’, ‘scm/c++.scm’, ‘scm/lily.scm’
| [ < ] | [ > ] | [ << ] | [ 上へ ] | [ >> ] | [トップ] | [目次] | [インデックス] | [ ? ] |
@translationof Substitution function examples
このセクションでは、置換関数の例をいくつか紹介します。高度なことはしていませんが、シンプルな置換関数を実現する方法を示しています。
最初の例では、TextScript のパディング設定を容易にするための関数が定義されています:
padText = #(define-music-function (padding) (number?) #{ \once \override TextScript.padding = #padding #}) \relative { c''4^"piu mosso" b a b \padText #1.8 c4^"piu mosso" b a b \padText #2.6 c4^"piu mosso" b a b }
数値のほかに、音符などの音楽表記を音楽関数への引数にすることができます:
custosNote = #(define-music-function (note) (ly:music?) #{ \tweak NoteHead.stencil #ly:text-interface::print \tweak NoteHead.text \markup \musicglyph "custodes.mensural.u0" \tweak Stem.stencil ##f #note #}) \relative { c'4 d e f \custosNote g }
上に挙げた例の両方では、関数やオーバライドにおける最後の引数が空きになっているだけの、単一の式の形をしています。このような特別な場合では、よりシンプルな関数の定義方法があり、一定の部分はそのまま書き出し、引数となる最後の部分を \etc で置き換えるという書き方をします:
padText = \once \override TextScript.padding = \etc \relative { c''4^"piu mosso" b a b \padText #1.8 c4^"piu mosso" b a b \padText #2.6 c4^"piu mosso" b a b }
custosNote = \tweak NoteHead.stencil #ly:text-interface::print \tweak NoteHead.text \markup \musicglyph "custodes.mensural.u0" \tweak Stem.stencil ##f \etc \relative { c'4 d e f \custosNote g }
複数の引数をとる置換関数を定義することもできます:
tempoPadded = #(define-music-function (padding tempotext) (number? markup?) #{ \once \override Score.MetronomeMark.padding = #padding \tempo \markup { \bold #tempotext } #}) \relative { \tempo \markup { "Low tempo" } c''4 d e f g1 \tempoPadded #4.0 "High tempo" g4 f e d c1 }
| [ < ] | [ > ] | [ << ] | [ 上へ ] | [ >> ] |
This document was generated by gub on 7 月 13, 2020 using texi2html 1.82.
他の言語: English, català, deutsch, español, français, italiano
About automatic language selection.