LilyPond snippets: Simultaneous notes

# Simultaneous notes

Simultaneous notes

## 衝突を避けるための追加のボイス

複雑な多声音楽では、音符どうしの衝突を避けるために追加のボイスが必要になる場合があります。4 つ以上の並列ボイスが必要な場合には、追加のボイスは Scheme 関数 `context-spec-music` を用いて変数を定義することで追加できます。

    voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice)

    \relative c'' {
      \time 3/4
      \key d \minor
      \partial 2
      <<
        \new Voice  {
          \voiceOne
          a4. a8
          e'4 e4. e8
          f4 d4. c8
        }
        \new Voice {
          \voiceTwo
          d,2
          d4 cis2
          d4 bes2
        }
        \new Voice {
          \voiceThree
          f'2
          bes4 a2
          a4 s2
        }
        \new Voice {
          \voiceFive
          s2
          g4 g2
          f4 f2
        }
      >>
    }

## 和音内の各音符のサイズを変更する

和音内の各音符の符頭は、和音内で `\tweak` を使用し、`font-size` を変更することでサイズを変えられます。

和音の中 (`< >` の内部) では、変更したい音符の前に `\tweak` コマンドを配置し、`font-size` とサイズ値の `#-2` (非常に小さい) を指定します。

    \relative c' {
      <\tweak font-size #+2 c e g c
       \tweak font-size #-2 e>1
       ^\markup { A tiny e }_\markup { A big c }
    }

## 自動パート結合のテキストを変更する

自動パート結合機能を使用する際に、ソロやユニゾンを表示するテキストを変更することができます。

    \new Staff <<
      \set Staff.soloText = #"girl"
      \set Staff.soloIIText = #"boy"
      \set Staff.aDueText = #"together"
      \partCombine
        \relative c'' {
          g4 g r r
          a2 g
        }
        \relative c'' {
          r4 r a( b)
          a2 g
        }
    >>

## クラスタ

クラスタは、範囲内の音符が同時に演奏されることを示す手段です。

    fragment = \relative c' {
      c4 f <e d'>4
      <g a>8 <e a> a4 c2 <d b>4
      e2 c
    }

    <<
      \new Staff \fragment
      \new Staff \makeClusters \fragment
    >>

## 2 つのパートを 1 つの譜にまとめる

自動パート結合ツール (`\partCombine` コマンド) は、いくつかの異なるパートを同じ譜にまとめるものです。“solo” や “a2” といったテキスト指示は、デフォルトで追加されます。これらを削除するには、`printPartCombineTexts` プロパティを `f` にセットします。賛美歌のような歌曲では、“solo/a2” のテキストを追加する必要は無いため、これらを削除すると良いでしょう。しかしながら、これらを削除した場合、ソロの指示も表示されなくなるため問題があるかもしれません。このような場合は、通常の多声構文を用いると良いでしょう。

このスニペットは、2 つのパートを 1 つの譜に表示する 3 つの方法を示しています: 通常の多声、テキストを削除した `\partCombine`、テキストのある `\partCombine` の順です。

    %% Combining pedal notes with clef changes

    musicUp = \relative c'' {
      \time 4/4
      a4 c4.( g8) a4 |
      g4 e' g,( a8 b) |
      c b a2.
    }

    musicDown = \relative c'' {
      g4 e4.( d8) c4 |
      r2 g'4( f8 e) |
      d2 \stemDown a
    }

    \score {
        <<
        \new Staff \with { instrumentName = "Standard polyphony" }

          << \musicUp \\ \musicDown >>

        \new Staff \with {
          instrumentName = "PartCombine without text"
          printPartCombineTexts = ##f
        }

        \partCombine \musicUp \musicDown

        \new Staff \with { instrumentName = "PartCombine with text" }
          \partCombine \musicUp \musicDown
        >>
      \layout {
        indent = 6.0\cm
        \context {
          \Score
          \override SystemStartBar.collapse-height = #30
        }
      }
    }

## 複雑な和音を表示する

同じ位置にあり臨時記号が異なる音符を含む和音を表示する方法です。

    fixA = {
      \once \override Stem.length = #11
    }

    fixB = {
      \once \override NoteHead.X-offset = #1.7
      \once \override Stem.length = #7
      \once \override Stem.rotation = #'(45 0 0)
      \once \override Stem.extra-offset = #'(-0.1 . -0.2)
      \once \override Flag.style = #'no-flag
      \once \override Accidental.extra-offset = #'(4 . -.1)
    }

    \relative c' {
      << { \fixA <b d!>8 } \\ { \voiceThree \fixB dis } >> s
    }

## 音符の水平位置を強制的に調整する

組版エンジンがうまく対処できない場合、次の構文で音符の水平位置をオーバライドすることができます。単位は譜スペースです。

    \relative c' <<
      {
        <d g>2 <d g>
      }
      \\
      {
        <b f'>2
        \once \override NoteColumn.force-hshift = #1.7
        <b f'>2
      }
    >>

## transparent プロパティを用いてオブジェクトを不可視にする

`transparent` プロパティをセットすると、オブジェクトは“透明なインク”で描かれます: つまり、オブジェクトは表示されませんが、その他の性質は残ったままになるということです。オブジェクトはスペースを占有し、衝突が考慮され、スラー、タイ、連桁を付け加えることができます。

このスニペットは異なるボイスの音符をタイで繋ぐ方法を示しています。通常は、タイは同じボイスの音符にしか繋ぐことはできません。上のボイスにタイを付加し、そのボイスにある前の音符を透明にすることで、タイがボイスをまたがるように見えます。

    \relative {
      \time 2/4
      <<
        {
          \once \hide Stem
          \once \override Stem.length = #8
          b'8 ~ 8\noBeam
          \once \hide Stem
          \once \override Stem.length = #8
          g8 ~ 8\noBeam
        }
        \\
        {
          b8 g g e
        }
      >>
    }

## 多声の音楽で付点付きの音符を移動する

上のボイスにある付点付きの音符が、下の音符との衝突を避けるために移動する場合、デフォルトでは右側に移動します。この挙動は、`NoteCollision` の `prefer-dotted-right` プロパティをオーバライドすることで変更できます。

    \new Staff \relative c' <<
      {
        f2. f4
        \override Staff.NoteCollision.prefer-dotted-right = ##f
        f2. f4
        \override Staff.NoteCollision.prefer-dotted-right = ##t
        f2. f4
      }
      \\
      { e4 e e e e e e e e e e e }
    >>

## 音符の衝突に関する警告を抑制する

異なるボイスにあり、符幹が同じ向きの音符が同じ位置に配置されており、両方のボイスにシフトが指定されていないか同じシフトが指定されている場合、LilyPond ファイルのコンパイル時にエラー メッセージ ‘`warning: ignoring too many clashing note columns`’ が表示されます。このメッセージは、`NoteColumn` オブジェクトの `ignore-collision` プロパティを `#t` にすることで抑制できます。これは警告を抑制するだけでなく、LilyPond による衝突の回避を完全に無効にします。そのため、注意して使用しないと予期しない結果をもたらすことがあります。

    ignore = \override NoteColumn.ignore-collision = ##t

    \relative c' {
      \new Staff <<
        \new Voice { \ignore \stemDown f2 g }
        \new Voice { c2 \stemDown c, }
      >>
    }

## 1 つの譜で 2 つの \partCombine を使用する

`\partCombine` 関数は 2 パートの音楽表記を取り、パートがどのように結合されるかに応じて、“two”, “one”, “solo”, “chords” の 4 つの `Voice` に配置します。`\partCombine` によって出力されたボイスは、それぞれがレイアウト プロパティを持ち、通常の方法で調整することができます。ここでは、`\partCombine` を拡張し、4 つのボイスを 1 つの譜を結合する作業を簡単にしています。

soprano = { d’4 | cis’ b e’ d’8 cis’ | cis’2 b } alto = { fis4 | e8 fis gis ais b4 b | b ais fis2 } tenor = { a8 b | cis’ dis’ e’4 b8 cis’ d’4 | gis cis’ dis’2 } bass = { fis8 gis | a4 gis g fis | eis fis b,2 }

\new Staff << \key b\minor \clef alto \partial 4 \transpose b b’ \partCombineUp \soprano \alto \partCombineDown \tenor \bass >>

    \layout {
      \context {
        \Staff
        \accepts "VoiceBox"
      }
      \context {
        \name "VoiceBox"
        \type "Engraver_group"
        \defaultchild "Voice"
        \accepts "Voice"
        \accepts "NullVoice"
      }
    }

    customPartCombineUp =
    #(define-music-function (partOne partTwo)
      (ly:music? ly:music?)
    "Take the music in @var{partOne} and @var{partTwo} and return
    a @code{VoiceBox} named @q{Up} containing @code{Voice}s
    that contain @var{partOne} and @var{partTwo} merged into one
    voice where feasible.  This variant sets the default voicing
    in the output to use upward stems."
    #{
      \new VoiceBox = "Up" <<
        \context Voice = "one" { \voiceOne }
        \context Voice = "two" { \voiceThree }
        \context Voice = "shared" { \voiceOne }
        \context Voice = "solo" { \voiceOne }
        \context NullVoice = "null" {}
        \partCombine #partOne #partTwo
      >>
    #})

    customPartCombineDown = #
    (define-music-function (partOne partTwo)
      (ly:music? ly:music?)
    "Take the music in @var{partOne} and @var{partTwo} and return
    a @code{VoiceBox} named @q{Down} containing @code{Voice}s
    that contain @var{partOne} and @var{partTwo} merged into one
    voice where feasible.  This variant sets the default voicing
    in the output to use downward stems."
    #{
      \new VoiceBox = "Down" <<
        \set VoiceBox.soloText = #"Solo III"
        \set VoiceBox.soloIIText = #"Solo IV"
        \context Voice ="one" { \voiceFour }
        \context Voice ="two" { \voiceTwo }
        \context Voice ="shared" { \voiceFour }
        \context Voice ="solo" { \voiceFour }
        \context NullVoice = "null" {}
        \partCombine #partOne #partTwo
      >>
    #})

    soprano = { d'4 | cis'  b  e'  d'8 cis' | cis'2 b }
    alto = { fis4 | e8 fis gis ais b4 b | b ais fis2 }
    tenor = { a8 b | cis' dis' e'4 b8 cis' d'4 | gis cis' dis'2 }
    bass = { fis8 gis | a4 gis g fis | eis fis b,2 }

    \new Staff <<
      \key b\minor
      \clef alto
      \partial 4
      \transpose b b'
      \customPartCombineUp \soprano \alto
      \customPartCombineDown \tenor \bass
    >>

#### LilyPond — Snippets v2.24.4 (安定版).