Expressive marks

Expressive marks


スラーやタイを連符などと組み合わせる

LilyPond の構文は、括弧類の配置に関して特殊であり、入れ子構造にはならない場合があります。例えば、手動連桁を入力する場合、開き角括弧は音符とその長さの前ではなく後に配置しなければなりません。同様に、閉じ角括弧は、連符の途中であったとしても、連桁が終了する音符のすぐ後に配置しなければなりません。このスニペットは、手動連桁、手動スラー、タイ、フレージング スラーを、(波括弧で囲まれた) 連符と組み合わせる方法を示しています。

{
  r16[ g16 \tuplet 3/2 { r16 e'8] }
  g16( a \tuplet 3/2 { b d e') }
  g8[( a \tuplet 3/2 { b d') e'] ~ }
  \time 2/4
  \tuplet 5/4 { e'32\( a b d' e' } a'4.\)
}

[image of music]


発想記号や和音の音符に括弧を追加する

\parenthesize 関数は、オブジェクトを括弧で囲む特殊な調整関数です。Grob は Parentheses になります。

\relative c' {
  c2-\parenthesize ->
  \override Parentheses.padding = #0.1
  \override Parentheses.font-size = #-4
  <d \parenthesize f a>2
}

[image of music]


長いグリッサンドにタイミング マークを追加する

長いグリッサンド部分の拍をタイミング マークで表示する場合があります。これは通例符頭が無く符幹だけの音符として表され、この中間部分に発想記号を付け加えることもできます。

符幹がグリッサンドにうまく揃わない場合には、わずかに配置を調整する必要があるかもしれません。

glissandoSkipOn = {
  \override NoteColumn.glissando-skip = ##t
  \hide NoteHead
  \override NoteHead.no-ledgers = ##t
}

glissandoSkipOff = {
  \revert NoteColumn.glissando-skip
  \undo \hide NoteHead
  \revert NoteHead.no-ledgers
}

\relative c'' {
  r8 f8\glissando
  \glissandoSkipOn
  f4 g a a8\noBeam
  \glissandoSkipOff
  a8

  r8 f8\glissando
  \glissandoSkipOn
  g4 a8
  \glissandoSkipOff
  a8 |

  r4 f\glissando \<
  \glissandoSkipOn
  a4\f \>
  \glissandoSkipOff
  b8\! r |
}

[image of music]


fall や doit の形を調整する

fall や doit の形を調整するために、 shortest-duration-space プロパティを変更することができます。

\relative c'' {
  \override Score.SpacingSpanner.shortest-duration-space = #4.0
  c2-\bendAfter #5
  c2-\bendAfter #-4.75
  c2-\bendAfter #8.5
  c2-\bendAfter #-6
}

[image of music]


Aligning the ends of hairpins to NoteColumn directions

The ends of hairpins may be aligned to the LEFT, CENTER or RIGHT of NoteColumn grobs by overriding the property endpoint-alignments, which is a pair of numbers representing the left and right ends of the hairpin. endpoint-alignments are expected to be directions (either -1, 0 or 1). Other values will be transformed with a warning. The right end of a hairpin terminating at a rest is not affected, always ending at the left edge of the rest.

{
  c'2\< <c' d'>\! |
  \override Hairpin.endpoint-alignments = #'(1 . -1)
  c'2\< <c' d'>\! |
  \override Hairpin.endpoint-alignments = #`(,LEFT . ,CENTER)
  c'2\< <c' d'>\! |
}

[image of music]


二全音符を変更する

二全音符の表示を、符頭の左右に線が 1 本あるバロック式の表示から、2 本あるものに変更することができます。

\relative c'' {
  \time 4/2
  c\breve |
  \override Staff.NoteHead.style = #'altdefault
  b\breve
  \override Staff.NoteHead.style = #'baroque
  b\breve
  \revert Staff.NoteHead.style
  a\breve
}

[image of music]


非対称なスラー

音符の流れが対象的な形をしていない場合、それに合わせてスラーを非対称にすることができます。

slurNotes = { d,8( a' d f a f' d, a) }

\relative c' {
  \stemDown
  \slurUp
  \slurNotes
  \once \override Slur.eccentricity = #3.0
  \slurNotes
}

[image of music]


ブレス記号

ブレス記号にはいくつかの図形を設定できます: カンマ (デフォルト), ティック (斜め線), V字, “線路記号” (カエスーラ) です。

\new Staff \relative c'' {
  \key es \major
  \time 3/4
  % this bar contains no \breathe
  << { g4 as g } \\ { es4 bes es } >> |
  % Modern notation:
  % by default, \breathe uses the rcomma, just as if saying:
  % \override BreathingSign.text =
  %   #(make-musicglyph-markup "scripts.rcomma")
  << { g4 as g } \\ { es4 \breathe bes es } >> |

  % rvarcomma and lvarcomma are variations of the default rcomma
  % and lcomma
  % N.B.: must use Staff context here, since we start a Voice below
  \override Staff.BreathingSign.text =
    \markup { \musicglyph "scripts.rvarcomma" }
  << { g4 as g } \\ { es4 \breathe bes es } >> |

  % raltcomma and laltcomma are alternative variations of the
  % default rcomma and lcomma
  \override Staff.BreathingSign.text =
    \markup { \musicglyph "scripts.raltcomma" }
  << { g4 as g } \\ { es4 \breathe bes es } >> |

  % vee
  \override BreathingSign.text =
    \markup { \musicglyph "scripts.upbow" }
  es8[ d es f g] \breathe f |

  % caesura
  \override BreathingSign.text =
    \markup { \musicglyph "scripts.caesura.curved" }
  es8[ d] \breathe es[ f g f] |
  es2 r4 \bar "||"
}

[image of music]


一部が隠されたクレッシェンドのヘアピン

クレッシェンドのヘアピンの一部を非表示にするには、白い長方形を対応する部分の上から描画します。長方形は、テキスト マークアップの内部で PostScript コードとして定義します。

マークアップ コマンド with-dimensions は、スペーシングの際に (訳注: y 軸方向のバウンディングボックスを #'(0 . 0) にすることで) 長方形の下端部分のみが考慮されるようにし、staff-padding プロパティは、長方形がヘアピンと譜の間に配置されないようにしています。

ヘアピンが長方形によって隠されるために、ヘアピンのレイヤをテキスト マークアップよりも低く設定してください。

\relative c' {
  <<
    {
      \dynamicUp
      r2 r16 c'8.\pp r4
    }
    \\
    {
      \override DynamicLineSpanner.layer = #0
      des,2\mf\< ~
      \override TextScript.layer = #2
      \once\override TextScript.staff-padding = #6
      \once\override TextScript.vertical-skylines = #'()
      des16_\markup \with-dimensions #'(2 . 7) #'(0 . 0)
                    \with-color #white
                    \filled-box #'(2 . 7) #'(0 . 2) #0
      r8. des4 ~ des16->\sff r8.
    }
  >>
}

[image of music]


フェルマータの付いたカエスーラ ("線路記号")

カエスーラは上にフェルマータの付いた二重の “線路記号” として表記される場合があります。このスニペットは、視覚的に良い線路記号とフェルマータの組み合わせ方を示しています。

\relative c'' {
  c2.
  % construct the symbol
  \override BreathingSign.text = \markup {
    \override #'(direction . 1)
    \override #'(baseline-skip . 1.8)
    \dir-column {
      \translate #'(0.155 . 0)
        \center-align \musicglyph "scripts.caesura.curved"
      \center-align \musicglyph "scripts.ufermata"
    }
  }
  \breathe c4
  % set the breathe mark back to normal
  \revert BreathingSign.text
  c2. \breathe c4
  \bar "|."
}

[image of music]


ヘアピンの下にテキストを中央揃えする

この例はヘアピンの (デ) クレッシェンドの下に “molto” や “poco” のようなテキストを追加する機能を提供しています。テキストの向きは、ヘアピンの向きに応じて変更されます。ヘアピンは DynamicText に揃えられます。

この例は Scheme コードを用いて、オブジェクトが通常どのように表示されるかを変更する方法も示しています。

\paper { tagline = ##f }

hairpinWithCenteredText =
#(define-music-function (text) (markup?)
  #{
    \once \override Voice.Hairpin.after-line-breaking =
      #(lambda (grob)
        (let* ((stencil (ly:hairpin::print grob))
               (par-y (ly:grob-parent grob Y))
               (dir (ly:grob-property par-y 'direction))
               (staff-line-thickness
                 (ly:output-def-lookup (ly:grob-layout grob) 'line-thickness))
               (new-stencil (ly:stencil-aligned-to
                 (ly:stencil-combine-at-edge
                   (ly:stencil-aligned-to stencil X CENTER)
                   Y dir
                   (ly:stencil-aligned-to
                     (grob-interpret-markup
                       grob
                       (make-fontsize-markup
                         (magnification->font-size
                           (+ (ly:staff-symbol-staff-space grob)
                              (/ staff-line-thickness 2)))
                           text)) X CENTER))
                 X LEFT))
               (staff-space (ly:output-def-lookup
                 (ly:grob-layout grob) 'staff-space))
               (par-x (ly:grob-parent grob X))
               (dyn-text (grob::has-interface par-x 'dynamic-text-interface))
               (dyn-text-stencil-x-length
                 (if dyn-text
                   (interval-length
                     (ly:stencil-extent (ly:grob-property par-x 'stencil) X))
                   0))
               (x-shift
                 (if dyn-text
                   (-
                     (+ staff-space dyn-text-stencil-x-length)
                     (* 0.5 staff-line-thickness)) 0)))

        (ly:grob-set-property! grob 'Y-offset 0)
        (ly:grob-set-property! grob 'stencil
           (ly:stencil-translate-axis
            new-stencil
            x-shift X))))
  #})

hairpinMolto =
\hairpinWithCenteredText \markup { \italic molto }

hairpinMore =
\hairpinWithCenteredText \markup { \larger moltissimo }

\layout { ragged-right = ##f }

\relative c' {
  \hairpinMolto
  c2\< c\f
  \hairpinMore
  c2\ppppp\< c\f
  \break
  \hairpinMolto
  c2^\< c\f
  \hairpinMore
  c2\ppppp\< c\f
}

[image of music]


テキストによる強弱記号のテキストとスパナのスタイルを変更する

クレッシェンドやデクレッシェンドに使われるテキストは crescendoText, decrescendoText コンテキスト プロパティをセットすることで変更できます。

スパナの線は、DynamicTextSpannerstyle プロパティをセットすることでスタイルを変更できます。デフォルトの値は 'dashed-line であり、他に 'line, 'dotted-line, 'none が設定できます。

\relative c'' {
  \set crescendoText = \markup { \italic { cresc. poco } }
  \set crescendoSpanner = #'text
  \override DynamicTextSpanner.style = #'dotted-line
  a2\< a
  a2 a
  a2 a
  a2 a\mf
}

[image of music]


スラーを実線から点線や破線に変更する

スラーの見た目を実線から点線や破線に変更することができます。

\relative c' {
  c4( d e c)
  \slurDotted
  c4( d e c)
  \slurSolid
  c4( d e c)
  \slurDashed
  c4( d e c)
  \slurSolid
  c4( d e c)
}

[image of music]


ブレス記号を変更する

ブレス記号のグリフは BreathingSign レイアウト オブジェクトの text プロパティをオーバライドすることで、任意のマークアップ テキストに変更することができます。

\relative c'' {
  c2
  \override BreathingSign.text =
    \markup { \musicglyph "scripts.rvarcomma" }
  \breathe
  d2
}

[image of music]


音符ごとに付点の数を独立して変更する

音符ごとに、入力したドットの数とは独立して付点の数を変更することができます。

\relative c' {
  c4.. a16 r2 |
  \override Dots.dot-count = #4
  c4.. a16 r2 |
  \override Dots.dot-count = #0
  c4.. a16 r2 |
  \revert Dots.dot-count
  c4.. a16 r2 |
}

[image of music]


強弱記号をマークアップ テキストと結合する

強弱記号の中には、テキスト表示を含むものがあります (“più forte” や “piano subito” など)。これらは \markup コマンドで作り出すことができます。

piuF = \markup { \italic più \dynamic f }

\layout { ragged-right = ##f }

\relative c'' {
  c2\f c-\piuF
}

[image of music]


現代のグリッサンド

終端の音符が存在しない現代のグリッサンドは、不可視の音符とカデンツァを使用することで作ることができます。

\relative c'' {
  \time 3/4
  \override Glissando.style = #'zigzag
  c4 c
  \cadenzaOn
  c4\glissando
  \hideNotes
  c,,4
  \unHideNotes
  \cadenzaOff
  \bar "|"
}

[image of music]


改行後のスパナの可視性をコントロールする

改行のすぐ後の音符で終了するスパナの可視性は、after-line-breaking のコールバック ly:spanner::kill-zero-spanned-time によりコントロールされます。

グリッサンドやヘアピンのようなオブジェクトは、デフォルトで改行後のスパナを表示しないようにしています。このコールバックを無効化することで、改行後のスパナが表示されるようになります。

逆に、テキスト スパナなどはデフォルトで改行後に表示されるようになっていますが、コールバックを有効にすることで削除することができます。

\paper { ragged-right = ##t }

\relative c'' {
  \override Hairpin.to-barline = ##f
  \override Glissando.breakable = ##t
  % show hairpin
  \override Hairpin.after-line-breaking = ##t
  % hide text span
  \override TextSpanner.after-line-breaking =
    #ly:spanner::kill-zero-spanned-time
  e2\<\startTextSpan
  % show glissando
  \override Glissando.after-line-breaking = ##t
  f2\glissando
  \break
  f,1\!\stopTextSpan
}

[image of music]


スクリプトの縦方向の優先順位をコントロールする

スクリプト (音符に付加する記号) の縦方向の優先順位は、script-priority プロパティでコントロールされます。値が小さいほど、音符の近くに配置されます。この例では、1 つ目は TextScript (シャープ記号) を低い優先度を持つようにしており、一番低い位置に表示されます。2 つ目はトリル (Script) が低い優先度を持ち、内側に表示されるようになっています。2 つのオブジェクトが同じ優先度を持つ場合には、入力された順番が配置に影響します。

\relative c''' {
  \once \override TextScript.script-priority = #-100
  a2^\prall^\markup { \sharp }

  \once \override Script.script-priority = #-100
  a2^\prall^\markup { \sharp }
}

[image of music]


遅れターンを作成する

下の音符が臨時記号を持つような遅れターンを作るには、いくつかのオーバライドが必要です。outside-staff-priority プロパティを #f にセットしなければ、avoid-slur プロパティよりも優先されてしまい、スラーの内側に記号が入りません。分数 2/31/3 は、水平位置を調整しています。

\relative c'' {
  \after 2*2/3 \turn c2( d4) r |
  \after 4 \turn c4.( d8)
  \after 4
  {
    \once \set suggestAccidentals = ##t
    \once \override AccidentalSuggestion.outside-staff-priority = ##f
    \once \override AccidentalSuggestion.avoid-slur = #'inside
    \once \override AccidentalSuggestion.font-size = -3
    \once \override AccidentalSuggestion.script-priority = -1
    \once \hideNotes
    cis8\turn \noBeam
  }
  d4.( e8)
}

[image of music]


異なるボイスにまたがるアルペジオを作成する

Staff コンテキストに Span_arpeggio_engraver が追加された場合、アルペジオは同じ譜にある異なるボイスにまたがって表示されます。

\new Staff \with {
  \consists "Span_arpeggio_engraver"
}
\relative c' {
  \set Staff.connectArpeggios = ##t
  <<
    { <e' g>4\arpeggio <d f> <d f>2 }
    \\
    { <d, f>2\arpeggio <g b>2 }
  >>
}

[image of music]


ピアノ譜で譜をまたがるアルペジオを作成する

PianoStaff 内では、PianoStaff.connectArpeggios プロパティをセットすることで、譜をまたがるアルペジオを作成することができます。

\new PianoStaff \relative c'' <<
  \set PianoStaff.connectArpeggios = ##t
  \new Staff {
    <c e g c>4\arpeggio
    <g c e g>4\arpeggio
    <e g c e>4\arpeggio
    <c e g c>4\arpeggio
  }
  \new Staff {
    \clef bass
    \repeat unfold 4 {
      <c,, e g c>4\arpeggio
    }
  }
>>

[image of music]


他のコンテキストで譜をまたがるアルペジオを作成する

譜をまたがるアルペジオは Span_arpeggio_engraverScore コンテキストに追加されていれば、GrandStaff, PianoStaff, StaffGroup 以外にも作成することができます。

\score {
  \new ChoirStaff {
    \set Score.connectArpeggios = ##t
    <<
      \new Voice \relative c' {
        <c e>2\arpeggio
        <d f>2\arpeggio
        <c e>1\arpeggio
      }
      \new Voice \relative c {
        \clef bass
        <c g'>2\arpeggio
        <b g'>2\arpeggio
        <c g'>1\arpeggio
      }
    >>
  }
  \layout {
    \context {
      \Score
      \consists "Span_arpeggio_engraver"
    }
  }
}

[image of music]


2 桁の運指記号を作成する

5 よりも大きな運指記号を作成することができます。

\relative c' {
  c1-10
  c1-50
  c1-36
  c1-29
}

[image of music]


"本当の"括弧付きの強弱記号を作成する

強弱記号に括弧を追加する一番簡単な方法は、\markup ブロックを使用することですが、この方法には欠点があります: このように作成されたオブジェクトは、強弱記号ではなくテキスト マークアップとして振る舞うということです。

しかしながら、(記譜法リファレンスで説明しているように) make-dynamic-script 関数と共に Scheme コードを用いることで、似たようなオブジェクトを作り出すことができます。このように作成された記号は強弱記号として振る舞い、\dynamicUp\dynamicDown といったコマンドと互換性を保ちます。

paren =
#(define-event-function (dyn) (ly:event?)
   (make-dynamic-script
    #{ \markup \concat {
         \normal-text \italic \fontsize #2 (
	 \pad-x #0.2 #(ly:music-property dyn 'text)
	 \normal-text \italic \fontsize #2 )
       }
    #}))

\relative c'' {
  c4\paren\f c c \dynamicUp c\paren\p
}

[image of music]


ボイスをまたがるスラーを作成する

異なるボイスを繋ぐスラーを作成しなければならない場合があります。

解決法は、\hideNotes を用いて片方のボイスに不可視の音符を追加することです。

この例は、Bach の Partita for Violin No. 2 (BWV 1004) の 235 小節目です。

\relative c' {
  <<
    {
      d16( a') s a s a[ s a] s a[ s a]
    }
    \\
    {
      \slurUp
      bes,16[ s e](
      \hideNotes a)
      \unHideNotes f[(
      \hideNotes a)
      \unHideNotes fis](
      \hideNotes a)
      \unHideNotes g[(
      \hideNotes a)
      \unHideNotes gis](
      \hideNotes a)
    }
  >>
}

[image of music]


テキスト スパナを作成する

\startTextSpan\stopTextSpan コマンドは、ペダル記号やオッターバのようにテキスト スパナを容易に作成できます。TextSpanner オブジェクトのプロパティをオーバライドすることで、出力を変更することができます。

\paper { ragged-right = ##f }

\relative c'' {
  \override TextSpanner.bound-details.left.text = #"bla"
  \override TextSpanner.bound-details.right.text = #"blu"
  a4 \startTextSpan
  b4 c
  a4 \stopTextSpan

  \override TextSpanner.style = #'line
  \once \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER
  a4 \startTextSpan
  b4 c
  a4 \stopTextSpan

  \override TextSpanner.style = #'dashed-line
  \override TextSpanner.bound-details.left.text =
    \markup { \draw-line #'(0 . 1) }
  \override TextSpanner.bound-details.right.text =
    \markup { \draw-line #'(0 . -2) }
  \once \override TextSpanner.bound-details.right.padding = #-2

  a4 \startTextSpan
  b4 c
  a4 \stopTextSpan

  \set Staff.middleCPosition = #-13
  \override TextSpanner.dash-period = #10
  \override TextSpanner.dash-fraction = #0.5
  \override TextSpanner.thickness = #10
  a4 \startTextSpan
  b4 c
  a4 \stopTextSpan
}

[image of music]


強弱記号のカスタム テキスト スパナ後置関数

これは、クレッシェンドのテキスト スパナをカスタマイズする後置関数です。スパナは小節の最初の音符から始めるべきです。-\mycresc の記法を使用しなければ、スパナの開始点が次の音符になってしまいます。

% Two functions for (de)crescendo spanners where you can explicitly
% give the spanner text.
mycresc =
#(define-music-function (mymarkup) (markup?)
   (make-music 'CrescendoEvent
               'span-direction START
               'span-type 'text
               'span-text mymarkup))
mydecresc =
#(define-music-function (mymarkup) (markup?)
   (make-music 'DecrescendoEvent
               'span-direction START
               'span-type 'text
               'span-text mymarkup))

\relative c' {
  c4-\mycresc "custom cresc" c4 c4 c4 |
  c4 c4 c4 c4 |
  c4-\mydecresc "custom decresc" c4 c4 c4 |
  c4 c4\! c4 c4
}

[image of music]


強弱記号のテキスト スパナ音楽関数

カスタム テキスト スパナを定義することができ、ヘアピンやテキスト クレッシェンドと同時に用いることができます。\<\> はデフォルトでヘアピンを作り出し、\cresc などはデフォルトでテキスト スパナを作り出します。

% Some sample text dynamic spanners, to be used as postfix operators
crpoco =
#(make-music 'CrescendoEvent
             'span-direction START
             'span-type 'text
             'span-text "cresc. poco a poco")

\relative c' {
  c4\cresc d4 e4 f4 |
  g4 a4\! b4\crpoco c4 |
  c4 d4 e4 f4 |
  g4 a4\! b4\< c4 |
  g4\dim a4 b4\decresc c4\!
}

[image of music]


Grob をスキップするグリッサンド

NoteColumn Grob をグリッサンドが飛び越すように設定することができます。

\relative c' {
  a2 \glissando
  \once \override NoteColumn.glissando-skip = ##t
  f''4 d,
}

[image of music]


異なるライン スタイルのヘアピン

ヘアピンには line-interface のスタイルを用いることができます: dashed-line, dotted-line, line, trill, zigzag です。

\relative c' {
  c2\< c\!
  \override Hairpin.style = #'dashed-line
  c2\< c\!
  \override Hairpin.style = #'dotted-line
  c2\< c\!
  \override Hairpin.style = #'line
  c2\< c\!
  \override Hairpin.style = #'trill
  c2\< c\!
  \override Hairpin.style = #'zigzag
  c2\< c\!
  \revert Hairpin.style
  c2\< c\!
}

[image of music]


テキスト強弱記号の線を隠す

(cresc. や dim. のような) 強弱を変更するテキストは、その範囲を破線で示しています。次のようにしてこの線を表示しないようにすることができます。

\relative c'' {
  \override DynamicTextSpanner.style = #'none
  \crescTextCresc
  c1\< | d | b | c\!
}

[image of music]


カスタム強弱記号を水平方向に揃える ("sempre pp" "piu f" "subito p" など)

強弱記号の中には追加のテキストを伴うもの (例えば “sempre pp”) があります。強弱記号は通常音符の下に中央揃えされるため、\pp の部分が音符に揃えられる必要があります。

“sempre pp” を水平方向に正しく揃えるためには、あたかも \pp のみが存在するかのように揃える必要があります。いくつかのアプローチがあります:

* 強弱記号が適用される音符の前に \once\override DynamicText.X-offset = #-9.2 を設定し、手動で正しい位置にシフトします。欠点: この強弱記号を使用する際に毎回手動でシフトを行う必要があります。

* カスタム強弱記号の定義にいくらかのパディング (#:hspace 7.1) を追加して、それを中央揃えさせます。欠点: パディングは実際にスペースを占有するため、その位置に他のマークアップや強弱記号は配置されません。

* 強弱記号のスクリプトを \once\override ... .X-offset = .. でシフトします。欠点: \once \override が毎回必要です!

* 追加されるテキストの寸法を (#:with-dimensions '(0 . 0) '(0 . 0) を用いて) 0 にします。欠点: LilyPond にとっては “sempre” のサイズが 0 になるため、他のオブジェクトと衝突する可能性があります (衝突判定が行われないということです!)。また、いくつかのスペースは占有されているようであり、テキストが存在しない場合に比べて配置が多少ずれます。

* dynamic-script の Scheme 関数内で、直接明示的にシフトを設定します。

* dynamic-script の内部で明示的に揃え位置を設定します。デフォルトでは、これは何の効果も現れませんが、X-offset を指定した際にのみ有効となります! 欠点: DynamicText.X-offset をセットする必要があり、それは全ての強弱記号に影響します! また、揃え位置は pp の中央ではなく、追加したテキストの右端となります。

\paper {
  ragged-right = ##f
  indent = 2.5\cm
}

% Solution 1: Using a simple markup with a particular halign value
% Drawback: It's a markup, not a dynamic command, so \dynamicDown
%           etc. will have no effect
semppMarkup = \markup { \halign #1.4 \italic "sempre" \dynamic "pp" }

% Solution 2: Using a dynamic script & shifting with
%             \once \override ...X-offset = ..
% Drawback: \once \override needed for every invocation
semppK =
#(make-dynamic-script
  (markup #:line
          (#:normal-text
           #:italic "sempre"
           #:dynamic "pp")))

% Solution 3: Padding the dynamic script so the center-alignment
%             puts it at the correct position
% Drawback: the padding really reserves the space, nothing else can be there
semppT =
#(make-dynamic-script
  (markup #:line
          (#:normal-text
           #:italic "sempre"
           #:dynamic "pp"
           #:hspace 7.1)))

% Solution 4: Dynamic, setting the dimensions of the additional text to 0
% Drawback: To lilypond "sempre" has no extent, so it might put
%           other stuff there => collisions
% Drawback: Also, there seems to be some spacing, so it's not exactly the
%           same alignment as without the additional text
semppM =
#(make-dynamic-script
  (markup #:line
          (#:with-dimensions '(0 . 0) '(0 . 0)
                             #:right-align
                             #:normal-text
                             #:italic "sempre"
                             #:dynamic "pp")))

% Solution 5: Dynamic with explicit shifting inside the scheme function
semppG =
#(make-dynamic-script
  (markup #:hspace 0
          #:translate '(-18.85 . 0)
          #:line (#:normal-text
                  #:italic "sempre"
                  #:dynamic "pp")))

% Solution 6: Dynamic with explicit alignment. This has only effect
%             if one sets X-offset!
% Drawback: One needs to set DynamicText.X-offset!
% Drawback: Aligned at the right edge of the additional text,
%           not at the center of pp
semppMII =
#(make-dynamic-script
  (markup #:line (#:right-align
                  #:normal-text
                  #:italic "sempre"
                  #:dynamic "pp")))

\new StaffGroup <<
  \new Staff = "s" \with { instrumentName = \markup \column { Normal } }
  <<
    \relative c'' {
      \key es \major
      c4\pp c\p c c | c\ff c c\pp c
    }
  >>
  \new Staff = "sMarkup" \with {
    instrumentName = \markup \column { Normal markup }
  }
  <<
    \relative c'' {
      \key es \major
      c4-\semppMarkup c\p c c | c\ff c c-\semppMarkup c
    }
  >>
  \new Staff = "sK" \with {
    instrumentName = \markup \column { Explicit shifting }
  }
  <<
    \relative c'' {
      \key es \major
      \once \override DynamicText.X-offset = #-9.2
      c4\semppK c\p c c
      c4\ff c
      \once \override DynamicText.X-offset = #-9.2
      c4\semppK c
    }
  >>
  \new Staff = "sT" \with {
    instrumentName = \markup \column { Right padding }
  }
  <<
    \relative c'' {
      \key es \major
      c4\semppT c\p c c | c\ff c c\semppT c
    }
  >>
  \new Staff = "sM" \with {
    instrumentName = \markup \column { Set dimension "to zero" }
  }
  <<
    \relative c'' {
      \key es \major
      c4\semppM c\p c c | c\ff c c\semppM c
    }
  >>
  \new Staff = "sG" \with {
    instrumentName = \markup \column { Shift inside dynamics}
  }
  <<
    \relative c'' {
      \key es \major
      c4\semppG c\p c c | c\ff c c\semppG c
    }
  >>
  \new Staff = "sMII" \with {
    instrumentName = \markup \column { Alignment inside dynamics }
  }
  <<
    \relative c'' {
      \key es \major
      % Setting to ##f (false) gives the same result
      \override DynamicText.X-offset = #0
      c4\semppMII c\p c c | c\ff c c\semppMII c
    }
  >>
>>

\layout { \override Staff.InstrumentName.self-alignment-X = #LEFT }

[image of music]


カエスーラを挿入する

カエスーラ記号は BreathingSign オブジェクトの text プロパティをオーバライドすることで作成することができます。曲がったカエスーラ記号も使用することができます。

\relative c'' {
  \override BreathingSign.text = \markup {
    \musicglyph "scripts.caesura.straight"
  }
  c8 e4. \breathe g8. e16 c4

  \override BreathingSign.text = \markup {
    \musicglyph "scripts.caesura.curved"
  }
  g8 e'4. \breathe g8. e16 c4
}

[image of music]


レセ ヴィブレのタイ

レセ ヴィブレのタイの大きさは固定されています。tie-configuration によって配置を調整することができます。

\relative c' {
  <c e g>4\laissezVibrer r <c f g>\laissezVibrer r
  <c d f g>4\laissezVibrer r <c d f g>4.\laissezVibrer r8

  <c d e f>4\laissezVibrer r
  \override LaissezVibrerTieColumn.tie-configuration
     = #`((-7 . ,DOWN)
          (-5 . ,DOWN)
          (-3 . ,UP)
          (-1 . ,UP))
  <c d e f>4\laissezVibrer r
}

[image of music]


矢印

text-spanner, line-spanner (例えば Glissando) に対して矢印を用いることができます。

\relative c'' {
  \override TextSpanner.bound-padding = #1.0
  \override TextSpanner.style = #'line
  \override TextSpanner.bound-details.right.arrow = ##t
  \override TextSpanner.bound-details.left.text = #"fof"
  \override TextSpanner.bound-details.right.text = #"gag"
  \override TextSpanner.bound-details.right.padding = #0.6

  \override TextSpanner.bound-details.right.stencil-align-dir-y = #CENTER
  \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER

  \override Glissando.bound-details.right.arrow = ##t
  \override Glissando.arrow-length = #0.5
  \override Glissando.arrow-width = #0.25

  a8\startTextSpan gis a4 b\glissando b,
  g'4 c\stopTextSpan c2
}

[image of music]


複雑な破線のスラーを作成する

dash-definition プロパティをセットすることで、スラーに複雑な破線パターンを追加することができます。dash-definitiondash-element のリストになっています。dash-element はスラーの各部分に対する破線パターンのパラメータ リストです。

スラーはベジエ曲線の媒介変数 t (左端が 0, 右端が 1) の関数として定義されます。dash-element は、(start-t stop-t dash-fraction dash-period) のリストになっています。start-t から stop-t までの範囲が、dash-period の長さにつき dash-fraction が黒になるような破線となります。dash-period は譜スペースの単位です。dash-fraction を 1 にすると実線のスラーになります。

\relative c' {
  \once \override
    Slur.dash-definition = #'((0 0.3 0.1 0.75)
                                (0.3 0.6 1 1)
                                (0.65 1.0 0.4 0.75))
  c4( d e f)
  \once \override
    Slur.dash-definition = #'((0 0.25 1 1)
                                (0.3 0.7 0.4 0.75)
                                (0.75 1.0 1 1))
  c4( d e f)
}

[image of music]


アーティキュレーションの省略記法のデフォルト値を書き換える

アーティキュレーションの省略記法は ly/script-init.ly に定義されており、変数 dashHat, dashPlus, dashDash, dashBang, dashLarger, dashDot, dashUnderscore にデフォルト設定がセットされています。これらを変更することができます。この例では、dashPlus 変数に trill をセットすることで、-+ を入力した際にデフォルトの + 記号の代わりにトリル記号が表示されるようにしています。

\relative c'' { c1-+ }

dashPlus = \trill

\relative c'' { c1-+ }

[image of music]


スラーの縦方向の位置を移動する

スラーの縦方向の位置は Slurpositions プロパティによって調整することができます。このプロパティは 2 つのパラメータを取り、1 つ目はスラーの左端、2 つ目はスラーの右端です。このパラメータの値は、スラーの正確な位置を決定するために用いられるわけではありません – LilyPond ではどのようなスラーが見た目として最善かを、このパラメータを基にして決定します。正の値はスラーを上方向に移動するため、符幹が下向きの音符に対して有効です。負の値はスラーを下方向に移動します。

\relative c' {
  \stemDown
  e4( a)
  \override Slur.positions = #'(1 . 1)
  e4( a)
  \override Slur.positions = #'(2 . 2)
  e4( a)
  \override Slur.positions = #'(3 . 3)
  e4( a)
  \override Slur.positions = #'(4 . 4)
  e4( a)
  \override Slur.positions = #'(5 . 5)
  e4( a)
  \override Slur.positions = #'(0 . 5)
  e4( a)
  \override Slur.positions = #'(5 . 0)
  e4( a)
  \stemUp
  \override Slur.positions = #'(-5 . -5)
  e4( a)
  \stemDown
  \revert Slur.positions
  e4( a)
}

[image of music]


ヘアピンの端点を移動する

ヘアピンの端点は Hairpin オブジェクトの shorten-pair をセットすることで移動できます。正の値は端点を右に移動し、負の値は左に移動します。minimum-length プロパティとは異なり、このプロパティはヘアピンのみの見た目に影響します。水平方向のスペーシングには影響しません (始点や終点にある強弱記号もです)。そのため、この方法はヘアピンを割り当てられた領域の中で微調整するのに適しています。

{
  c'1~\<
  c'2~ c'\!
  \once \override Hairpin.shorten-pair = #'(2 . 2)
  c'1~\<
  c'2~ c'\!
  \once \override Hairpin.shorten-pair = #'(-2 . -2)
  c'1~\<
  c'2~ c'\!
  c'1~\p-\tweak shorten-pair #'(2 . 0)\<
  c'2~ c'\ffff
}

[image of music]


アルペジオの配置

アルペジオの長さを変更したい場合、上端と下端の位置を独立に変更することができます。

\relative c' {
  <c e g b>1\arpeggio
  \once \override Arpeggio.positions = #'(-5 . 0)
  <c e g b>1\arpeggio
  \once \override Arpeggio.positions = #'(0 . 5)
  <c e g b>1\arpeggio
  \once \override Arpeggio.positions = #'(-5 . 5)
  <c e g b>1\arpeggio
}

[image of music]


テキスト マークアップをスラーの内側に配置する

テキスト マークアップをスラーの内側に配置するには、outside-staff-priority プロパティを #f に設定する必要があります。

\relative c'' {
  \override TextScript.avoid-slur = #'inside
  \override TextScript.outside-staff-priority = ##f
  c2(^\markup { \halign #-10 \natural } d4.) c8
}

[image of music]


ヘアピンを様々なスタイルで表示する

ヘアピン強弱記号は様々なスタイルで作成できます。

\relative c'' {
  \override Hairpin.stencil = #flared-hairpin
  a4\< a a a\f
  a4\p\< a a a\ff
  a4\sfz\< a a a\!
  \override Hairpin.stencil = #constante-hairpin
  a4\< a a a\f
  a4\p\< a a a\ff
  a4\sfz\< a a a\!
  \override Hairpin.stencil = #flared-hairpin
  a4\> a a a\f
  a4\p\> a a a\ff
  a4\sfz\> a a a\!
  \override Hairpin.stencil = #constante-hairpin
  a4\> a a a\f
  a4\p\> a a a\ff
  a4\sfz\> a a a\!
}

[image of music]


ヘアピンの表示に al niente 記譜法を用いる

ヘアピン強弱記号は、Hairpin オブジェクトの circled-tip プロパティを #t にセットすることで、端に丸を付けて (“al niente” 記譜法) 表示することができます。

\relative c'' {
  \override Hairpin.circled-tip = ##t
  c2\< c\!
  c4\> c\< c2\!
}

[image of music]


メトロノーム記号やリハーサル記号を譜の下に表示する

デフォルトでは、メトロノーム記号やリハーサル記号は譜の上に表示されます。これらを譜の下に表示するには、MetronomeMarkRehearsalMarkdirection プロパティを正しくセットします。

\layout {
  indent = 0
  ragged-right = ##f
}

{
  % Metronome marks below the staff
  \override Score.MetronomeMark.direction = #DOWN
  \tempo 8. = 120
  c''1

  % Rehearsal marks below the staff
  \override Score.RehearsalMark.direction = #DOWN
  \mark \default
  c''1
}

[image of music]


小節線にぶつかるヘアピンの挙動を設定する

ヘアピンの終端となる音符が強拍にある場合、ヘアピンはその前にある小節線の直前が終端となります。この挙動は to-barline プロパティをオーバライドすることで調整できます。

\relative c'' {
  e4\< e2.
  e1\!
  \override Hairpin.to-barline = ##f
  e4\< e2.
  e1\!
}

[image of music]


ヘアピンの最小長さをセットする

ヘアピンが短すぎる場合、Hairpin オブジェクトの minimum-length プロパティを変更することで長くすることができます。

<<
  {
    \after 4 \< \after 2 \> \after 2. \! f'1
    \override Hairpin.minimum-length = #8
    \after 4 \< \after 2 \> \after 2. \! f'1
  }
  {
    \repeat unfold 8 c'4
  }
>>

[image of music]


同じアーティキュレーションを音符や和音の上と下の両方に表示する

デフォルトでは、LilyPond は同じアーティキュレーション (例えばアクセント、フェルマータ、フラジョレットなど) を音符の上と下に表示することを認めていません。例えば、c4_\fermata^\fermata では、フェルマータが音符の下のみに表示され、上に表示するよう指定したフェルマータは無視されます。しかし、和音表記を用いてその内部にアーティキュレーションを配置すると、(運指記号と同じように) アーティキュレーションを好きなだけ表示することができます。このアプローチでは符幹を無視し、アーティキュレーションを符頭との相対位置で配置します。これはこのスニペットのフラジョレットに見られます。和音外に配置されるアーティキュレーションと同じ挙動を得るには、add-stem-support が必要となります。そのため、解決策は音符を和音として表記し、<...> の中にアーティキュレーションを追加することです。 向きは常に上向きですが、\tweak によって変更することができます: <c-\tweak direction #DOWN-\fermata^\fermata>

\relative c' {
  <>^"Wrong"
  c2_\fermata^\fermata % The second fermata is ignored!
  <e d'>2^\flageolet_\flageolet

  \stopStaff s1 \startStaff

  <>^"Works if written inside a chord"
  <e_\flageolet d'^\flageolet>2
  <e_\flageolet d'^\flageolet>2
  <e_\flageolet^\flageolet>2
  <e_\fermata^\fermata>2
}

[image of music]


スナップ ピッツィカートあるいはバルトーク ピッツィカート

スナップ ピッツィカート (“バルトーク ピッツィカート”とも呼ばれます) は、“弦を指板と垂直に強く引っ張って離して弦を指板にぶつけること” (Wikipedia) です。これは円とその中央から上に突き出す線の記号によって表します。

\relative c' {
  c4\snappizzicato
  <c' e g>4\snappizzicato
  <c' e g>4^\snappizzicato
  <c, e g>4_\snappizzicato
}

[image of music]


ブレス記号にチェックを使用する

歌曲や管楽では、ブレス記号によくチェック マークを使用します。これはコンマ記号で示すように短い間を挿入するものではなく、マークの前にある音符を少しだけ短くすることでブレスを行います。マークを譜から離すために、上方向に少し移動しています。

\relative c'' {
  c2
  \breathe
  d2
  \override BreathingSign.Y-offset = #2.6
  \override BreathingSign.text =
    \markup { \musicglyph "scripts.tickmark" }
  c2
  \breathe
  d2
}

[image of music]


ディビジを見やすくするために arpeggioBracket を使用する

符幹が存在しないため情報がない場合に、ボイスの分割を arpeggioBracket で表すことができます。これは合唱曲によく見られます。

\include "english.ly"

\score {
  \relative c'' {
    \key a \major
    \time 2/2
    <<
      \new Voice = "upper"
      <<
        { \voiceOne \arpeggioBracket
          a2( b2
          <b d>1\arpeggio)
          <cs e>\arpeggio ~
          <cs e>4
        }
        \addlyrics { \lyricmode { A -- men. } }
      >>
      \new Voice = "lower"
      { \voiceTwo
        a1 ~
        a
        a ~
        a4 \bar "|."
      }
    >>
  }
  \layout { ragged-right = ##t }
}

[image of music]


和音のレガートに 2 つのスラーを使用する

和音をレガートで演奏する場合、2 つのスラーを書く場合があります。これは doubleSlurs をセットすることで実現できます。

\relative c' {
  \set doubleSlurs = ##t
  <c e>4( <d f> <c e> <d f>)
}

[image of music]


whiteout プロパティを使用する

下にあるオブジェクトの一部分をマスクするために、任意のグラフィカル オブジェクトを白い背景の上に表示することができます。これは、衝突を解決するためにオブジェクトを移動するのが困難であるような複雑な状況において、見た目を改善するのに有効です。layer プロパティを明示的に設定して、どのオブジェクトが白でマスクされるかを指定しなければなりません。

この例では、タイと拍子記号が重なる部分について、タイの方をマスクしています。そのためには TimeSignaturewhiteout プロパティを設定し、TimeSignatureTie の上のレイヤに移動する必要があります。Tie のデフォルトのレイヤは 1 であるため、TimeSignature のレイヤ値をそれより大きくします。また、StaffSymbol がマスクされないように、更に上位のレイヤに配置する必要があります。

{
  \override Score.StaffSymbol.layer = #4
  \override Staff.TimeSignature.layer = #3
  b'2 b'~
  \once \override Staff.TimeSignature.whiteout = ##t
  \time 3/4
  b' r4
}

[image of music]


バロック音楽の縦線アーティキュレーション マーク

音符の上にある短い線は、バロック音楽で広く用いられるものです。意味は様々ですが、通常は音符をより“重く”演奏することを指示しています。次の例は、この記譜をどのように実現するかを示しています。

upline =
\tweak stencil
  #(lambda (grob)
    (grob-interpret-markup grob #{ \markup \draw-line #'(0 . 1) #}))
  \stopped

\relative c' {
  a'4^\upline a( c d')_\upline
}

[image of music]


複数の音符にまたがる強弱記号を縦方向に揃える

同じ音符に配置されている、または開始あるいは終了する強弱記号は、縦方向に揃えられます。同じ音符に配置されない強弱記号も揃えるためには、DynamicLineSpanner オブジェクトの staff-padding プロパティを大きな値にします。

\relative c' {
  \override DynamicLineSpanner.staff-padding = #4
  c2\p f\mf
  g2\< b4\> c\!
}

[image of music]


LilyPond — Snippets v2.23.82 (開発版).