5.1.3 コンテキストを残しておく

通常、コンテキストは何もすることが無くなった最初の音楽的タイミングで消滅させられます。そのため、Voice コンテキストはすべてのイベントを終えるとすぐに消滅し、Staff コンテキストは保持しているすべての Voice コンテキストのイベントが終了するとすぐに消滅する、などとなっています。このことは、早い段階のすでに消滅したコンテキスを参照する必要がある場合に、障害となります。例えば、\change コマンドで譜を変更する場合、\lyricsto コマンドで歌詞をボイスに結び付ける場合、あるいは、早い段階で登場したコンテキストに音楽イベントを追加する場合に障害となります。

この規則には 1 つ例外があります: Staff コンテキストや <<...>> 構造の中にある Voice コンテキストのうち 1 つだけは、例え途中ですることが無くなったとしても、Staff コンテキストあるいは <<...>> 構造の終わりまで維持されます。このように維持されるコンテキストは、最初の {...} 構造の中にある最初のコンテキストであり、<<...>> 構造の中にあるものは無視されます。

各音楽タイミングで何かすることを持たせることにより、任意のコンテキストを残しておくことができます。Staff コンテキストを残しておくには、それに含まれるボイスの 1 つが維持されることを保証する必要があります。ボイスを残しておく方法の 1 つに、ボイスに含まれる実際の音楽と並列に、空白休符をそのボイスに付け加えるという方法があります。残しておく必要があるすべての Voice コンテキストに対して、空白休符を付け加える必要があります。ところどころで使用されるボイスがある場合、前述の例外によって必要なボイスを残そうとするよりは、それらのボイスすべてを残しておく方が安全です。

以下の例では、空白休符の追加を用いる方法で、ボイス A とボイス B の両方が楽曲全体を通して維持されます:

musicA = \relative { d''4 d d d }
musicB = \relative { g'4 g g g }
keepVoicesAlive = {
  <<
    \new Voice = "A" { s1*5 }  % Voice "A" を 5 小節の間、維持する
    \new Voice = "B" { s1*5 }  % Voice "B" を 5 小節の間、維持する
  >>
}

music = {
  \context Voice = "A" {
    \voiceOneStyle
    \musicA
  }
  \context Voice = "B" {
    \voiceTwoStyle
    \musicB
  }
  \context Voice = "A" { \musicA }
  \context Voice = "B" { \musicB }
  \context Voice = "A" { \musicA }
}

\score {
  \new Staff <<
    \keepVoicesAlive
    \music
  >>
}

[image of music]

以下の例は、空白休符を用いる方法で、途切れ途切れのメロディに歌詞を持たせる方法を示しています。もちろん、実際に楽譜を書く場合は、メロディや伴奏は複数のセクションによって構成されることになります。

melody = \relative { a'4 a a a }
accompaniment = \relative { d'4 d d d }
words = \lyricmode { These words fol -- low the mel -- o -- dy }
\score {
  <<
    \new Staff = "music" {
      <<
        \new Voice = "melody" {
          \voiceOne
          s1*4  % Voice "melody" を 4 小節の間、残します
        }
        {
          \new Voice = "accompaniment" {
            \voiceTwo
            \accompaniment
          }
          <<
            \context Voice = "melody" { \melody }
            \context Voice = "accompaniment" { \accompaniment }
          >>
          \context Voice = "accompaniment" { \accompaniment }
          <<
            \context Voice = "melody" { \melody }
            \context Voice = "accompaniment" { \accompaniment }
          >>
        }
      >>
    }
    \new Lyrics \with { alignAboveContext = #"music" }
    \lyricsto "melody" { \words }
  >>
}

[image of music]

これに代わる方法として、メロディに直接空白休符を付け加えて、メロディが伴奏と揃うようにする方法があります – 多くの場合、こちらの方法の方が良いかもしれません:

melody = \relative {
  s1  % 1 小節スキップします
  a'4 a a a
  s1  % 1 小節スキップします
  a4 a a a
}
accompaniment = \relative {
  d'4 d d d
  d4 d d d
  d4 d d d
  d4 d d d
}
words = \lyricmode { These words fol -- low the mel -- o -- dy }

\score {
  <<
    \new Staff = "music" {
      <<
        \new Voice = "melody" {
          \voiceOne
          \melody
        }
        \new Voice = "accompaniment" {
          \voiceTwo
          \accompaniment
        }
      >>
    }
    \new Lyrics \with { alignAboveContext = #"music" }
    \lyricsto "melody" { \words }
  >>
}

[image of music]


他の言語: English, català, deutsch, español, français, italiano
About automatic language selection.

LilyPond — 記譜法リファレンス v2.21.0 (開発版).