5.1.6 新しいコンテキストを定義する

StaffVoice のようなコンテキストは、簡単なブロックの組み合わせで構成されています。 エングラーバ プラグインの組み合わせを変えることで、新しいタイプのコンテキスを作成することができます。

次の例は、ゼロからタイプの異なる Voice コンテキストを作り上げる方法を示しています。このコンテキストは Voice コンテキストに似ていますが、音符の代わりにスラッシュを譜の中央に譜刻します。これはジャズで即興を表すのに使うことができます。

[image of music]

これらの設定は \layout ブロックの中の \context ブロックの内部で定義します:

\layout {
  \context {
    …
  }
}

以下では、上記の例の … に入るべき入力について議論します。

最初に、新しいコンテキストの名前を定義する必要があります:

\name ImproVoice

このコンテキストは Voice に似せる必要があるため、(既存の) Voice と同じ機能を実現するコマンドが必要です。これは、新しいコンテキストにエイリアス Voice を与えることで実現できます。

\alias Voice

このコンテキストは音符と指示テキストを譜刻しますので、それらの機能を提供するエングラーバを付け加える必要があります:

\consists Note_heads_engraver
\consists Text_engraver

しかしながら、音符の代わりにスラッシュを譜の中央線上に配置します:

\consists Pitch_squash_engraver
squashedPosition = #0

Pitch_squash_engraver は ( Note_heads_engraver によって作成される) 符頭を変更し、符頭の垂直位置を squashedPosition にセットします – 今回は 0、つまり中央線上です。

音符はスラッシュで、符幹を持ちません:

\override NoteHead #'style = #'slash
\override Stem #'transparent = ##t

これらのプラグインすべてが共同する必要があり、それには特殊なプラグインが必要です。このプラグインは常に Engraver_group であり、キーワード \type を付ける必要があります。

\type "Engraver_group"

まとめると、以下のようになります:

\context {
  \name ImproVoice
  \type "Engraver_group"
  \consists "Note_heads_engraver"
  \consists "Text_engraver"
  \consists Pitch_squash_engraver
  squashedPosition = #0
  \override NoteHead #'style = #'slash
  \override Stem #'transparent = ##t
  \alias Voice
}

コンテキストは階層を構成します。c 通常の Voice と同様に、ImproVoiceStaff の下に置く必要があります。それゆえ、Staff 定義を \accepts コマンドで変更します:

\context {
  \Staff
  \accepts ImproVoice
}

\accepts の反対は \denies です。これは既存のコンテキスト定義を再利用する場合に必要となります。

以下のように、両方を \layout ブロックの中に置きます:

\layout {
  \context {
    \name ImproVoice
    …
  }
  \context {
    \Staff
    \accepts "ImproVoice"
  }
}

それから、このサブセクションの最初にあった出力を入力します:

\relative c'' {
  a4 d8 bes8
  \new ImproVoice {
    c4^"ad lib" c
    c4 c^"undress"
    c c_"while playing :)"
  }
  a1
}

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

LilyPond — 記譜法リファレンス

inserted by FC2 system