[ << デフォルトを変更する ] | [Top][Contents][Index] | [ 付表 >> ] |
[ < 下位コンテキスト - ボイス ] | [ Up : コンテキストを理解する ] | [ コンテキストを残しておく > ] |
5.1.2 コンテキストを作成して参照する
LilyPond は、適切なコンテキストが存在しないうちに音楽表記に遭遇すると、自動的に下位コンテキストを作成します。しかしながら、通常これは、シンプルな楽譜やドキュメントの中の楽譜断片のような単純な場合にしかうまくいきません。もっと複雑な楽譜の場合、すべてのコンテキストを \new
コマンドや
\context
コマンドを用いて明示的に指定することをお勧めします。これら 2 つのコマンドの構文はほとんど同じです:
[\new | \context] Context [ = name] [music-expression]
ここで、\new
と \context
のどちらかを使用します。Context は作成するコンテキストのタイプであり、name は作成されるコンテキストにオプションで付けることができる名前であり、music-expression はこのコンテキストのエングラーバとパフォーマによって処理される単一の音楽表記です。
コンテキスト名を持たない \new
コマンドは一般的に複数の譜を持つ
score を作成するのに用いられます:
<< \new Staff \relative { % 暗黙的に Voice コンテキストが作成されます c''4 c } \new Staff \relative { d''4 d } >>
そして、1 つの譜に複数のボイスが配置されます:
\new Staff << \new Voice \relative { \voiceOne c''8 c c4 c c } \new Voice \relative { \voiceTwo g'4 g g g } >>
無名のコンテキストは常に \new
で指定する必要があります。
\new
と \context
は動作が異なります:
-
\new
はコンテキスト名を持っているか、いないかにかかわらず、例え同じ名前を持つコンテキストが存在していたとしても、常に全く新たなコンテキストを作成します:\new Staff << \new Voice = "A" \relative { \voiceOne c''8 c c4 c c } \new Voice = "A" \relative { \voiceTwo g'4 g g g } >>
- コンテキスト名を持つ
\context
は、階層、名前、それにタイプが同じコンテキストが存在しない場合にのみ、新たなコンテキスを作成します。存在する場合、\context
はすでに作成されているコンテキストへの参照となり、音楽表記はそのコンテキストに渡されて処理されます。名前を持つコンテキストの用途の 1 つとして、楽譜レイアウトと音楽コンテンツを分離させることができます。以下の 2 つの形式はどちらも有効です:
\score { << % 楽譜レイアウト \new Staff << \new Voice = "one" { \voiceOne } \new Voice = "two" { \voiceTwo } >> % 音楽コンテンツ \context Voice = "one" { \relative { c''4 c c c } } \context Voice = "two" { \relative { g'8 g g4 g g } } >> }
\score { << % 楽譜レイアウト \new Staff << \context Voice = "one" { \voiceOne } \context Voice = "two" { \voiceTwo } >> % 音楽コンテンツ \context Voice = "one" { \relative { c''4 c c c } } \context Voice = "two" { \relative { g'8 g g4 g g } } >> }
名前付きコンテキストの他の使用例として、2 つの音楽表記をつなげて 1 つのコンテキストにすることができます。以下の例では、アーティキュレーションと音符は別々に入力されています: 変数を用いても同じことができます。Organizing pieces with variables を参照してください。
-
コンテキスト名を持たない
\context
は、階層とタイプが一致するコンテキストのうち最初に作成されたものに適用され (例えそのコンテキストが名前を持っていたとしても適用されます)、音楽表記はそのコンテキストに渡されて処理されます。この形式が有用なことは稀です。しかしながら、コンテキスト名と音楽表記を持たない\context
は、コンテキスト内で\applyContext
で記述した Scheme プロシージャを実行させるのに用いられます:\new Staff \relative { c'1 \context Timing \applyContext #(lambda (ctx) (newline) (display (ly:context-current-moment ctx))) c1 }
後で参照するコンテキストには名前を付ける必要があります。例えば、歌詞を音楽に関連付けるような場合です:
\new Voice = "tenor" music … \new Lyrics \lyricsto "tenor" lyrics
歌詞を音楽に関連付ける方法についての詳細は 歌詞音節の自動演奏時間 を参照してください。
ある特定のタイプのすべてのコンテキストのプロパティを \layout
ブロックで変更することができます (構文は異なります)
– 同じタイプの全コンテキストを変更する を参照してください。この構造でもレイアウトを音楽コンテンツから分離させることができます。単一のコンテキストを変更するのであれば、\with
ブロックを用いる必要があります – 指定したコンテキストだけを変更する を参照してください。
参照
学習マニュアル: Organizing pieces with variables
記譜法リファレンス: 指定したコンテキストだけを変更する, 歌詞音節の自動演奏時間
[ << デフォルトを変更する ] | [Top][Contents][Index] | [ 付表 >> ] |
[ < 下位コンテキスト - ボイス ] | [ Up : コンテキストを理解する ] | [ コンテキストを残しておく > ] |