[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

5.1 コンテキストを理解する

@translationof Interpretation contexts

このセクションでは、コンテキストとは何なのか、それをどのように変更するのかについて説明します。

参照

学習マニュアル: (learning)コンテキストとエングラーバ section ‘コンテキストとエングラーバ’ in Learning Manual

インストールされているファイル: ‘ly/engraver-init.ly’, ‘ly/performer-init.ly’

コード断片集: (snippets)Contexts and engravers section ‘Contexts and engravers’ in Snippets

内部リファレンス: (internals)Contexts section ‘Contexts’ in Internals Reference, (internals)Engravers and Performers section ‘Engravers and Performers’ in Internals Reference


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

5.1.1 コンテキストの説明

@translationof Contexts explained

コンテキストは階層的に配置されます:


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

出力定義 - コンテキストの青写真

@translationof Output definitions - blueprints for contexts

このセクションでは、コンテキストを扱う際の出力定義との関連について説明します。実際の出力定義の例については、後で提示します (@ref{Changing all contexts of the same type} を参照してください)。

ファイルに記述される音楽は、コンテキストの種類や名前を参照しますが、コンテキストが作成されるのは、音楽が実際に解釈される時です。LilyPond は‘出力定義’に基づいて音楽を解釈し、異なる出力定義は異なる出力をもたらします。楽譜の見た目の出力に関係する出力定義は \layout で指定します。

MIDI 出力を作り出すのに使われる出力定義はもっと単純で、\midi によって指定されます。他の出力定義も LilyPond では内部的に使用されます。例えばパートを結合する出力定義 (@ref{Automatic part combining}) や音楽の引用を作り出す出力定義 (@ref{Quoting other voices}) などです。

出力定義は、各コンテキストのデフォルトの設定だけでなく、コンテキスト同士の関係も定義します。多くの変更は通常 \layout ブロックで行われますが、MIDI に関係した設定は \midi ブロックで変更された場合にのみ効果があります。

いくつかの設定は複数の出力に効果があります: 例えば、autoBeaming があるコンテキストでオフになった場合、@ref{Automatic syllable durations} で説明しているように、連桁は歌詞を音楽に合わせるためのメリスマとして扱われます。この位置合わせは見た目の出力だけでなく MIDI 出力でも行われます。autoBeaming が \layout ブロックの出力定義内で変更されており、しかし対応する \midi ブロックでは変更されていない場合、MIDI では歌詞と音楽が一致しなくなります。

参照

インストールされているファイル: ‘ly/engraver-init.ly’, ‘ly/performer-init.ly’


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

Score - すべてのコンテキストのマスタ

@translationof Score - the master of all contexts

これは最上位の記譜コンテキストです。他のコンテキストが Score コンテキストを保持することはできません。デフォルトでは、Score コンテキストが拍子記号の管理を扱い、音部記号、拍子記号、調号などのアイテムが譜間で揃っていることを保証します。

Score コンテキストは、\score {…} ブロックが処理されたときに暗黙的にインスタンス化されます。


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

上位コンテキスト - 譜コンテナ

@translationof Top-level contexts - staff containers

StaffGroup

譜をグループ化して、左端に角括弧を付けます。このコンテキストに保持されている譜の小節線は垂直につながります。StaffGroup は譜のコレクション、それに左端の角括弧と延長された小節線だけを保持します。

ChoirStaff

保持されている譜の小節線が垂直につながらないことを除けば、StaffGroup と同じです。

GrandStaff

譜をグループ化して、左端に波括弧を付けます。このコンテキストに保持されている譜の小節線は垂直につながります。

PianoStaff

GrandStaff と似ていますが、各システムの左端に楽器名を付けることができます。


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

中位コンテキスト - 譜

@translationof Intermediate-level contexts - staves

Staff

音部記号、小節線、調、臨時記号を扱います。このコンテキストは Voice コンテキストを保持することができます。

RhythmicStaff

Staff と似ていますが、リズムを表示するためのものです。ピッチは譜刻には無視され、音符は線として表示されます。MIDI 出力ではピッチは変更されません。

TabStaff

タブ譜を生成するためのコンテキストです。デフォルトでは、音楽表記を 6 線のギター タブ譜として配置します。

DrumStaff

打楽器の譜刻を扱います。DrumVoice を保持することができます。

VaticanaStaff

Staff と同じですが、グレゴリオ聖歌形式の楽曲を譜刻するためにデザインされている点が異なります。

MensuralStaff

Staff と同じですが、計量形式の楽曲を譜刻するためにデザインされている点が異なります。


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

下位コンテキスト - ボイス

@translationof Bottom-level contexts - voices

Voice レベルのコンテキストはある特定のプロパティを初期化し、適切なエングラーバを開始させます。下位コンテキストは defaultchild を持たないコンテキストです。中にコンテキストを受け入れたり保持することはできますが、明示的に作成され入力される必要があります。

Voice

譜の上にあるボイスに相当します。このコンテキストは、強弱記号、符幹、連桁、上付き/下付き文字、タイ、それに休符の変換を扱います。1 つの譜に複数のボイスを配置する必要がある場合、ボイスを明示的にインスタンス化する必要があります。

VaticanaVoice

Voice と同じですが、グレゴリオ聖歌形式の楽曲を譜刻するためにデザインされている点が異なります。

MensuralVoice

Voice と同じですが、定量形式の楽曲を譜刻するためにデザインされている点が異なります。

Lyrics

歌詞を保持するボイスに相当します。単一行の歌詞の表示を扱います。

DrumVoice

打楽器譜で使用されるボイス コンテキストです。

FiguredBass

このコンテキストの中で、\figuremode モードで記述された入力から BassFigure オブジェクトが作成されます。

TabVoice

TabStaff コンテキスト内部で使用されるボイス コンテキストです。通常、暗黙的に作成されます。

CueVoice

小さなサイズの音符を描画するために使用されるボイス コンテキストです。主に合図音符を譜に付け加えることを目的としています。合図音符をフォーマットする を参照してください。通常、暗黙的に作成されます。

ChordNames

コード ネームを譜刻します。


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

5.1.2 コンテキストを作成して参照する

@translationof Creating and referencing contexts

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
  }
>>

[image of music]

そして、1 つの譜に複数のボイスが配置されます:

 
\new Staff <<
  \new Voice \relative {
    \voiceOne
    c''8 c c4 c c
  }
  \new Voice \relative {
    \voiceTwo
    g'4 g g g
  }
>>

[image of music]

無名のコンテキストは常に \new で指定する必要があります。

\new と \context は動作が異なります:

後で参照するコンテキストには名前を付ける必要があります。例えば、歌詞を音楽に関連付けるような場合です:

 
\new Voice = "tenor" music
…
\new Lyrics \lyricsto "tenor" lyrics

歌詞を音楽に関連付ける方法についての詳細は @ref{Automatic syllable durations} を参照してください。

ある特定のタイプのすべてのコンテキストのプロパティを \layout ブロックで変更することができます (構文は異なります) – @ref{Changing all contexts of the same type} を参照してください。この構造でもレイアウトを音楽コンテンツから分離させることができます。単一のコンテキストを変更するのであれば、\with ブロックを用いる必要があります – @ref{Changing just one specific context} を参照してください。

参照

学習マニュアル: (learning)Organizing pieces with variables section ‘Organizing pieces with variables’ in Learning Manual

記譜法リファレンス: @ref{Changing just one specific context}, @ref{Automatic syllable durations}


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

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

@translationof Keeping contexts alive

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

この一般的な規則には 1 つ例外があります: {…} 構文 (シーケンシャルな音楽) の中で、構文が対象にする「現在のコンテキスト」は、その中の要素が更に下位のコンテキストを扱う場合、要素が終了した後もその下位のコンテキストを指し続けます。これはいくつかの場合において、暗黙的なコンテキストが誤って作成されることを防ぎますが、最初の下位コンテキストは、表記が終わるまで残り続けるということを意味しています。

一方、<<…>> 構造 (同時に起こる音楽) の表記は持続しません。そのため、コンテキストを作成するコマンドを、余分な <<…>> で囲むことによって、新たなコンテキストが、囲まれた {…} 表記全体にわたって残り続けることを阻止することができます。

いかなる音楽タイミングでも何かすることがあるようにすることで、任意のコンテキストを残しておくことができます。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]


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

5.1.4 コンテキストのプラグインを変更する

@translationof Modifying context plug-ins

記譜コンテキスト (Score や Staff のような) はプロパティを保存するだけなく、‘エングラーバ’ と呼ばれる記譜要素を作成するプラグインを保持します。例えば、Voice コンテキストは Note_head_engraver を保持し、Staff コンテキストは Key_engraver を保持します。

各プラグインについての説明は、 (internals)Engravers and Performers section ‘Engravers and Performers’ in Internals Reference. を参照してください。 (internals)Contexts section ‘Contexts’ in Internals Reference の中にある各コンテキストについての説明では、そのコンテキストで使用されるエングラーバがリストアップされています。

これらのプラグインを入れ換えると有用な場合があります。プラグインを入れ換えるには、新たに作成するコンテキストを \new あるいは \context で開始し、そのコンテキストを以下のように変更します:

 
\new context \with {
  \consists …
  \consists …
  \remove …
  \remove …
  etc.
}
{
  …music…
}

ここで、… はエングラーバの名前になります。ここで、Staff コンテキストから Time_signature_engraver と Clef_engraver を削除する簡単な例を示します:

 
<<
  \new Staff \relative {
    f'2 g
  }
  \new Staff \with {
     \remove "Time_signature_engraver"
     \remove "Clef_engraver"
  } \relative {
    f'2 g2
  }
>>

[image of music]

2 番目の譜には、拍子記号と音部記号がありません。この方法は、オブジェクトを不可視にするよりも乱暴な方法です。なぜなら、譜全体に影響を与えるからです。さらに、望む望まないに係わらず、この方法はスペースにも影響を与えます。オブジェクトを消すもっと洗練された方法については、 (learning)オブジェクトの可視性と色 section ‘オブジェクトの可視性と色’ in Learning Manual を参照してください。

次の例は、ある実用的な応用です。通常、小節線と拍子記号は楽譜全体で同期されます。これは Timing_translator と Default_bar_line_engraver によって行われます。このプラグインは拍子記号の管理や、小節内の配置の管理などを行います。これらのエングラーバを Score コンテキストから Staff コンテキストへ異動させることにより、楽譜の各譜に独自の拍子記号を持たせることが可能になります。

 
\score {
  <<
    \new Staff \with {
      \consists "Timing_translator"
      \consists "Default_bar_line_engraver"
    }
    \relative {
        \time 3/4
        c''4 c c c c c
    }
  \new Staff \with {
    \consists "Timing_translator"
    \consists "Default_bar_line_engraver"
  }
  \relative {
      \time 2/4
      c''4 c c c c c
  }
>>
\layout {
  \context {
    \Score
    \remove "Timing_translator"
    \remove "Default_bar_line_engraver"
    }
  }
}

[image of music]

既知の問題と警告

エングラーバを指定する順序は、エングラーバが処理を行う順序です。通常、エングラーバが指定される順序は問題にはなりません。しかしながら、いくつかの特殊なケースでは、この順序が重要になります。例えば、あるエングラーバがプロパティを記述して、それを他のエングラーバが読む場合、あるいは、あるエングラーバがグラフィカル オブジェクトを作成し、それを他のエングラーバが処理しなければならない場合です。

以下の順序は重要です:

参照

インストールされているファイル: ‘ly/engraver-init.ly’


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

5.1.5 コンテキストのデフォルト設定を変更する

@translationof Changing context default settings

@ref{Modifying properties} で説明したように、コンテキストとグラフィカル オブジェクトのプロパティを \set コマンドや \override コマンドで変更することができます。これらのコマンドは音楽イベントを生成して、楽譜処理中にコマンドが出現するポイントで変更に効果を発揮させます。

対照的に、このセクションではコンテキストが作成された時点でコンテキストとグラフィカル オブジェクトのプロパティの デフォルト 値を変更する方法を説明します。これを行う方法は 2 つあります。1 つはある特定のタイプの全コンテキストのデフォルト値を変更する方法で、もう 1 つはただ 1 つのコンテキストのインスタンスのデフォルト値を変更する方法です。


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

同じタイプの全コンテキストを変更する

@translationof Changing all contexts of the same type

Score, Staff, Voice, その他のコンテキストにおいてデフォルトで使用される譜刻のためのコンテキスト設定は、\layout ブロックの中の\context ブロックで指定することができます。\layout ブロックは、それを適用する \score ブロックの中で、かつ、音楽表記の後に配置する必要があります。

譜刻ではなく MIDI 出力に関する設定をする場合は、\midi ブロックに別々に指定する必要があります (@ref{Output definitions - blueprints for contexts}を参照してください)。

 
\layout {
  \context {
    \Voice
    [すべての Voice コンテキストのコンテキスト設定]
  }
  \context {
    \Staff
    [context settings for all Staff contexts]
  }
}

以下のタイプの設定を指定することができます:

プロパティ設定コマンドは、\context ブロックで囲まずに、\layout ブロックの中に配置することができます。そのような設定は、指定されたタイプの任意のコンテキストの開始時にプロパティ設定コマンドをインクルードするのと等価です。コンテキストを指定しない場合、すべての 下位コンテキストに影響を与えます – @ref{Bottom-level contexts - voices} を参照してください。\layout ブロックの中でのプロパティ設定コマンドの構文は、音楽ストリームの中で同じコマンドを記述するのと同じです。

 
\score {
  \new Staff {
    \relative {
      a'4^"Smaller font" a a a
      a4 a a a
    }
  }
  \layout {
    \accidentalStyle dodecaphonic
    \set fontSize = #-4
    \override Voice.Stem.thickness = #4.0
  }
}

[image of music]


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

指定したコンテキストだけを変更する

@translationof Changing just one specific context

\with ブロックで指定したコンテキスト インスタンスのコンテキスト プロパティだけを変更することができます。他の全ての同じタイプのコンテキスト インスタンスは、LilyPond に組み込まれてスコープ内の \layout ブロックによって変更されたデフォルト設定のままです。\with ブロックは \new context-type コマンドの直後に配置する必要があります:

 
\new Staff \with { [このコンテキスト インスタンスだけに適用されるコンテキスト設定] }
{
  …
}

あるいは、もし入力モードを指定するような簡略記法のコマンド (例えば \chordmode の代わりに \chords を使うなど) を用いて音楽を入力する場合、\with をそのようなコマンドのすぐ後に配置する必要があります:

 
\chords \with { [この (暗黙的) コンテキスト インスタンスだけに適用されるコンテキスト設定] }
{
  …
}

このような記法によって作られる暗黙的なコンテキストが変更されます。 これは、同様な入力モードを指定する簡略記法のコマンドにも当てはまります (\drums, \figures)。@ref{Input modes} を参照してください。

\with ブロックで行われるコンテキストの変更は音楽の内部にあるため、出力定義内での変更とは異なり、全ての 出力 (楽譜と MIDI の両方) に影響が及びます。

以下のタイプの設定を指定することができます:

参照

記譜法リファレンス: @ref{Input modes}


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

適用順序

@translationof Order of precedence

ある特定のタイミングで適用されるプロパティの値は以下のように決定されます:

参照

学習マニュアル: (learning)Modifying context properties section ‘Modifying context properties’ in Learning Manual

記譜法リファレンス: @ref{Contexts explained}, @ref{Bottom-level contexts - voices}, @ref{The set command}, @ref{The override command}, \layout ブロック


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

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

@translationof Defining new contexts

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

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

[image of music]

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

 
\layout {
  \context {
    …
  }
}

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

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

 
\name ImproVoice

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

 
\alias Voice

このコンテキストは音符と指示テキストを譜刻しますので、それらの機能を提供するエングラーバや、さらに同じタイミングで発生する音符・符幹・休符を列としてグループ化するエングラーバを付加する必要があります:

 
\consists "Note_heads_engraver"
\consists "Text_engraver"
\consists "Rhythmic_column_engraver"

符頭のスラッシュは譜の中央線上に配置される必要があります:

 
\consists "Pitch_squash_engraver"
squashedPosition = #0

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

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

 
\override NoteHead.style = #'slash
\hide Stem

これらのプラグインすべてがコンテキストの下で協調する必要があります。コンテキストが協調するために用いるメカニズムは、コンテキストの \type を宣言することで確立することができます。\layout ブロックの中では、ほとんどのコンテキストは Engraver_group のタイプに属しています。いくつかの特殊なコンテキストや、\midi ブロックの中では別のコンテキスト タイプに属していることがあります。既存のコンテキスト定義をコピーし改変する場合には、タイプについても継承されます。この例では定義を 1 から作っているため、タイプを明示的に指定する必要があります:

 
\type "Engraver_group"

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

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

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

 
\context {
  \Staff
  \accepts ImproVoice
}

既存のコンテキスト定義を使い回す場合があるかもしれません。その際、結果としてできるコンテキストは、元のコンテキストが使用できる場所であればどこでも使用できると有用です。

 
\layout {
  …
  \inherit-acceptability to from
}

このようにすることで、from を含めることのできるすべてのコンテキストが、to のコンテキストも含めることができるようになります。例えば:

 
\layout {
  …
  \inherit-acceptability "ImproVoice" "Voice"
}

これは、\accepts ImproVoice を、Staff と RhythmicStaff の定義に追加するのと同様の効果を示します。

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

必要なパーツを \layout ブロックの中に置きます:

 
\layout {
  \context {
    \name ImproVoice
    …
  }
  \inherit-acceptability "ImproVoice" "Voice"
}

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

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

この例を完成させるには、コンテキストの階層に影響する変更が \midi ブロックでも同様に記述される必要があります。そうすることで、MIDI 出力においてもコンテキスト間の関係が同様に定義されます。

参照

内部リファレンス: (internals)Note_heads_engraver section ‘Note_heads_engraver’ in Internals Reference, (internals)Text_engraver section ‘Text_engraver’ in Internals Reference, (internals)Rhythmic_column_engraver section ‘Rhythmic_column_engraver’ in Internals Reference, (internals)Pitch_squash_engraver section ‘Pitch_squash_engraver’ in Internals Reference


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

5.1.7 コンテキストの配置順序

@translationof Context layout order

通常、コンテキストは入力ファイルの中で記述した順に楽譜の段の上から下に配置されます。コンテキストがネストされている場合、外側のコンテキストは入力ファイルの中で指定されたコンテキストを内側に保持して、内側のコンテキストは外側のコンテキストの “accepts” リストに含まれます。ネストされたコンテキストのうち外側のコンテキストの “accepts” リストに含まれないものは、ネストされずに外側のコンテキストの下に再配置されます。

コンテキストの “accepts” リストを \accepts コマンドや \denies コマンドで変更することができます。\accepts はコンテキストを “accepts” リストに追加して、\denies は “accepts” リストからコンテキストを削除します。

例えば、角括弧でグループ化された譜表は通常、波括弧でグループ化され小節線が繋げられる譜表グループの中にあることは通常見られず、デフォルトで GrandStaff は内部に StaffGroup を含めることができません。

 
\score {
  \new GrandStaff <<
    \new StaffGroup <<
      \new Staff { c'1 }
      \new Staff { d'1 }
    >>
    \new Staff { \set Staff.instrumentName = bottom f'1 }
  >>
}

[image of music]

しかし、\accepts コマンドを使うことで、StaffGroup をGrandStaff コンテキストの中に含めることができます:

 
\score {
  \new GrandStaff <<
    \new StaffGroup <<
      \new Staff { c'1 }
      \new Staff { d'1 }
    >>
    \new Staff { \set Staff.instrumentName = bottom f'1 }
  >>
  \layout {
    \context {
      \GrandStaff
      \accepts "StaffGroup"
    }
  }
}

[image of music]

\denies は主に、他のコンテキストをベースに新しいコンテキストを作成した時に、中にネストするコンテキストを変更するために用いられます。例えば、VaticanaStaff コンテキストは Staff コンテキストをベースにしていますが、“accepts” リストでは Voice コンテキストの代わりに VaticanaVoice コンテキストを保持しています。

コンテキストに保持されるべきコマンドが出現して、それを保持するための適切なコンテキストが存在しない場合、コンテキストが暗黙的に作成されるということに注意してください。

コンテキスト定義の中で、暗黙的に作り出されるサブコンテキストの種類は \defaultchild により指定されます。多くの音楽イベントは最下位 (‘Bottom’) のコンテキストが必要です。そのようなイベントが現れた場合、‘defaultchild’ 設定を持たないコンテキストに到達するまで、再帰的にサブコンテキストが作られます。

暗黙的にコンテキストが生成されることによって、予期しない譜や楽譜が生み出される可能性があります。\new で明示的にコンテキストを作ることでこれらの問題を回避できます。

短い期間、あるコンテキストを存在させる必要がある場合があります。オッシアの譜コンテキストが良い例です。通常、これは主音楽の対応するセクションと並列に、適切な場所でコンテキスト定義を行うことで実現します。デフォルトでは、一時コンテキストは既存のすべてのコンテキストの下に配置されます。“main” というコンテキストの上に配置し直すには以下のようにします:

 
\new Staff \with { alignAboveContext = "main" }

ChoirStaff のような複数の譜のレイアウトで一時的な歌詞を配置する場合 – 例えば、繰り返しセクションに 2 番目の歌詞を追加する場合 – にも同様な状況が発生します。デフォルトでは、一時的な歌詞は下段の譜の下に配置されます。一時的な歌詞コンテキストを alignBelowContext で定義することにより、1 番目の歌詞を保持する (名前付きの) 歌詞コンテキストの下に配置することができます。

一時コンテキストを再配置する例は他にもあります – (learning)Nesting music expressions section ‘Nesting music expressions’ in Learning Manual、+@ref{Modifying single staves}、それに @ref{Techniques specific to lyrics} を参照してください。

参照

学習マニュアル: (learning)Nesting music expressions section ‘Nesting music expressions’ in Learning Manual

記譜法リファレンス: @ref{Modifying single staves}, @ref{Techniques specific to lyrics}

アプリケーション使用方法: (usage)An extra staff appears section ‘An extra staff appears’ in Application Usage

インストールされているファイル: ‘ly/engraver-init.ly’


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]

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.