| [ < ] | [ > ] | [ << ] | [ 上へ ] | [ >> ] | [トップ] | [目次] | [インデックス] | [ ? ] |
@translationof Contexts and engravers
これまでに、コンテキストとエングラーバについて簡単に言及してきました。ここでは、これらのコンセプトをより詳細に見ていくことにします。なぜなら、これらは LilyPond 出力をうまく調節するのに重要だからです。
| 3.3.1 コンテキストの説明 | ||
| 3.3.2 コンテキストを作成する | ||
| 3.3.3 エングラーバの説明 | ||
| 3.3.4 コンテキスト プロパティを変更する | ||
| 3.3.5 エングラーバを追加 / 削除する |
| [ < ] | [ > ] | [ << ] | [ 上へ ] | [ >> ] | [トップ] | [目次] | [インデックス] | [ ? ] |
@translationof Contexts explained
音楽が譜刻されるとき、入力ファイルでははっきりとは現れてこない多くの記譜要素を出力に追加しなければなりません。例えば、以下の例で入力と出力を比較してください:
\relative { cis''4 cis2. | a4 a2. | }
この入力は内容がやや乏しいですが、出力では小節線、臨時記号、音部記号、拍子記号が追加されています。LilyPond が入力を解釈するとき、音楽情報は時系列に調べられます。これは楽譜を左から右へ読むのと似ています。入力を読み込んでいる間、プログラムは小節の境目となる場所と明示的な臨時記号を必要とするピッチを覚えています。この情報はいくつかのレベルで持続されなければなりません。例えば、臨時記号の効果は単一の譜表に制限されますが、小節線は楽譜全体に亘って同調されなければなりません。
LilyPond 内部では、これらの規則と情報ビットはコンテキストにグループ化されます。すでに Voice コンテキストを見てきました。他にも、Staff コンテキストと Score コンテキストがあります。コンテキストは、楽譜の階層構造を反映するために、階層構造になっています。例えば: Staff コンテキストは多くの Voice コンテキストを保持することができ、Score コンテキストは多くの Staff コンテキストを保持することができます。
各コンテキストは、いくつかの記譜オブジェクトを作成し、関連プロパティを維持しながら、いくつかの記譜規則を施行する責任があります。例えば、Voice コンテキストは臨時記号を作り出すかもしれず、そうした場合 Staff コンテキストはその小節の残りの部分で臨時記号を表示したり隠したりするための規則を維持します。
他の例としては、小節線の同調はデフォルトでは Score コンテキストが扱います。しかしながら、いくつかの音楽では小節線を同調させたくない場合もあります –
4/4 拍子と 3/4 拍子の多声の楽譜といった場合です。そのようなケースでは、Score と Staff コンテキストのデフォルト設定を変更しなければなりません。
非常にシンプルな楽譜では、コンテキストは暗黙的に作成され、あなたはそれらに気づく必要もありません。複数の譜表を持つようなより大きな楽曲では、あなたが必要としているだけの譜を手に入れられるよう、さらに、それらの譜が正しい順序で並ぶことを保証するために、コンテキストを明示的に作成する必要があります。特殊な記譜法を持つ楽曲を譜刻するには、通常は既存のコンテキストを変更します。あるいは完全に新しいコンテキストを定義することさえあります。
Score, Staff, Voice コンテキストに加えて、PianoStaff や ChoirStaff コンテキストといった譜表グループを制御するための、楽譜レベルと譜表レベルの間にあるコンテキストがあります。さらに、代替の譜表コンテキストとボイスコンテキストがあり、歌詞、打楽器、フレットボード (訳者: 弦楽器の一種。フレットでウィキぺディアを参照)、通奏低音 (数字付き低音、原文: figured bass) などのためのコンテキストがあります。
すべてのコンテキスト タイプの名前は 1 つ、あるいは複数の単語からなります。各単語の最初の文字は大文字であり、前の単語のすぐあとに次の単語が続きます。ハイフンやアンダスコアは使いません。つまり GregorianTranscriptionStaff といった具合です。
記譜法リファレンス: (notation)Contexts explained section ‘Contexts explained’ in Notation Reference
| [ < ] | [ > ] | [ << ] | [ 上へ ] | [ >> ] | [トップ] | [目次] | [インデックス] | [ ? ] |
@translationof Creating contexts
入力ファイルの中で、(\score コマンドによって導入される)
score ブロックは単一の音楽表記を保持しますが、それに関連する出力定義
(\layout ブロックと \midi ブロックのいずれかあるいは両方)
も保持することができます。通常、Score コンテキストは省略され、音楽表記の解釈が始まった時点で自動的に作成されます。
ボイスが 1 つだけで、譜も 1 つだけの楽譜では、Voice と Staff も省略して、自動的に作成させることができます。コンテキストは自動的に作成されるために放っておかれるかもしれません。しかしながら、より複雑な楽譜ではこれらを手ずから作成する必要があります。これらを作成する最も簡単なコマンドは \new です。これは音楽表記の前に置きます。例を挙げます:
\new type music-expression |
ここで、type はコンテキスト名です (Staff や Voice など)。このコマンドは新しいコンテキストを作成し、そのコンテキストの中にある
music-expression の解釈を開始します。
Note: 必須の最上位 Score コンテキストとして \new Score
を使わないでください。これは、\score ブロックの中にある音楽表記が解釈される時に自動的に作成されます。楽譜全体のコンテキスト プロパティのデフォルト値を変更するには、\layout ブロックの中で行います。コンテキスト プロパティを変更する を参照してください。
これまでに、新たに Staff と Voice コンテキストを作成する多くの実際的な例を見てきましたが、これらのコマンドが実際にどのように使用されるのかを覚えてもらうために、実際の音楽に注釈を付けた例を挙げます:
\score { % 複合音楽表記の開始点 << % 同時進行する譜の開始点 \time 2/4 \new Staff { % create RH staff \clef "treble" \key g \minor \new Voice { % 右手の音符用のボイスを作成します \relative { % 右手の音符の開始点 d''4 ees16 c8. | d4 ees16 c8. | } % 右手の音符の終了点 } % 右手のボイスの終了点 } % 右手の譜の終了点 \new Staff << % 左手の譜を作成します。2 つの同時進行するボイスを必要とします \clef "bass" \key g \minor \new Voice { % 左手のボイス 1 を作成します \voiceOne \relative { % 左手のボイス 1 の音符の開始点 g8 <bes d> ees, <g c> | g8 <bes d> ees, <g c> | } % 左手のボイス 1 の音符の終了点 } % 左手のボイス 1 の終了点 \new Voice { % 左手のボイス 2 を作成します \voiceTwo \relative { % 左手のボイス 2 の音符の開始点 g4 ees | g4 ees | } % 左手のボイス 2 の音符の終了点 } % 左手のボイス 2 の終了点 >> % 左手の譜の終了点 >> % 同時進行する譜セクションの終了点 } % 複合音楽表記の終了点
(波括弧 { や 2 重山括弧 << の中でブロックになっているすべての記述には括弧よりもスペースが 2 つ多いインデントを付けられていて、閉じ括弧には括弧の開始行と同じインデントを付けられているということに注意してください。これは必須ではありませんが、こうしておくと ‘unmatched backet’
(「括弧が一致しない」) エラーを大幅に減らすことができますので、強く推奨します。これにより、音楽の構造を簡単に見て取ることができ、一致していない括弧が明瞭になります。さらに、右手の譜はボイスを 1 つだけしか必要としないために波括弧によって囲まれた単一の音楽表記として作成されているのに対して、左手の譜は 2 つのボイスを必要とするために
2 重山括弧を使って作成されていることにも注意してください。)
また、\new コマンドはコンテキストに識別名を与えて、そのコンテキストを同じタイプの他のコンテキストと区別することを可能にするかもしれません:
\new type = id music-expression |
Staff, Voice などといったコンテキスト タイプの名前とそのようなコンテキスト タイプのインスタンスの名前
–これはユーザによって決定され、どのような文字の連なりにもなり得ます
– の違いに注意してください。数字とスペースも識別名に使用することができますが、その場合クォートで囲まなければなりません
– つまり、\new Staff = "MyStaff 1" music-expression
のようになります。識別名はコンテキストのあるインスタンスを参照するために使用されます。このことを歌詞についてのセクションで見てきました。ボイスとボーカル を参照してください。
記譜法リファレンス: (notation)Creating and referencing contexts section ‘Creating and referencing contexts’ in Notation Reference
| [ < ] | [ > ] | [ << ] | [ 上へ ] | [ >> ] | [トップ] | [目次] | [インデックス] | [ ? ] |
@translationof Engravers explained
LilyPond によって作成された楽譜上にあるすべての記号は
Engraver によって作り出されます。つまり、譜を譜刻するエングラーバがあり、符頭を譜刻するエングラーバ、符幹を譜刻するエングラーバ、連桁を譜刻するエングラーバなどなどです。そのようなエングラーバは 120 以上あります!幸いなことに、たいていの楽譜では数個のエングラーバについて知っていれば良く、簡単な楽譜ではまったく知らなくても大丈夫です。
エングラーバはコンテキストの中に存在し、そこで活動します。Metronome_mark_engraver などといった楽譜全体に影響を与えるエングラーバは最上位のコンテキスト – Score コンテキスト – で活動します。
Clef_engraver と Key_engraver は各 Staff コンテキストの中で見つかります – 譜が異なれば音部記号や調号も異なるかもしれないからです。
Note_heads_engraver と Stem_engraver は各 Voice コンテキスト – 最下位のコンテキスト – の中にあります。
各エングラーバはそれの機能に関連付けされているある特定のオブジェクトを処理し、機能に関連するプロパティを維持します。コンテキストに関連付けされているプロパティなどのようにこれらのプロパティは、エングラーバの処理を変更するためや、譜刻される楽譜の中にある要素の見た目を変更するために、変更されるかもしれません。
エングラーバはすべてそれらの機能を記述する単語から形成された複合名を持ちます。最初の単語の最初の文字は大文字であり、その後に続く単語はアンダスコアで連結されます。ですから、Staff_symbol_engraver には譜表の線を作成する責任があり、Clef_engraver は音部記号を描くことによってピッチの参照ポイントを決定、セットします。
ここに、最も一般的なエングラーバをいくつかそれらの機能とともに挙げます。たいていの場合、名前から簡単に機能を推測でき、その逆も成り立つことがわかるでしょう。
| エングラーバ | 機能 |
|---|---|
| Accidental_engraver | 臨時記号 (警告的臨時記号とアドバイス的な臨時記号を含む) を作成します。 |
| Beam_engraver | 連桁を譜刻します。 |
| Clef_engraver | 音部記号を譜刻します。 |
| Completion_heads_engraver | 小節線をまたがる音符を分割します。 |
| Dynamic_engraver | 強弱記号 (クレッシェンド、デクレッシェンド) と強弱テキスト (p や f など) を作成します。 |
| Forbid_line_break_engraver | 音楽要素がアクティブなままである場合に改行されることを防ぎます。(訳者: いわゆる禁則処理) |
| Key_engraver | 調号を作成します。 |
| Metronome_mark_engraver | メトロノーム記号を譜刻します。 |
| Note_heads_engraver | 符頭を譜刻します。 |
| Rest_engraver | 休符を譜刻します。 |
| Staff_symbol_engraver | (デフォルトで) 五線の譜表を譜刻します。 |
| Stem_engraver | 符幹と単一符幹のトレモロを作成します。 |
| Time_signature_engraver | 拍子記号を作成します。 |
後ほど、エングラーバのアクションを変更することによって LilyPond の出力がどのように変わるのかを見ていきます。
内部リファレンス: (internals)Engravers and Performers section ‘Engravers and Performers’ in Internals Reference
| [ < ] | [ > ] | [ << ] | [ 上へ ] | [ >> ] | [トップ] | [目次] | [インデックス] | [ ? ] |
@translationof Modifying context properties
コンテキストにはいくつかのコンテキスト プロパティを保持する責任があります。それらプロパティの多くは変更可能であり、変更することで入力の構文解釈に影響を与えて出力の見た目を変化させます。それらプロパティは \set コマンドによって変更されます。これは以下のような形で行います:
\set ContextName.propertyName = #value |
ontextName には通常、Score, Staff or Voice が入ります。これを省略する場合もあり、そのような場合は Voice であると見なされます。
コンテキスト プロパティの名前はハイフンやアンダスコアを使わずに連結された単語によって形成され、最初の単語を除いて単語の最初の文字は大文字になります。ここで、一般的に使用されるコンテキスト プロパティの例をいくつか挙げます。実際には、コンテキスト プロパティはもっとたくさんあります。
| プロパティ名 | タイプ | 機能 | 実際の値の例 |
|---|---|---|---|
| extraNatural | ブール値 | 真の場合、追加のナチュラル記号を臨時記号の前にセットします | #t, #f |
| currentBarNumber | 整数 | 小節番号をセットします | 50 |
| doubleSlurs | ブール値 | 真の場合、音符の上と下の両方にスラーを譜刻します | #t, #f |
| instrumentName | テキスト | 譜表の先頭に表示される名前をセットします | "Cello I" |
| fontSize | 実数 | フォント サイズを増減させます | 2.4 |
| stanza | テキスト | 歌詞の先頭に譜刻されるテキストをセットします | "2" |
ここでのブール値とは真 (#t) または偽 (#f) のどちらかであり、整数とは正の整数であり、実数とは正または負の小数点付きの数であり、テキストはダブル アポストロフィで囲まれます。ハッシュ記号 (#) が 2 つの異なる箇所で出現することに注意してください – ブール値での t や f の前と、\set での値の前です。そのため、\set の値にブール値を挿入する場合、ハッシュ記号が 2 つ必要になります – つまり ##t です。
これらのプロパティのいずれかをセットする前に、それらが操作するコンテキストはどれなのかを知る必要があります。これは明らかな場合もありますが、ややこしい場合もあります。間違ったコンテキストが指定された場合、エラー メッセージは表示されませんが、予期したアクションが起こりません。例えば、clefGlyph は間違いなく Staff コンテキストの中にきます。なぜなら、変更されるものは譜表に属する音部記号だからです。以下の例では、最初の譜表の音部記号は正しく表示されていますが、2 番目の譜表は正しくありません – ヘ音記号を指定したはずですが、デフォルトであるト音記号が表示されています – なぜなら、コンテキスト名を省略しているからです。
<< \new Staff \relative { \set Staff.clefGlyph = "clefs.C" c''2 c } \new Staff \relative { \set clefGlyph = "clefs.F" % Wrong! d'2 d } >>
デフォルトのコンテキスト名は Voice であることを思い出してください。このため、2 番目の \set コマンドは Voice コンテキストのプロパティ clefGlyph を “clefs.F” にセットしています。しかしながら、LilyPond は Voice コンテキストでそのようなプロパティを見つけ出さないため、何のアクションも起こしません。これはエラーではなく、ログ ファイルにエラー メッセージは残りません。
同様に、プロパティ名の綴りを間違えた場合もエラー メッセージは表示されず、予期したアクションが起こりません。実際のところ、\set コマンドを使って、存在するいかなるコンテキストにでも、いかなる (架空の) ‘プロパティ’ をセットすることができます。しかしながら、そのプロパティ名を LilyPond が知らない場合、何のアクションも起こしません。LilyPond 入力ファイルに対する特別なサポートを持ついくつかのテキスト エディタは、あなたがプロパティ名の上にマウスを持ってくるとバレット (テキストの先頭に付く小丸) 付きのプロパティ名を表示してそのプロパティの裏づけを行い (LilyPondTool を持つ JEdit)、あるいは未知のプロパティ名をハイライトします (ConTEXT)。そのような機能を持つエディタを使用していないのなら、内部リファレンスでプロパティ名をチェックすることを推奨します:
(internals)Tunable context properties section ‘Tunable context properties’ in Internals Reference や
(internals)Contexts section ‘Contexts’ in Internals Reference
を参照してください。
clefGlyph プロパティは Staff コンテキストの中にセットされた場合にのみ効果を持ちますが、いくつかのプロパティは複数のコンテキストの中にセットすることができます。例えば、プロパティ extraNatural はすべての譜に対してデフォルトで
##t (真) にセットされています。ある特定の Staff コンテキストでこれを ##f (偽) にセットした場合、その譜表の臨時記号にのみ適用されます。これを Score コンテキストにセットした場合、すべての譜に適用されます。
それでは、ある譜表の追加ナチュラル記号を消してみます:
<< \new Staff \relative { aeses'2 aes } \new Staff \relative { \set Staff.extraNatural = ##f aeses'2 aes } >>
さらに、すべての譜の追加ナチュラル記号を消します:
<< \new Staff \relative { aeses'2 aes } \new Staff \relative { \set Score.extraNatural = ##f aeses'2 aes } >>
他の例としては、clefTransposition が Score コンテキストにセットされた場合、直ちにすべての譜でのオクターブ表示を変更し、すべての譜に適用される新しいデフォルト値をセットします。
逆のことを行うコマンド \unset はコンテキストからプロパティを削除し、それによりたいていのプロパティはデフォルト値に戻ります。通常、望みのことを達成するために新たな \set コマンドを用いる場合、\unset は必要ありません。
\set と \unset コマンドは入力ファイルのどこにでも現れる可能性があり、そのコマンドが出現した時点から、楽譜の終わりまたはそのプロパティが再度 \set や \unset されるまで効果を持ちます。フォント サイズを変更してみましょう。それにより (他のものに加えて) 符頭のサイズが何段階か変更されます。変更は直前にセットされた値から行われるのではなく、デフォルト値から行われます。
\relative { c'4 d % 符頭を小さくします \set fontSize = #-4 e4 f | % 符頭を大きくします \set fontSize = #2.5 g4 a % デフォルトのサイズに戻します \unset fontSize b4 c | }
これまでにいくつかのタイプのプロパティ値をセットする方法を見てきました。整数と番号の前には常にハッシュ記号 # が付き、真と偽の値は
2 つのハッシュ記号を付けて ##t と ##f
によって指定されてるということに注意してください。テキスト プロパティは上で示したようにダブル クォーテーションによって囲まれます。しかしながら、後ほど、テキストは実際には非常に強力な \markup コマンドを用いたもっと一般的な方法で指定できるということを見ていきます。
\with を使ったコンテキスト プロパティの設定コンテキスト プロパティはコンテキストが作成されるときにセットされることもあるかもしれません。この設定がコンテキスト全体で保持される場合、この方法でプロパティ値を指定すると明瞭になります。コンテキストが \new コマンドで作成されるとき、その直後に
\with { .. } ブロックが続き、その中でプロパティ値がセットされるかもしれません。例えば、ある譜表全体で追加のナチュラルの表示を抑制しようとする場合、以下のように書きます:
\new Staff \with { extraNatural = ##f }
|
like this:
<< \new Staff { \relative { gisis'4 gis aeses aes } } \new Staff \with { extraNatural = ##f } { \relative { gisis'4 gis aeses aes } } >>
この方法でプロパティをセットした場合でも、\set
を使って動的に変更されたり、\unset を使ってデフォルト値に戻されたりするかもしれません。
fontSize プロパティの扱いは異なります。これが \with の中でセットされた場合、フォント サイズのデフォルト値をセットし直します。そのあとでフォント サイズが \set によって変更された場合、\with でセットされた新しいデフォルト値は
\unset fontSize コマンドによって元に戻されるかもしれません。
\context を使ったコンテキスト プロパティの設定コンテキスト プロパティの値は単一のコマンドによってある特定のタイプのコンテキストすべて – すべての Staff コンテキストなどのように
– にセットされるかもしれません。プロパティをセットするコンテキストのタイプは、Staff のようなそのコンテキストのタイプ名に接頭辞としてバック スラッシュを付けたもの
– \Staff のように – によって指定されます。プロパティ値をセットするための記述は上で紹介した \with ブロックの中の記述と同じです。この記述は \layout ブロック内部の \context ブロックの中に置かれます。各 \context ブロックは、その \layout ブロックが置かれている \score または \book ブロック全体を通じて、指定されたタイプのコンテキストすべてに対して効果を持ちます。ここで、記述方法を示すための例を挙げます:
\score { \new Staff { \relative { cisis''4 e d cis } } \layout { \context { \Staff extraNatural = ##t } } }
プロパティのオーバライドが score の中にあるどの譜にも適用されない場合:
\score { << \new Staff { \relative { gisis'4 gis aeses aes } } \new Staff { \relative { gisis'4 gis aeses aes } } >> \layout { \context { \Score extraNatural = ##f } } }
この方法でセットされたコンテキスト プロパティは、\with ブロックの中の記述によって、さらには、音楽表記の中に埋め込まれた
\set コマンドによって、ある特定のコンテキスト インスタンスでは上書きされるかもしれません。
記譜法リファレンス: (notation)Changing context default settings section ‘Changing context default settings’ in Notation Reference, (notation)The set command section ‘The set command’ in Notation Reference
内部リファレンス: (internals)Contexts section ‘Contexts’ in Internals Reference, (internals)Tunable context properties section ‘Tunable context properties’ in Internals Reference
| [ < ] | [ > ] | [ << ] | [ 上へ ] | [ >> ] | [トップ] | [目次] | [インデックス] | [ ? ] |
@translationof Adding and removing engravers
これまでに、コンテキストはそれぞれにいくつかのエングラーバを保持し、それぞれのエングラーバは出力のある特定部分 – 小節線、譜、符頭、符幹など – の譜刻に責任を持つということを見てきました。あるエングラーバがコンテキストから削除されると、それはもはや出力を行いません。これは出力を変更するための荒っぽい方法ですが、役に立つ場合もあります。
あるコンテキストからあるエングラーバを削除するには、前のセクションで見てたきたのと同様に、コンテキスト作成コマンドの直後に置く
\with コマンドを使用します。
例として、前のセクションで使用した例から譜表線を取り除いてみましょう。譜表線は Staff_symbol_engraver によって作り出されるということを思い出してください。
\new Staff \with { \remove "Staff_symbol_engraver" } \relative { c'4 d \set fontSize = #-4 % 符頭を小さくします e4 f | \set fontSize = #2.5 % 符頭を大きくします g4 a \unset fontSize % デフォルトのサイズに戻します b4 c | }
さらに、エングラーバは個々のコンテキストに追加されることもあります。エングラーバを追加するコマンドは以下のようなものです:
\consists Engraver_name,
これを \with ブロックの中に置きます。いくつかのボーカル譜は、その譜表の中にある音符の範囲を示すために、譜表の開始点に音域 (ambitus) を置きます –
(music-glossary)ambitus section ‘ambitus’ in Music Glossary を参照してください。音域は Ambitus_engraver によって作成され、普通は、これはどのコンテキストにも含まれません。これを Voice コンテキストに追加した場合、それはそのボイスのみから音域を計算します:
\new Staff << \new Voice \with { \consists "Ambitus_engraver" } { \relative { \voiceOne c''4 a b g } } \new Voice { \relative { \voiceTwo c'4 e d f } } >>
しかし、音域エングラーバを Staff コンテキストに追加した場合、そのエングラーバはその譜表上にあるすべてのボイスの中の音符から音域を計算します:
\new Staff \with { \consists "Ambitus_engraver" } << \new Voice { \relative { \voiceOne c''4 a b g } } \new Voice { \relative { \voiceTwo c'4 e d f } } >>
上の例では、個々のコンテキストにエングラーバを追加あるいは削除する方法を示しました。さらに、そのコマンドを \layout ブロックの中の適当なコンテキストの中に置くことによって、ある特定のタイプのコンテキストすべてにエングラーバを追加あるいは削除することもできます。例えば、4 つの譜表を持つ楽譜ですべての譜表に音域を表示する場合、以下のように記述します:
\score { << \new Staff { \relative { c''4 a b g } } \new Staff { \relative { c'4 a b g } } \new Staff { \clef "G_8" \relative { c'4 a b g } } \new Staff { \clef "bass" \relative { c4 a b g } } >> \layout { \context { \Staff \consists "Ambitus_engraver" } } }
また、コンテキスト プロパティの値も、上記と同様に
\context ブロックの中に \set を含ませることによって、ある特定のタイプのコンテキストすべてに対してセットすることができます。
記譜法リファレンス: (notation)Modifying context plug-ins section ‘Modifying context plug-ins’ in Notation Reference, (notation)Changing context default settings section ‘Changing context default settings’ in Notation Reference
Stem_engraver と Beam_engraver はそれらが描くオブジェクトを符頭にくっつけます。Note_heads_engraver が削除されると、符頭は作られず、それゆえ符幹も連桁も作られません。
| [ < ] | [ > ] | [ << ] | [ 上へ ] | [ >> ] |
This document was generated by gub on 7 月 13, 2020 using texi2html 1.82.
他の言語: English, català, česky, deutsch, español, français, magyar, italiano, nederlands
About automatic language selection.