自動連桁の振る舞いを設定する

自動連桁が有効な場合、連桁の配置は以下の 3 つのコンテキスト プロパティによって決定されます: beatBase, beatStructure, beamExceptions。これらの値は以下で示すようにオーバライドすることができますが、拍子 で説明しているように、デフォルトの値そのものを変更することもできます。

beamExceptions が現在の拍子記号に対して定義されている時、そのルールのみが連桁の配置の決定に使用されます。 beatBasebeatStructure の値は使用されません。

beamExceptions が現在の拍子記号に対して定義されていない時、beatBasebeatStructure の値によって連桁の配置が決定されます。

beatBasebeatStructure による連桁

デフォルトで、非常によく使われる拍子に対しては beamExceptions のルールが定義されているため、自動連桁に beatBasebeatStructure の値を使用させるためには、beamExceptions のルールを無効化しなければいけません。beamExceptions はこのようにして無効化します:

\set Timing.beamExceptions = #'()

beamExceptions#'() にセットされた場合 (明示的にセットされた場合と、現在の拍子記号に対してルールが定義されていない場合の両方を含みます)、連桁の終了点は beatBasebeatStructure コンテキスト プロパティで指定された拍に従います。beatStructure は小節内の各拍の長さが beatBase の単位で定義された Scheme リストです。デフォルトでは、beatBase は 1/拍子の分母です。

beatStructurebeatBase の値はそれぞれの拍子記号に対して別々に存在するということに注意してください。これらの値を変更しても、影響が及ぶのは現在有効な拍子記号に対してのみです。そのため、これらの変更は新しい拍子記号のセクションが始まる \time コマンドの前ではなく後に置かれなければいけません。ある拍子記号に与えられた新しい値は記憶されており、その拍子記号が新たに出現した際に再び有効になります。

\relative c'' {
  \time 5/16
  c16^"default" c c c c |
  % beamExceptions は 5/16 の拍子については定義されていないようですが、
  % 念のために無効にしておきましょう
  \set Timing.beamExceptions = #'()
  \set Timing.beatStructure = 2,3
  c16^"(2+3)" c c c c |
  \set Timing.beatStructure = 3,2
  c16^"(3+2)" c c c c |
}

[image of music]

\relative {
  \time 4/4
  a'8^"default" a a a a a a a
  % beamExceptions は 4/4 に対しては明らかに定義されているため、
  % これを無効にします
  \set Timing.beamExceptions = #'()
  \set Timing.beatBase = #1/4
  \set Timing.beatStructure = 1,1,1,1
  a8^"changed" a a a a a a a
}

[image of music]

連桁の設定変更をある特定のテキストに限定することができます。下位コンテキストに連桁の設定が含まれない場合、そのコンテキストを囲んでいる上位コンテキストの設定が適用されます。

\new Staff {
  \time 7/8
  % beamExceptions は 7/8 に対しては定義されていないため
  % 無効にする必要はありません
  \set Staff.beatStructure = 2,3,2
  <<
    \new Voice = one {
      \relative {
        a'8 a a a a a a
      }
    }
    \new Voice = two {
      \relative {
        \voiceTwo
        \set Voice.beatStructure = 1,3,3
        f'8 f f f f f f
      }
    }
  >>
}

[image of music]

譜で複数のボイスが使用されている場合に連桁設定を譜のすべてのボイスに適用するには、Staff コンテキストで設定を行う必要があります:

\time 7/8
% リズム 3-1-1-2
% デフォルトで連桁設定の変更は Voice に適用され、うまくいきません
% なぜなら、自動生成されるボイスで、すべての拍は beatBase #1/8 だからです
\set beatStructure = 3,1,1,2
<< \relative {a'8 a a a16 a a a a8 a} \\ \relative {f'4. f8 f f f} >>

% コンテキスト Staff を指定するとうまくいきます
\set Staff.beatStructure = 3,1,1,2
<< \relative {a'8 a a a16 a a a a8 a} \\ \relative {f'4. f8 f f f} >>

[image of music]

beatBase の値を調整することで、連桁の振る舞いを変更することができます。beatBase の値を変更した場合、beatStructure に新しい beatBase と矛盾しない値を設定する必要があります。

\time 5/8
% beamExceptions は 5/8 に対しては定義されていないため
% 無効にする必要はありません
\set Timing.beatBase = #1/16
\set Timing.beatStructure = 7,3
\repeat unfold 10 { a'16 }

[image of music]

デフォルトでは、beatBase には「1/拍子の分母」がセットされています。このデフォルトの例外は scm/time-signature-settings.scm で見つかります。

beamExceptions に基づいた連桁

特殊な自動連桁規則 (連桁の終わりが拍に従わないもの) はプロパティ beamExceptions に定義します。

beamExceptions の値は – 少し複雑な Scheme データ構造ですが – は、 \beamExceptions 関数によって非常に簡単に生成できます。この関数には 1 つ以上の手動連桁を含む、小節の長さのリズムパターンを与えます (小節は小節チェック記号 | で分割されている必要があります。この関数では他に小節の長さを識別する方法が無いためです)。簡単な例を示します:

\relative c'' {
  \time 3/16
  \set Timing.beatStructure = 2,1
  \set Timing.beamExceptions =
    \beamExceptions { 32[ 32] 32[ 32] 32[ 32] }
  c16 c c |
  \repeat unfold 6 { c32 } |
}

[image of music]

Note: beamExceptions の値は 完全な 例外リストである必要があります。つまり、その設定には適用されるべき例外がすべて含まれている必要があります。例外の 1 つだけを追加、削除、変更することはできません。このことは扱い難いように思えるかもしれませんが、新しい連桁パターンを指定する際に現在の連桁設定を知る必要がないということを意味します。

拍子が変更されると、Timing.beatBase, Timing.beatStructure, それに Timing.beamExceptions のデフォルト値が設定されます。拍子を設定すると、その Timing コンテキストの自動連桁設定はデフォルトの振る舞いにリセットされます。

\relative a' {
  \time 6/8
  \repeat unfold 6 { a8 }
  % (4 + 2) にグループ化します
  \set Timing.beatStructure = 4,2
  \repeat unfold 6 { a8 }
  % デフォルトの振る舞いに戻ります
  \time 6/8
  \repeat unfold 6 { a8 }
}

[image of music]

ある拍子に対するデフォルトの自動連桁設定は scm/beam-settings.scm の中で決定されます。ある拍子に対する自動連桁のデフォルト設定を変更する方法は 拍子 で説明しています。

ある拍子に対する自動連桁設定の多くには beamExceptions が登録されています。例えば、4/4 拍子は 16 分音符しかない小節を 2 つの連桁で囲もうとします。beamExceptions がリセットされていなければ、beamExceptions 規則は beatStructure 設定をオーバライドすることができます。

\time 4/4
\set Timing.beatBase = #1/8
\set Timing.beatStructure = 3,3,2
% 以下は beamExceptions のため、(3 3 2) の連桁にはなりません
\repeat unfold 8 {c''8} |
% 以下は beamExceptions をクリアするため、(3 3 2) の連桁になります
\set Timing.beamExceptions = #'()
\repeat unfold 8 {c''8}

[image of music]

同様に、3/4 拍子はデフォルトで 8 分音符しかない小節を 1 つの連桁で囲みます。3/4 拍子の 8 分音符に拍毎の連桁を付けるには、beamExceptions をリセットします。

\time 3/4
% beamExceptions により、デフォルトで (6) の連桁を付けます
\repeat unfold 6 {a'8} |
% beatLength により、これは (1 1 1) の連桁を付けます
\set Timing.beamExceptions = #'()
\repeat unfold 6 {a'8}

[image of music]

ロマン派や古典派時代の譜刻では、3/4 拍子の小節の途中から連桁が始まることがありますが、誤った 6/8 拍子の印象を与えるため現代の習慣では用いません (Gould の 153 ページを参照してください)。3/8 拍子でも同様の状況が発生します。この振る舞いはコンテキスト プロパティ beamHalfMeasure によって制御されます – これは分子が 3 の拍子記号の場合にのみ効果を持ちます:

\relative a' {
  \time 3/4
  r4. a8 a a |
  \set Timing.beamHalfMeasure = ##f
  r4. a8 a a |
}

[image of music]

自動連桁はどのように機能するのか

自動連桁が有効である場合、自動連桁の配置はコンテキスト プロパティ beatBase, beatStructure, それに beamExceptions によって決定されます。

連桁の配置を決定する際、以下の規則が並び順の優先度で適用されます:

上記の規則で、連桁タイプ は連桁でグループ化された音符の最短演奏時間です。

デフォルトの連桁規則は scm/time-signature-settings.scm の中にあります。

Selected Snippets

連桁を細分する

16 分音符 (あるいはそれより短い音符) の連桁は、デフォルトでは細分されません。つまり、3 つ以上の音符全体が分かれることなく平等に連桁で繋がれます。この挙動は、subdivideBeams プロパティをセットすることで、連桁を細分するように変更することができます。このプロパティがセットされると、連桁が現在の beatBase の間隔で細分されて表示されるようになります。分割された後の音符全体の長さが分割長より短い (不完全な連桁) 場合は、連桁の本数は可能な最長分割グループが基になります。しかし、分割された後の音符が 1 つしか存在しない場合、この制限は適用されません。 beatBase は、明示的にセットされなければ、現在の拍子記号の分母分の 1 に設定されます。beatBase は、このスニペットのように ly:make-moment 関数を用いて、連桁を分割する単位となる長さを分数で指定する必要があります。また、beatBase が変更された場合、beatStructure も新たな beatBase に合わせて変更する必要があります:

\relative c'' {
  c32[ c c c c c c c]

  \set subdivideBeams = ##t
  c32[ c c c c c c c]

  % Set minimum beam subdivision interval to 1/8 just for this beam
  \once \set minimumBeamSubdivisionInterval = \musicLength 8
  c32[ c c c c c c c]

  % Set maximum beam subdivision interval to 1/16 just for this beam
  \once \set maximumBeamSubdivisionInterval = \musicLength 16
  c32[ c c c c c c c]

  % Set maximum beam subdivision interval to 3/8 just for this beam
  \once \set maximumBeamSubdivisionInterval = \musicLength 8*3
  [ \repeat unfold 16 c64 ] r2.

  % Set maximum beam subdivision interval to 1/64 to limit subdivision depth,
  % despite not being metrically correct
  \once \set minimumBeamSubdivisionInterval = \musicLength 32
  \once \set maximumBeamSubdivisionInterval = \musicLength 64
  [ \repeat unfold 32 c128 ] r2.

  % Shorten beam by 1/32
  c32[ c c c c c c] r32

  % Shorten beam by 3/32
  c32[ c c c c] r16.

  % Respect the incomplete beams of the previous two examples
  \set respectIncompleteBeams = ##t
  c32[ c c c c c c] r32
  % no visual change here as last two stems are exempt from this
  % special rule
  c32[ c c c c] r16.
}

[image of music]

厳密な拍に基づく連桁

16 分音符以下の連桁の向きは、音符が属する拍に基づいて決定することができます。最初の連桁では突き出るものが避けられ (デフォルト)、次の連桁は拍に厳密に従います。

\relative c'' {
  \time 6/8
  a8. a16 a a
  \set strictBeatBeaming = ##t
  a8. a16 a a
}

[image of music]

小節のグループ化記号

小節内の拍のまとまりは、beatStructure コンテキスト プロパティによりコントロールされます。beatStructure の値はscm/time-signature-settings.scm に、多くの拍子記号に対して設定されています。beatStructure の値は、\set で変更することができます。あるいは、\time を拍子記号と beatStructure の明示的な変更のために用いることができます。そのためには、拍子記号の前に小節内部の拍のグループを数値のリストで (Scheme の構文で) 与えます。

\timeTiming コンテキストに適用されるため、Voice のような他のより低いレベルのコンテキストにセットされた beatStructurebeatBase の値を上書きしません。

Measure_grouping_engraver がコンテキストに含まれている場合、拍のグループを示す記号が表示されます。この記号はリズムが複雑な現代音楽を読みやすくします。この例では、9/8 の小節が 2 つの方法で 2 つのパターンにグループ化されています。5/8 は scm/time-signature-settings.scm のデフォルト設定を用いています。

\score {
  \new Voice \relative c'' {
    \time 9/8
    g8 g d d g g a( bes g) |
    \set Timing.beatStructure = 2,2,2,3
    g8 g d d g g a( bes g) |
    \time 4,5 9/8
    g8 g d d g g a( bes g) |
    \time 5/8
    a4. g4 |
    \time 3,3,2 4/4
    \set Timing.beatBase = #1/8
    f4 d8 f4 d8 g4
  }
  \layout {
    \context {
      \Staff
      \consists "Measure_grouping_engraver"
    }
  }
}

[image of music]

Score コンテキストでの自動連桁

Score コンテキストに設定された自動連桁の設定は全ての譜に適用されますが、StaffVoce レベルで設定することもできます。

\relative c'' {
  \time 5/4
  % Set default beaming for all staves
  \set Score.beatBase = #1/8
  \set Score.beatStructure = 3,4,3
  <<
    \new Staff {
      c8 c c c c c c c c c
    }
    \new Staff {
      % Modify beaming for just this staff
      \set Staff.beatStructure = 6,4
      c8 c c c c c c c c c
    }
    \new Staff {
      % Inherit beaming from Score context
      <<
        {
          \voiceOne
          c8 c c c c c c c c c
        }
        % Modify beaming for this voice only
        \new Voice {
          \voiceTwo
          \set Voice.beatStructure = 6,4
          a8 a a a a a a a a a
        }
      >>
    }
  >>
}

[image of music]

参照

記譜法リファレンス: 拍子

インストールされているファイル: scm/time-signature-settings.scm

コード断片集: Rhythms

内部リファレンス: Auto_beam_engraver, Beam, BeamForbidEvent, beam-interface

既知の問題と警告

自動連桁が終了しておらず、まだ音符を受け付けている最中に楽譜が終了する場合、その最後の連桁はまったく譜刻されません。<< … \\ … >> で入力される多声ボイスでも同様です。自動連桁がまだ音符を受け付けている最中に多声ボイスが終了する場合、その最後の連桁はまったく譜刻されません。ボイスや楽譜の最後の連桁には手動で連桁を付けることにより、これらの問題を回避できます。

デフォルトでは、Timing コンテキストは Score コンテキストにエイリアスされています。このことは、ある譜で拍子の設定を行うと、他の譜での連桁の付け方にも影響を与えると言うことを意味します。このため、後で出てくる譜で拍子の設定を行うと、前にある譜でセットしたカスタム連桁はリセットされます。この問題を回避する方法の 1 つは、拍子の設定は 1 つの譜でしか行わないことです。

<<
  \new Staff {
    \time 3/4
    \set Timing.beatBase = #1/8
    \set Timing.beatStructure = 1,5
    \set Timing.beamExceptions = #'()
    \repeat unfold 6 { a'8 }
  }
  \new Staff {
    \repeat unfold 6 { a'8 }
  }
>>

[image of music]

拍子に対するデフォルトの連桁設定を変更することで、常にお望みの連桁を使うこともできます。ある拍子に対する自動連桁設定を変更する方法は 拍子 で説明しています。

<<
  \new Staff {
    \overrideTimeSignatureSettings
      3/4               % timeSignatureFraction
      #1/8              % beatBase
      1,5               % beatStructure
      #'()		% beamExceptions
    \time 3/4
    \repeat unfold 6 { a'8 }
  }
  \new Staff {
    \time 3/4
    \repeat unfold 6 { a'8 }
  }
>>

[image of music]


LilyPond 記譜法リファレンス v2.25.22 (development-branch).