5.5.4 形状を変更する


タイとスラーの形状を変更する

Tie, Slur, PhrasingSlur, LaissezVibrerTie, それに RepeatTie はすべて 3 次のベジエ曲線として描かれます。自動的に算出されるタイやスラーの形状が最適ではない場合、以下の 2 つの方法を用いて手動で形状を変更することができます:

  1. 自動的に算出されるベジエ曲線の制御ポイントの移動させる
  2. 求める曲線を定義するのに必要な 4 つの制御ポイントの位置を明示的に指定する

2 つの方法について以下で説明します。曲線の調節がわずかであれば、最初の方法が適しています。2 番目の方法は単一の音符に関連付けられる曲線を作り出す場合に適しています。

3 次ベジエ曲線

3 次あるいは 3 乗のベジエ曲線は、4 つの制御ポイントによって定義されます。1 番目と 4 番目の制御ポイントは曲線の始点と終点になります。間にある 2 つの制御ポイントは曲線の形状を定義します。Web でベジエ曲線が描かれる様子を示すアニメーションを見つけることができるでしょう。しかしながら、以下の記述も役に立つかもしれません。ベジエ曲線は最初の制御ポイントから 2 番目の制御ポイントに進み、徐々に 3 番目の制御ポイントの方へ向きを変えながら 4 番目の制御ポイントの方へ向かい続け、3 番目の制御ポイントから 4 番目の制御ポイントに到達します。ベジエ曲線は 4 つの制御ポイントからなる四角形の中に納まります。制御ポイントの平行移動、回転、伸縮はすべて同じ操作です。

制御ポイントを移動させる

以下の例では、タイの自動配置が最適ではなく、\tieDown も役に立ちません。

<<
  { e'1~ 1 }
\\
  \relative { r4 <g' c,> <g c,> <g c,> }
>>

[image of music]

\shape でタイの制御ポイントを調節することで衝突を避けることができます。

\shape の構文は以下の通りです:

[-]\shape displacements item

これは item の制御ポイントを displacements だけ移動させます。引数 displacements は数のペアのリスト、あるいはそのようなリストのリストです。ペアの要素は制御ポイントの座標の移動量を表しています。item が文字列の場合、指定されたグラフィカル オブジェクト タイプに \once \override で適用されます。item が音楽表記の場合、その音楽表記に調節が適用されます。

言い換えると、\shape 関数は、引数 item が “Slur” のようなグラフィカル オブジェクト名であるか “(” のような音楽表記であるかによって、\once \override コマンドあるいは \tweak コマンドのどちらにでもなり得ます。引数 displacements は 4 つの (dx . dy) ペアのリストで 4 つの制御ポイントの移動を指定します – 値の単位は譜スペースです。 (曲線が複数のセグメントを持つ場合、引数 displacements は 4 つのペアを持つリストのリストになります。)

\tweak 形式で用いる場合にのみ、先頭にハイフン - を付ける必要があります。

それでは、上記の例に \once \override 形式の \shape を使ってタイを 0.5 譜スペースだけ上に移動させてみましょう:

<<
  {
    \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie
    e'1~ 1
  }
\\
  \relative { r4 <g' c,> <g c,> <g c,> }
>>

[image of music]

タイの位置は改善されましたが、中央部分をもっと持ち上げるべきです。以下の例で \tweak 形式でそれを行っています:

<<
  {
    e'1-\shape #'((0 . 0.5) (0 . 1) (0 . 1) (0 . 0.5)) ~ e'
  }
\\
  \relative { r4 <g' c,> <g c,> <g c,> }
>>

[image of music]

同じ方法で制御ポイントを水平方向に移動させることもできて、同じ音楽タイミングで発生する 2 つの曲線をうまく配置することができます:

\relative {
  c''8(\( a) a'4 e c\)
  \shape #'((0.7 . -0.4) (0.5 . -0.4) (0.3 . -0.3) (0 . -0.2)) Slur
  \shape #'((0 . 0) (0 . 0.5) (0 . 0.5) (0 . 0)) PhrasingSlur
  c8(\( a) a'4 e c\)
}

[image of music]

\shape 関数は改行を跨ぐ曲線の制御ポイントを移動させることもできます。分割される曲線それぞれにリストを与えて制御ポイントを移動させます。片方の曲線は変更する必要がない場合、空のリストを渡します。以下の例では、1 つのスラーが改行で 2 つに分割されています:

\relative {
  c'4( f g c
  \break
  d,4 c' f, c)
}

[image of music]

分割されたスラーの形状を変更することで、改行を跨いで続くスラーであることがわかりやすくなります:

% 片方のスラーを変更する必要がない場合、
% () を ((0 . 0) (0 . 0) (0 . 0) (0 . 0)) の短縮形として使うことができます
\relative c' {
  \shape #'(
             (( 0 . 0) (0 . 0) (0 . 0) (0 . 1))
             ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5))
           ) Slur
  c4( f g c
  \break
  d,4 c' f, c)
}

[image of music]

S 字曲線が求められた場合は、常に制御ポイントを手動で調節する必要があります — LilyPond が自動的にそのような形状を選択することはありません。

\relative c'' {
  c8( e b-> f d' a e-> g)
  \shape #'((0 . -1) (5.5 . -0.5) (-5.5 . -10.5) (0 . -5.5)) PhrasingSlur
  c8\( e b-> f d' a e-> g\)
}

[image of music]

制御ポイントの位置を明示的に指定する

ベジエ曲線の制御ポイントの座標を指定します – 単位は譜スペースです。X 座標はタイあるいはスラーを取り付ける音符の参照ポイントからの相対位置で、X 座標は譜の中央線からの相対位置です。制御ポイントの座標をリストで指定します – リストは数のペアを 4 つ持ちます。両端の座標を推測して、それから 2 つ中間点の座標を推測します。最適値はトライ&エラーで見つけます。音楽やレイアウトに変更が加えられた場合、手動で値を調節する必要があるということに注意してください。

制御ポイントを移動させるよりも、位置を明示的に指定する方が望ましいシチュエーションの 1 つは、単一の音符に関連付けられる曲線の場合です。ここで、そのような例を示します。繰り返しの差し替え部分まで延びるスラーを表示する方法を示しています。

\relative {
  c''1
  \repeat volta 3 { c4 d( e f }
  \alternative {
    { g2) d }
    {
      g2
      % スラーを作成して、新しい位置に移動させます
      % <> はスラーを終わらせるための空の和音です
      -\tweak control-points #'((-2 . 3.8) (-1 . 3.9) (0 . 4) (1 . 3.4)) ( <> )
      f,
    }
    {
      e'2
      % スラーを作成して、新しい位置に移動させます
      -\tweak control-points #'((-2 . 3) (-1 . 3.1) (0 . 3.2) (1 . 2.4)) ( <> )
      f,
    }
  }
}

[image of music]

既知の問題と警告

同じ音楽タイミングに複数のタイあるいはスラーが存在する場合、control-points プロパティを変更してもそれらの形状を変更することはできません。\tweak コマンドを用いたとしても変更できません。しかしながら、TieColumntie-configuration プロパティをオーバライドすることで、タイの垂直方向の位置と領域を変更することができます。

参照

内部リファレンス: TieColumn


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