第四日

多声表記 (1)

一つの譜に複数の声部を記譜する方法を学ぶことにしよう。

LilyPond: 多声表記
\relative c'' {
  << { c4 b c2 } \\ { f,4 d f <e g> } \\ { a g8 f g2 } \\ { c,4 b d c } >>
}
\relative c'' {
  << { c4 b c2 } \\ { f,4 d f <e g> } \\ { a g8 f g2 } \\ { c,4 b d c } >>
}

多声表記を行う部分全体を << >> で囲み、 { } で囲まれて記述される各声部を \\ で区切って配置するという形が取られている。

この表記は以下の特徴を持つ。例と見比べながら確認せよ。

  • 声部の順番が音符の向きや配置に影響し、奇数番目は上向き、偶数番目は下向きとなる。
  • 同じ向きの音符が同じタイミングに出現する場合、後に出てくるものが優先的に横にシフトする。 このとき、上向きの音符は右に、下向きの音符は左にシフトする。

これらを考慮すると、上の例は、第2声部と第4声部を入れ替えた方が見栄えが良いことが分かるだろう。

LilyPond: 多声表記の修正例
\relative c'' {
  << { c4 b c2 } \\ { c,4 b d c } \\ { a' g8 f g2 } \\ { f4 d f <e g> } >>
}
\relative c'' {
  << { c4 b c2 } \\ { c,4 b d c } \\ { a' g8 f g2 } \\ { f4 d f <e g> } >>
}

通常の場合は、音高が一番高いもの、一番低いもの、二番目に高いもの、二番目に低いもの…の順に配置すると良い。

\relative ブロック内で多声表記を扱う時、ピッチの基準は、全てがひとつづきの音符列であるかのように扱われる。 すなわち上の例では、第2声部の最初の音 c,4 の基準は第1声部の最後の音 c2 にある。 音長の省略や単音・和音の繰り返しに関しても同じ基準が適用される。

各声部の長さが異なる場合、その中で一番長いものに長さが合わせられ、足りない部分には何も描かれない。

LilyPond: 長さの異なる多声表記
\relative c'' {
  << { c2 d | c r } \\ { e,4 f g } \\ { g2 } >>
}
\relative c'' {
  << { c2 d | c r } \\ { e,4 f g } \\ { g2 } >>
}

途中で声部が1つになっても、 << >> を抜けない限り音符の向きや休符の位置は元に戻らないことに注意せよ。

本節で紹介した表記は簡略表記であり、 多声表記 (2) では、更に自由度の高い多声表記について扱う。

複数の譜

複数の譜を表示するには、音楽表記全体が \\ を間に 挟まない << >> で囲まれている必要がある。

LilyPond: 複数の譜
\relative c' {
  <<
    { c4 d e f | g1 }
    { g4 f e d | c1 }
  >>
}
\relative c' {
  <<
    { c4 d e f | g1 }
    { g4 f e d | c1 }
  >>
}

楽譜内で最初に出現する音符が << >> で囲まれていない場合、複数の譜とならずに、単一の譜で同時に進行する音符を生成してしまう。 このとき、 多声表記 (1) のような多声表記にはならず、和音の同時進行となる。

LilyPond: 複数の譜が作成されない例
\relative c' {
  c1
  <<
    { c4 d e f | g1 }
    { g4 f e d | c1 }
  >>
}
\relative c' {
  c1
  <<
    { c4 d e f | g1 }
    { g4 f e d | c1 }
  >>
}

この表記も簡略的なものであり、より一般的な譜の作成方法については コンテキストの生成 で扱う。

三種類の括弧

これまで、音符を囲む三種類の括弧 { }< ><< >> について扱ってきた。 ここで、これらの違いについてまとめてみよう。

{ } は、複数の音符を時系列順に並べ、それらをひとかたまりの「(複合)音楽表記」として扱う。

< > は、複数の音高をまとめ、一つの和音音符を作る。括弧内に音長は指定できず、外に指定する。

<< >> は、複数の「音楽表記」を同じタイミングで始め、それらを同時に進行させ、「(複合)音楽表記」を形成する。

単一の音符は、括弧が無くても一つの音楽表記として扱われることがある。 例えば、 \relative\relative c' { c4 d e f } のように、ピッチと音楽表記を順番に取るが、 \relative c' c' と指定した場合、前者はピッチとして解釈され、後者は音楽表記として解釈される。 出力は以下のようになるであろう。

LilyPond: 音高と音楽表記
\relative c' c'

以下のような複雑な例を作ることもできる。出力とよく見比べて、どの部分がひとかたまりの音楽表記を形成しているかを確認せよ。

LilyPond: 括弧の複合使用
\relative c'' {
  << { c8 d e f g2 } \\ << { e,2 d } { g f } >> \\ <g g'>1 >>
}
\relative c'' {
  << { c8 d e f g2 } \\ << { e,2 d } { g f } >> \\ <g g'>1 >>
}

これは3声部の多声表記であり、1つ目は { } で囲まれた音楽表記、2つ目は << >> で囲まれた音楽表記であり、 3つ目は単一の和音が一つの音楽表記として扱われている。 第2声部の音楽表記は、 \\ を伴わないため、和音の進行が作られていることが分かる。

わかりやすいように、括弧 { } と和音 < > を使ってこれを書き換えると、以下のようになる。

LilyPond: 同等な音楽表記
\relative c'' {
  << { c8 d e f g2 } \\ { <e, g>2 <d f> } \\ { <g g'>1 } >>
}

アーティキュレーション

アクセントやフェルマータなどの音符の上下に付く、アーティキュレーションの付加方法について学ぼう。

アーティキュレーションはタイやスラーのように、音符の末尾に付加する形を取る。以下に例を示す。

LilyPond: アーティキュレーション
\relative c' {
  c4\accent d\staccato e\prall f\fermata g\upbow a\stopped b\segno c\coda
}
\relative c' {
  c4\accent d\staccato e\prall f\fermata g\upbow a\stopped b\segno c\coda
}

よく使われるものには簡略表記が存在し、通常はこちらを用いる。

LilyPond: アーティキュレーションの簡略表記
\relative c' {
  c\accent c->
  d\tenuto d--        |
  e\staccato e-.
  f\staccatissimo f-! |
  g\marcato g-^
  a\portato a-_       |
  b\stopped b-+
}
\relative c' {
  c\accent c->
  d\tenuto d--        |
  e\staccato e-.
  f\staccatissimo f-! |
  g\marcato g-^
  a\portato a-_       |
  b\stopped b-+
}

アーティキュレーションは和音全体に付加することも、和音中の各音に付加することもできる。 以上に挙げたアーティキュレーションに関してはどちらも同一の出力を得るため、和音全体に付加することを推奨する。

LilyPond: アーティキュレーションと和音
\relative c' {
  <c e g>4->-. <c-. e-> g>
}
\relative c' {
  <c e g>4->-. <c-. e-> g>
}

全てのアーティキュレーションは articulation-list で確認できる。

一つの音符に複数のアーティキュレーションが付く場合、基本的には先に表記された方が音符の近くに配置されるが、 一部の記号には優先度が設定されている。 たとえば、スタッカートは表記の順番に関わらず優先的に近くに配置され、フェルマータは遠くに配置される。 詳しくは articulation-priority で扱う。

LilyPond: アーティキュレーションの優先度
\relative c' {
  c4-.-> c->-. c\fermata\prall c\prall\fermata
}
\relative c' {
  c4-.-> c->-. c\fermata\prall c\prall\fermata
}

強弱記号

強弱記号も、音符の末尾に付加するものであり、その音符のタイミングに記号が描かれる。

以下の例で全ての絶対強弱記号(ある点で音量が示され、時間的な変化を含まないもの)を示す。

LilyPond: 絶対強弱記号の一覧
\relative c'' {
  c1\ppppp c\pppp c\ppp c\pp c\p c\mp
  c\mf c\f c\ff c\fff c\ffff c\fffff
  c\fp c\sf c\sff c\sp c\spp c\sfz c\rfz
}
\relative c'' {
  c1\ppppp c\pppp c\ppp c\pp c\p c\mp
  c\mf c\f c\ff c\fff c\ffff c\fffff
  c\fp c\sf c\sff c\sp c\spp c\sfz c\rfz
}

以上に必要な強弱記号が存在しない場合は、新たに強弱記号を定義する必要があるが、それについては new-dynamic で扱う。

クレッシェンドは開始点の音符に \< あるいは \cr を付加し、デクレッシェンドは \> あるいは \decr を付加する。 新たな強弱記号が配置された時点でクレッシェンドやデクレッシェンドは終了する。 終了したい箇所に強弱記号がない場合は、その箇所(音符・休符)に \! を付加する。

LilyPond: クレッシェンド・デクレッシェンド
\relative c' {
  c4\< d e f | g1\f | f4\mf\> e d e | f\decr g a b | c1\!
}
\relative c' {
  c4\< d e f | g1\f | f4\mf\> e d e | f\decr g a b | c1\!
}

音符の途中で強弱を変化させたい場合、 << >> を導入し、 タイミングを合わせるための空白休符を用いると良い。 2行目の \override コマンドは、見やすさのため音符と音符との幅を広げるものであり、今回は無視して良い。

LilyPond: 音符の途中での強弱記号
\relative c' {
  \override Score.SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/32)
  c4\< d e f | << { g2 c | e c } { s4 s\ff\> s s | s s\p\< s s\! } >>
}
\relative c' {
  \override Score.SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/32)
  c4\< d e f | << { g2 c | e c } { s4 s\ff\> s s | s s\p\< s s\! } >>
}

和音の各音に強弱記号を表記することも文法上は可能であるが、出力には何も描かれない。

方向指示子

これまで、音符の末尾に付加する記号として、タイ・スラー・手動連桁・アーティキュレーション・強弱記号を学んだ。 LilyPondでは、これらのような音符に付加する種類の記号を。広義に「アーティキュレーション」と呼ぶことがある。

さて、このようなアーティキュレーションは、 方向指示子 によって、譜の上に表示するか、下に表示するかを明示することができる。 アーティキュレーションの直前に ^ を表記することで上側、 _ を表記することで下側に描かれる。 上下を明示せず、音符の位置などによって自動配置をさせる場合は - を付加するが、ほとんどの場合で省略可能である。

これまで学んだもので - が省略できないものは、 アーティキュレーション で扱った(狭義の)アーティキュレーションの簡略表記である。 すなわち、 ->-. などの先頭の - は、方向指示子が省略できないため表記されたものであり、 これらの向きを指定する際は、 -^_ に置き換える。

スラー・連桁・クレッシェンドのように、始点と終点を指定するものは、始点に指定した方向指示子が適用され、終点のものは無視される。

LilyPond: 方向指示子
\relative c' {
  c4^~ c c_~ c |
  c8^( d e f) c_( d e f) |
  c8^[ d e f] c_[ d e f] |
  c4^\accent c_\accent c^> c_> |
  c2^\f c_\p |
  c8^\< d e f\! c_\< d e f\! |
}
\relative c' {
  c4^~ c c_~ c |
  c8^( d e f) c_( d e f) |
  c8^[ d e f] c_[ d e f] |
  c4^\accent c_\accent c^> c_> |
  c2^\f c_\p |
  c8^\< d e f\! c_\< d e f\! |
}

\noBeam なども音符の末尾に付加するものであり、文法的には方向指示子を指定することができるが、効果は全く無い。

方向を指定しない場合、どのように配置されるかを設定する方法は、 direction-change で扱う。

練習問題