@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*- @ignore Translation of GIT committish: d5647c5fd1c38d4124d2374725b923f4901f3661 When revising a translation, copy the HEAD committish of the version that you are working on. For details, see the Contributors' Guide, node Updating translation committishes.. @end ignore @c \version "2.17.6" @c Translators: Yoshiki Sawada @c Translation status: post-GDP @node 基礎となるコンセプト @chapter 基礎となるコンセプト @translationof Fundamental concepts チュートリアルではシンプルなテキスト ファイルから美しい楽譜を譜刻する方法を@c 見てきました。@c このセクションでは、同じように美しいがより複雑な楽譜を@c 作り出すのに必要とされるコンセプトとテクニックについて紹介します。 @menu * LilyPond 入力ファイルの仕組み:: * 音楽を保持するボイス:: * コンテキストとエングラーバ:: * テンプレートを拡張する:: @end menu @node LilyPond 入力ファイルの仕組み @section LilyPond 入力ファイルの仕組み @translationof How LilyPond input files work LilyPond の入力フォーマットは非常に自由な形式であり、@c 経験豊富なユーザにとってはファイルを構築する際の自由度が高いです。@c しかしながら、この自由度が新しいユーザにとっては混乱の元になります。@c このセクションではこの入力ファイルの構造についていくつか説明します。@c しかしながら、簡潔さを保つためにいくつかの詳細については@c 目をつぶるかもしれません。@c 入力フォーマットについての完全な記述は、@ruser{File structure} を@c 参照してください。 @menu * LilyPond ファイル構造の紹介:: * Score は (単一の) 複合的な音楽表記:: * 音楽表記をネストする:: * ネストされない括弧とタイ:: @end menu @node LilyPond ファイル構造の紹介 @subsection LilyPond ファイル構造の紹介 @translationof Introduction to the LilyPond file structure @cindex input format (入力フォーマット) @cindex file structure (ファイル構造) LilyPond 入力ファイルの基本例は以下のようなものです: @example \version @w{"@version{}"} \header @{ @} \score @{ @var{...複合音楽表記...} % すべての音楽がここに入ります! \layout @{ @} \midi @{ @} @} @end example @noindent 基本パターンは本当にさまざまです。@c しかしながら、この例はスタート地点として役に立ちます。 @funindex \book @funindex book @funindex \score @funindex score @cindex book @cindex score これまで、あなたが見てきた例では @code{\score @{@}} コマンドを@c 使用していませんでした。@c その理由は、あなたが LilyPond に与えたのが簡単な入力であった場合、@c LilyPond が自動的に追加のコマンドを付け加えるからです。@c LilyPond は以下のような入力: @example \relative c'' @{ c4 a d c @} @end example @noindent を以下を簡略表記したものとして扱います: @example \book @{ \score @{ \new Staff @{ \new Voice @{ \relative c'' @{ c4 a b c @} @} @} \layout @{ @} @} @} @end example 言い換えると、入力が保持しているのが単一の音楽表記である場合、@c LilyPond はまるでその音楽表記が上で示されたコマンドで包まれている@c かのように解釈します。 @cindex implicit contexts (暗黙のコンテキスト) @cindex contexts, implicit (暗黙のコンテキスト) @strong{一言警告!} LilyPond ドキュメントの中にある多くの例では、 @code{\new Staff} と @code{\new Voice} コマンドは暗黙的に作成されるために@c 省略されています。@c 簡単な例ではそれでうまくいきますが、より複雑な例の場合 -- 特に追加のコマンドが使用される場合 -- コンテキストの暗黙的な作成は予想外の結果となる可能性があります。@c 多分、予期しない余分な譜が作成されるでしょう。@c コンテキストを明示的に作成する方法は @ref{コンテキストとエングラーバ} で@c 説明されています。 @warning{数行以上の音楽を入力する場合、常に譜とボイスを明示的に@c 作成したほうが賢明です。} 今度は最初の例に戻って、@code{\score} コマンドについて検証します。@c 他のことはデフォルトのままにしておきます。 @code{\score} ブロックは常にただ 1 つの音楽表記を@c 保持していなければなりません。@c そして、その音楽表記は @code{\score} コマンドのすぐ後に@c 置かれなければなりません。@c 音楽表記は単一の音符である場合もありますし、以下のような@c 巨大な複合表記である場合もあるということを覚えておいてください: @example @{ \new StaffGroup << @var{...ワーグナーのオペラの楽譜全体がここに入ります...} >> @} @end example @noindent すべては @code{@{ ... @}} の内部にあるため、@c それは 1 つの音楽表記であるとカウントされます。 以前見てきたように、@code{\score} ブロックは他のものを含む可能性もあります。@c 例えば以下のように: @example \score @{ @{ c'4 a b c' @} \header @{ @} \layout @{ @} \midi @{ @} @} @end example @funindex \header @funindex header @funindex \layout @funindex layout @funindex \midi @funindex midi @cindex header (ヘッダ) @cindex layout (レイアウト) @cindex midi @noindent これら 3 つのコマンド -- @code{\header}, @code{\layout}, @code{\midi} -- は@c 特別なものであるということに注意してください: バックスラッシュ (@code{@bs{}}) で始まる他の多くのコマンドとは異なり、@c これらは音楽表記 @emph{ではなく}、何らかの音楽表記の一部でもありません。@c そのため、これらは @code{\score} ブロックの中に置くこともできますし、@c 外部に置くこともできます。@c 実際、これらのコマンドは一般的に @code{\score} ブロックの外側に置かれます -- 例えば、このセクションの最初の例のように @code{\header} は@c しばしば @code{\score} コマンドの上に置かれます。 以前は見なかった他の 2 つのコマンドは @code{\layout @{ @}} と @code{\midi @{ @}} です。@c それらが上記のように記述された場合、LilyPond はそれぞれ譜刻された楽譜と MIDI 出力を作り出します。@c それらは記譜法リファレンスの @ruser{Score layout} と @ruser{Creating MIDI files} で完全に記述されています。 @cindex scores, multiple (複数の Score) @cindex book block, implicit (暗黙の book ブロック) @cindex implicit book block (暗黙の book ブロック) @funindex \book @funindex book あなたは複数の @code{\score} ブロックを記述するかもしれません。@c それらはそれぞれ別々の楽譜として扱われますが、それらは結合されて@c 単一の出力ファイルに収められます。@c @code{\book} コマンドは必要ありません -- このコマンドは暗黙的に 1 つ@c 作成されます。@c しかしながら、あなたが 1 つの @code{.ly} ファイルから別々に分かれた@c 出力ファイルを作成しようとするのなら、@c それぞれのセクションを異なる出力ファイルに分けるために @code{\book} コマンドが使用されます: 各 @code{\book} ブロックは別々の出力ファイルを作り出します。 要約: 各 @code{\book} ブロックは別々の出力ファイル (つまり PDF ファイル) を@c 作成します。@c あなたが明示的に @code{\book} コマンドを記述しなかった場合、@c LilyPond は暗黙的に入力コードを @code{\book} ブロックで包み込みます。 各 @code{\score} ブロックは @code{\book} ブロック内部で@c 別々の音楽表記のチャンク (塊) となります。 @cindex layout block, effect of location (レイアウト ブロックの配置場所による影響) 各 @code{\layout} ブロックはそのブロックを含んでいる @code{\score} ブロックや @code{\book} ブロックに影響を与えます -- つまり、ある @code{\score} ブロックの内部にある @code{\layout} ブロックは@c その @code{\score} ブロックにだけ影響を与え、@code{\score} ブロックの@c 外部にある (それゆえ、明示的あるいは暗黙的に @code{\book} ブロックの中に@c ある) @code{\layout} ブロックはその @code{\book} ブロックの@c 中にあるすべての @code{\score} に影響を与えます。 詳細は、@ruser{Multiple scores in a book} を参照してください。 @cindex variables (変数) もう一つの重要な簡略表記は変数を定義することです。@c すべてのテンプレートがこれを使っています: @example melody = \relative c' @{ c4 a b c @} \score @{ \melody @} @end example LilyPond がこのファイルを見ると、@code{melody} の値 (イコール記号の後にあるすべて) を記憶し、@c @code{\melody} と記述された箇所すべてにその値を挿入します。@c 変数の名前について特別なことは何もありません -- 変数名は @code{melody}, @code{global}, @code{keyTime}, @code{pianorighthand} などとなります。@c 変数名はアルファベットだけで構成されていて、LilyPond コマンド名と@c 異なっている限りは、ほぼどんな名前でも使用できるということを@c 覚えておいてください。@c 詳細は、@ref{変数と関数を用いて入力の手間を省く} を参照してください。@c 変数名の厳密な制限については、@ruser{File structure} で詳述されています。 @seealso 入力フォーマットの完全な定義は、@ruser{File structure} を参照してください。 @node Score は (単一の) 複合的な音楽表記 @subsection Score は (単一の) 複合的な音楽表記 @translationof Score is a (single) compound musical expression @funindex \score @funindex score @cindex score @cindex contents of a score block (score ブロックの内容) @cindex score block, contents of (score ブロックの内容) @cindex compound music expression (複合音楽表記) @cindex music expression, compound (複合音楽表記) 前のセクション -- @ref{LilyPond ファイル構造の紹介} -- で LilyPond 入力ファイルの一般的な構造について見てきました。@c しかしながら、我々は最も重要な部分を飛ばしてきたようです: どうやって @code{\score} の後に記述するものを見つけ出すのでしょうか? 我々はそのことを完全には飛ばしてきませんでした。@c この大きな謎は簡単なことであり、謎でもなんでも@emph{ないのです}。@c 以下の行がこの謎についてすべてを説明しています: @quotation @emph{@code{\score} ブロックは 1 つの複合音楽表記で始まらなくてはなりません。} @end quotation @noindent 音楽表記と複合音楽表記が意味しているものを理解するには、チュートリアルの @ref{音楽表記についての説明} を読み返すと役に立つかもしれません。@c そこでは、小さな音楽表記 -- 音符から始めて、それから和音など -- から@c 大きな音楽表記を構築する方法を説明しています。@c 今度は、大きな音楽表記から始めます。@c 話を簡単にするために、例を歌手 1 人とピアノとします。@c このアンサンブルでは @code{StaffGroup} は必要ありません。@c @code{StaffGroup} はいくつかの譜をグループ化して左端に括弧を付けるだけですが、@c 我々は歌手 1 人とピアノ用の譜を必要としています。 @example \score @{ << \new Staff = "singer" << >> \new PianoStaff = "piano" << >> >> \layout @{ @} @} @end example ここで譜に名前を付けます -- @qq{singer} と @qq{piano} です。 ここで名前を付ける必要は必ずしもありませんが、@c 一見して各譜が何なのか見て取れるので名前を付けておくべきです。 @ignore @example \score @{ @{ % this brace begins the overall compound music expression % この波括弧は複合音楽表記全体の開始点です \new StaffGroup << @var{...insert the whole score of a Wagner opera in here...} @var{...ワーグナーのオペラの楽譜全体がここに入ります...} >> @} % this brace ends the overall compound music expression % この波括弧は複合音楽表記全体の終了点です \layout @{ @} @} @end example ワーグナーのオペラの長さはこのマニュアルの軽く 2 倍はあります。@c そのため、歌手とピアノだけを加えることにします。@c このアンサンブルでは複数の譜をまとめて左端に波括弧を付ける @code{StaffGroup} は必要ありません。@c そのため、それを削除します。@c しかしながら、歌手とピアノが@emph{必要}です。 @example \score @{ << \new Staff = "singer" << >> \new PianoStaff = "piano" << >> >> \layout @{ @} @} @end example @end ignore 歌手とピアノが同時進行であることを示すために @code{@{ ... @}} の代わりに @code{<< ... >>} を使用するということを思い出してください。@c こうすることで、ボーカル パートはピアノ パートの上に表示されます。@c 上の例で歌手の譜が一続きの音楽表記を保持するだけであるのなら @code{<< ... >>} を使う必要はありませんが、@c 譜が同時進行する複数の音楽表記 -- 例えば、同時進行する 2 つの声部や、声部と歌詞です -- を保持するのであれば必須となります。@c 我々は歌詞を持つ声部にしようとしているので、二重角括弧が必須です。@c 実際の音楽は後で付け加えるとして、@c ここではいくつかのダミーの音符と歌詞を配置してみます。@c 歌詞の入力の仕方を忘れてしまったのなら、@c @ref{簡単な歌曲を作成する} の @code{\addlyrics} を見直してください。 @lilypond[verbatim,quote,ragged-right] \score { << \new Staff = "singer" << \new Voice = "vocal" { c'1 } \addlyrics { And } >> \new PianoStaff = "piano" << \new Staff = "upper" { c'1 } \new Staff = "lower" { c'1 } >> >> \layout { } } @end lilypond 更に詳細を加えていきます。@c 歌手の譜は @code{Voice} (LilyPond では、この用語は音符のセットを@c 参照するものであり、必ずしもボーカルの音符であるわけではありません -- 例えば、一般にバイオリンは 1 つのボイスを演奏します) と歌詞を保持します。@c さらに、ピアノの譜表は上部譜表(右手) と下部譜 (左手) を保持します。 この段階で、音符の入力を開始することができます。@c @code{\new Voice = "vocal"} の後の波括弧の中に、以下を書き加えることができます: @example \relative c'' @{ r4 d8\noBeam g, c4 r @} @end example しかしながら、そのようにすると、@code{\score} セクションは非常に長くなり、@c 何が起こるのか理解しにくくなります。@c そのため、直接音符を付け加える代わりに変数を使用しましょう。@c 前のセクションで変数についての紹介を行いました。@c 覚えていますよね?@c @code{text} 変数の内容が間違いなく歌詞と解釈されるよう、@c 内容の前に @code{\lyricmode} を記述します。@c @code{\addlyrics} と同様に、これは入力モードを歌詞に切替間す。@c @code{\lyricmode} を記述しなければ、LilyPond は内容を音符と解釈しようとして@c エラーを引き起こします。 (他にもいくつかの入力モードがあります。@ruser{Input modes} を参照してください。) では、いくつかの音符を加えて、左手にはヘ音記号を加えます。@c これで、実際の楽譜の一部ができます: @lilypond[verbatim,quote,ragged-right] melody = \relative c'' { r4 d8\noBeam g, c4 r } text = \lyricmode { And God said, } upper = \relative c'' { 2~ } lower = \relative c { b2 e } \score { << \new Staff = "singer" << \new Voice = "vocal" { \melody } \addlyrics { \text } >> \new PianoStaff = "piano" << \new Staff = "upper" { \upper } \new Staff = "lower" { \clef "bass" \lower } >> >> \layout { } } @end lilypond @code{\score} セクションを書いている (あるいは読んでいる) とき、@c ゆっくりと注意深く進めてください。@c 外側のレベルから始めて、それから内部の細かな部分に取り組んでください。@c さらに、きちんとインデントを入れると非常に役に立ちます -- これは、テキスト エディタの中で同じレベルにある各要素は@c 同じ水平位置から始まるということを保証します。 @seealso 記譜法リファレンス: @ruser{Structure of a score} @node 音楽表記をネストする @subsection 音楽表記をネストする @translationof Nesting music expressions @cindex staves, temporary (一時的な譜) @cindex temporary staves (一時的な譜) @cindex ossias (オッシア) すべての譜を開始時に宣言することは必須ではありません。@c 譜はどこででも臨時に導入される可能性があります。@c これはオッシアを作成する際に特に有用です -- @rglos{ossia} を参照してください。@c ここで、3 つの音符に対して臨時に新しい譜を導入する方法を示す@c ちょっとした例を挙げます: @lilypond[verbatim,quote,ragged-right] \new Staff { \relative g' { r4 g8 g c4 c8 d | e4 r8 << { f8 c c } \new Staff { f8 f c } >> r4 | } } @end lilypond @noindent 音部記号のサイズは音部変更後に譜刻される音部記号のサイズ -- 行の開始点での音部記号よりも少し小さい -- と同じであるということに注意してください。@c これは行の途中で譜刻される音部記号全般に言えることです。 @cindex staff, positioning (譜表の配置) オッシアは以下のように譜の上に置かれるかもしれません: @lilypond[verbatim,quote,ragged-right] \new Staff = "main" { \relative g' { r4 g8 g c4 c8 d | e4 r8 << { f8 c c } \new Staff \with { alignAboveContext = #"main" } { f8 f c } >> r4 | } } @end lilypond この例は後で説明される @code{\with} を使用しています。@c このコマンドは単一の譜のデフォルトの振る舞いを変更することを意味します。@c ここでは、このコマンドは新しい譜をデフォルトの位置 (@qq{main} と@c 呼ばれている譜の下) ではなく、上に置くべきであると言っています。 @seealso オッシアはしばしば音部記号や拍子記号無しで描かれ、@c 通常は小さなフォントで描かれます。@c これらはまだ紹介されていない追加のコマンドを必要とします。@c @ref{オブジェクトのサイズ} と @ruser{オッシア譜} を参照してください。 @node ネストされない括弧とタイ @subsection ネストされない括弧とタイ @translationof On the un-nestedness of brackets and ties @cindex brackets, nesting (括弧をネストする) @cindex bracket types (括弧のタイプ) @cindex brackets, enclosing vs. marking (囲みの括弧 vs. マークの括弧) これまでに LilyPond への入力ファイルを書く際に使用する括弧と@c 括弧のような構成物にはいくつかの種類があるということを見てきました。@c これらは異なる規則 -- 最初は混乱を引き起こす可能性があります -- に従います。@c 規則についての説明を行う前に、@c 括弧と括弧のような構成物の種類を再確認してみましょう。 @c attempt to force this onto a new page @need 50 @multitable @columnfractions .3 .7 @headitem 括弧のタイプ @tab 機能 @item @code{@{ .. @}} @tab 一続きの音楽を囲みます @item @code{< .. >} @tab 和音となる音符を囲みます @item @code{<< .. >>} @tab 同時進行する音楽表記を囲みます @item @code{( .. )} @tab スラーの開始点と終了点を意味します @item @code{\( .. \)} @tab フレージング スラーの開始点と終了点を意味します @item @code{[ .. ]} @tab 手動連桁の開始点と終了点を意味します @end multitable こららに対して、音符の間や音符をまたがって線を生成する他の構文を@c 付け加えるべきです: タイ (チルド @code{~} によって記述されます)、@c 連符 (@code{\times x/y @{..@}} として記述されます)、@c グレイス ノート (@code{\grace@{..@}} として記述されます) です。 LilyPond 以外では、種類の異なる括弧が適切にネストされること -- @code{[ @{ ( .. ) @} ]} のように -- が一般的な使い方であり、@c 括弧の終わりの順序は正確に括弧の始まりの順序と逆になります。@c このことは上記の表で @q{囲みます} という言葉で記述されている 3 種類の括弧に対しては@strong{必須}となります -- それらは適切にネストされなければなりません。@c しかしながら、残りの括弧のような構成物 -- 上記の表で @q{意味します} という言葉で@c 記述されいるものと、タイ、連符で使用されるもの -- はいかなる括弧ともネストされる必要は @strong{ありません}。@c 実際、これらは何かを囲むという意味では括弧ではありません -- それらは単に何かが始まる場所、終わる場所を示すためのマークです。 そのため、例えばフレージング スラーは手動で挿入される連桁の前に開始して、@c その手動連桁の前に終わる可能性もあります -- たぶん音楽的では@c ないかもしれませんが、可能性はあります: @lilypond[quote,verbatim,fragment,ragged-right,relative=2] { g8\( a b[ c b\) a] } @end lilypond 一般に、種類の異なる括弧、括弧のような構成物、@c それに連符、タイ、装飾小音符の囲みは自由に組み合わせることができます。@c 以下の例では、連桁は連符の中にまで伸びていて (行 1)、@c スラーは連符の中にまで伸びていて (行 2)、@c 連桁とスラーが連符の中にまで伸びていて (行 3)、@c タイが 2 つの連符にまたがっていて、@c さらにフレージング スラーが連符の外にまで伸びています (行 3 と 4)。 @lilypond[quote,verbatim,ragged-right,relative=1] r16[ g \times 2/3 { r16 e'8] } g,16( a \times 2/3 { b16 d) e } g,8[( a \times 2/3 { b8 d) e~] } | \times 4/5 { e32\( a, b d e } a4.\) @end lilypond @node 音楽を保持するボイス @section 音楽を保持するボイス @translationof Voices contain music 歌手は歌うボイスを必要とし、@c LilyPond も歌う (演奏する) ボイスを必要とします。@c 楽譜の中にあるすべての楽器に対する実際の音楽はボイスの中に保持されます -- このことは LilyPond すべてのコンセプトの中での最も基礎的なことです。 @menu * 私はボイスを聴いている:: * ボイスを明示的にインスタンス化する:: * ボイスとボーカル:: @end menu @node 私はボイスを聴いている @subsection 私はボイスを聴いている @translationof I'm hearing Voices @cindex polyphony (多声) @cindex layers (レイヤ) @cindex multiple voices (複数のボイス) @cindex voices, multiple (複数のボイス) @cindex Voice context (Voice コンテキスト) @cindex context, Voice (Voice コンテキスト) @cindex simultaneous music (同時進行する音楽) @cindex music, simultaneous (同時進行する音楽) @cindex concurrent music (並列な音楽) @cindex music, concurrent (並列な音楽) @cindex voices vs. chords (ボイス vs. 和音) @cindex chords vs. voices (和音 vs. ボイス) LilyPond の楽譜の中で最も低レベルで、最も基礎的であり、最も内部にあるレイヤは @q{ボイス コンテキスト} または縮めて単に @q{ボイス} と呼ばれます。@c ボイスはときどき他の記譜法パッケージの中で @q{レイヤ} と呼ばれます。 実際、ボイス レイヤまたはコンテキストは音楽を保持することができる@c 唯一のものです。@c ボイス コンテキストが明示的に宣言されていない場合、この章の始めで@c 見てきたようにボイス コンテキストが 1 つ自動的に生成されます。@c オーボエなどといった楽器は同時に 1 つの音符だけを演奏できます。@c そのような楽器のために書かれた楽譜はボイスを 1 つだけを必要とします。@c ピアノのように同時に複数の音符を演奏することができる楽器はしばしば、@c それらが演奏することのできる同時進行の異なる音符やリズムを@c エンコードするために、複数のボイスを必要とします。 もちろん、単一のボイスは和音の中で多くの音符を保持することができます。@c それでは、複数のボイスが実際に必要とされるのはどんな場合なのでしょうか?@c まずは、4 つの和音を持つ以下の例を見てください: @lilypond[quote,verbatim,fragment,ragged-right,relative=1] \key g \major 4 @end lilypond この例は単一の山括弧からなる和音記号 @code{< ... >} を使って@c 表記することができ、必要とされるボイスは 1 つだけです。@c しかしながら、F シャープが A に移行する際に、F シャープは実際には 8 分音符であり、そのあとに 8 分音符の G が続くとしたらどうでしょうか?@c そのような場合、同時に開始されるが演奏時間が異なる 2 つの音符を@c 持つことになります: 4 分音符の D と 8 分音符の F シャープです。@c これらの音符をどのように記述すればよいのでしょうか?@c これらの音符は和音として記述することはできません。@c なぜなら、和音の中の音符はすべて同じ演奏時間でなければならないからです。@c そして、それらの音符は同時に開始しなければならないので、2 つのシーケンシャルな (連続した) 音符として記述することもできません。@c この場合は 2 つのボイスが必要となります。 上記のことが LilyPond 入力構文でどのように達成されるのかを見てみましょう。 @funindex << \\ >> @funindex \\ 1 つの譜に複数のボイスがある楽譜を入力する最も簡単な方法は、@c 各ボイスをシーケンスに (続けて) 入力し (各ボイスを @code{@{...@}} の中に入れます)、@c それらのボイスを @code{<<...>>} を使って同時進行するよう組み合わせます。@c さらに、各断片は、それぞれが別の断片であることを示すために、@c ダブル バックスラッシュ @code{\\} で区切られなければなりません。@c ダブル バックスラッシュが無ければ、すべての音符は単一のボイスの中に挿入され、@c 通常はエラーとなります。@c このテクニックは、大部分が同じ音で、時々短い部分で多声になる楽曲に特に@c 適しています。 以下では、上記の例の和音を 2 つのボイスに分け、経過音とスラーを付け加えています: @lilypond[quote,verbatim,ragged-right,relative=2] \key g \major % Voice "1" Voice "2" << { g4 fis8( g) a4 g } \\ { d4 d d d } >> @end lilypond この例では 2 番目のボイスの符幹が下向きになっていることに気付いてください。 今度はもう 1 つ簡単な例を挙げてみます: @lilypond[quote,verbatim,fragment,ragged-right,relative=2] \key d \minor % Voice "1" Voice "2" << { r4 g g4. a8 } \\ { d,2 d4 g } >> | << { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> | << { a2. r4 } \\ { fis2. s4 } >> | @end lilypond 各小節で別々に @code{<< \\ >>} 構造を使用する必要はありません。@c 各小節に音符が少ししかないような音楽の場合、@c このレイアウトはコードの可読性を良くするのに役立ちます。@c しかしながら、各小節に多くの音符がある場合、@c 以下のようにボイス毎に分離した方が良いかもしれません: @lilypond[quote,verbatim,ragged-right,relative=2] \key d \minor << { % Voice "1" r4 g g4. a8 | bes4 bes c bes | a2. r4 | } \\ { % Voice "2" d,2 d4 g | g4 g g8( a) g4 | fis2. s4 | } >> @end lilypond @cindex voices, naming (ボイスに名前を付ける) @cindex voices crossing brackets (括弧をまたがるボイス) @cindex slurs crossing brackets (括弧をまたがるスラー) @cindex ties crossing brackest (括弧をまたがるタイ) この例にあるボイスは 2 つだけです。@c しかしながら、これと同じ構成にもっと多くのバック スラッシュを@c 付け加えることによって、3 つかそれ以上のボイスを持たせることが可能です。 ボイス コンテキストは @code{"1"}, @code{"2"} などの名前を持ちます。@c 最初の 2 つのコンテキストは @emph{外側} のボイスをセットして、@c 上のボイスはコンテキスト @code{"1"}、下のボイスはコンテキスト @code{"2"} になります。@c 内側のボイスはコンテキスト @code{"3"} と @code{"4"} になります。@c これらの各コンテキストでは、スラー、符幹、タイ、強弱記号などの垂直方向の@c 向きは適切にセットされます。 @lilypond[quote,verbatim,fragment] \new Staff \relative c' { % Main voice c16 d e f % Voice "1" Voice "2" Voice "3" << { g4 f e } \\ { r8 e4 d c8 ~ } >> | << { d2 e2 } \\ { c8 b16 a b8 g ~ g2 } \\ { s4 b4 c2 } >> | } @end lilypond これらのボイスはすべてメインのボイスからは分かれています。@c メインのボイスの音符は@code{<< .. >>} 構造の外にあるからです。@c この @code{<< .. >>} 構造を @emph{同時進行構造} と呼ぶことにしましょう。@c スラーとタイは同じボイス内にある音符だけをつなぎます。@c そのため、スラーとタイは同時進行構造を出たり入ったりすることはありません。@c 反対に、同じ譜上にある個々の同時進行構造で、@c 平行の位置にあるボイスは同じボイスになります。@c さらに、その他のボイス関連プロパティは同時進行構造をまたがって持ち越されます。@c ここで、上記と同じ例で各ボイスに対して異なる色と符頭を割り当ててみます。@c あるボイスでの変更は他のボイスに影響を与えませんが、@c その後に続く同じボイス (訳者: 平行位置にあるボイス) で@c その変更が維持されることに注意してください。@c さらに、タイでつながれた音符は、同じボイスとなる 2 つの同時進行構造に@c またがって分かれるかもしれないということに注意してください。 @lilypond[quote,verbatim] \new Staff \relative c' { % Main voice c16 d e f << % Bar 1 { \voiceOneStyle g4 f e } \\ { \voiceTwoStyle r8 e4 d c8~ } >> | << % Bar 2 % Voice 1 continues { d2 e } \\ % Voice 2 continues { c8 b16 a b8 g~ g2 } \\ { \voiceThreeStyle s4 b c2 } >> | } @end lilypond @funindex \voiceOneStyle @funindex \voiceTwoStyle @funindex \voiceThreeStyle @funindex \voiceFourStyle @funindex \voiceNeutralStyle コマンド @code{\voiceXXXStyle} は主にこのマニュアルのような教育目的の@c ドキュメントで使用することを意図したものです。@c このコマンドは、各ボイスが容易に見分けられるように、符頭、符幹、連桁の色、@c それに符頭のスタイルを変更します。@c ボイス 1 は赤でダイアモンドの符頭を持つようにセットされ、@c ボイス 2 は青で三角形の符頭を、ボイス 3 は緑で×付きの円を、@c ボイス 4 (ここでは使用されていません) はマゼンダの×の符頭を持つように@c セットされます。@c @code{\voiceNeutralStyle} (これもここでは使用されていません) は@c 符頭のスタイルをデフォルトに戻します。@c 後ほど、ユーザがこのようなコマンドを作成するための方法を見ていきます。@c @ref{オブジェクトの可視性と色} と @ref{調整のために変数を使用する} を参照してください。 @cindex polyphony and relative note entry (多声と相対音符入力) @cindex relative note entry and polyphony (相対音符入力と多声) 多声部は @code{\relative @{ @}} ブロック内の音符の相対関係を変えません。@c 各音符は直前の音符あるいは直前の和音の最初の音符との相対関係で計算されます。@c そのため、以下の例では @example \relative c' @{ noteA << < noteB noteC > \\ noteD >> noteE @} @end example @noindent @code{noteB} は @code{noteA} との相対関係で決まり @* @code{noteC} は @code{noteA} ではなく @code{noteB} との相対関係で決まり @* @code{noteD} は @code{noteA} や @code{noteC} ではなく @code{noteC} との相対関係で決まり @* @code{noteE} は @code{noteA} ではなく @code{noteD} との相対関係で決まります。 各ボイスの中にある音符の音程がボイスごとに大きく離れている場合、@c 各ボイスの始めに @code{\relative} コマンドを置くと明瞭になるかもしれません: @example \relative c' @{ noteA ... @} << \relative c'' @{ < noteB noteC > ... @} @bs{}@bs{} \relative g' @{ noteD ... @} >> \relative c' @{ noteE ... @} @end example 最後に、もっと複雑な楽曲の中にあるボイスを分析してみましょう。@c 以下は、ショパンの Deux Nocturnes, Op 32 の 2 番の最初の 2 小節です。@c この例は、記譜を行うためのテクニックをいくつか示すために、@c 本章の後の方と次の章で使用されます。@c ですから、今はコードの中にある意味不明に見えるものは無視して、@c 音楽とボイスだけに注目してください -- 込み入った内容は後ほど説明します。 @c The following should appear as music without code @lilypond[quote,ragged-right] \new Staff \relative c'' { \key aes \major << % Voice one { c2 aes4. bes8 } \\ % Voice two { % Ignore these for now - they are explained in Ch 4 \once \override NoteColumn.ignore-collision = ##t 2 \once \override NoteColumn.force-hshift = #0.5 des2 } \\ % No voice three \\ % Voice four { \override NoteColumn.force-hshift = #0 aes'2 f4 fes } >> | 1 | } @end lilypond 符幹の向きはしばしば 2 つの同時進行する旋律ラインのつながりを示すために@c 使用されます。@c ここでは、一番上の音符の符幹はすべて上向きであり、@c 下の方にある音符の符幹はすべて下向きです。@c これは、複数のボイスが必要とされているということを示す最初の兆候です。 しかしながら、複数のボイスが実際に必要とされるのは、@c 同時に始まる音符が異なる演奏時間を持つ場合です。@c 最初の小節の 3 拍目を見てください。@c A フラットは付点 4 分音符であり、F は 4 分音符、D フラットは半音符です。@c これらの音符を和音として記述することはできません。@c なぜなら、和音の中の音符はすべて同じ演奏時間でなければならないからです。@c これらの音符をシーケンシャルな (連続する) 音符として記述することもできません。@c なぜなら、これらの音符は同時に始まらなければならないからです。@c この箇所では 3 つのボイスが必要となり、以下に示すように一般的には@c この小節全体を 3 つのボイスで記述します。@c そこでは、3 つのボイスに対して異なる符頭と色を割り当てています。@c もう一度繰り返しますが、この例のコードのことは後ほど説明しますので、@c 理解できないことは無視してください。 @c The following should appear as music without code @c The three voice styles should be defined in -init @lilypond[quote,ragged-right] \new Staff \relative c'' { \key aes \major << { % Voice one \voiceOneStyle c2 aes4. bes8 } \\ % Voice two { \voiceTwoStyle % Ignore these for now - they are explained in Ch 4 \once \override NoteColumn.ignore-collision = ##t 2 \once \override NoteColumn.force-hshift = #0.5 des2 } \\ % No Voice three (we want stems down) \\ % Voice four { \voiceThreeStyle \override NoteColumn.force-hshift = #0 aes'2 f4 fes } >> | 1 | } @end lilypond この音楽のコードをゼロから記述してみましょう。@c これから見ていくように、いくつかの問題に遭遇します。@c すでに学んだように、最初の小節の音楽を 3 つのボイスに分けて記述するために @code{<< \\ >>} 構造を使用します: @c ignore @lilypond[quote,verbatim,fragment,ragged-right] \new Staff \relative c'' { \key aes \major << { c2 aes4. bes8 } \\ { 2 des } \\ { aes'2 f4 fes } >> 1 } @end lilypond @cindex stem down (下向きの符幹) @cindex voices and stem directions (ボイスと符幹の向き) @cindex stem directions and voices (符幹の向きとボイス) @cindex stem up (上向きの符幹) 符幹の向きは自動的に割り当てられ、奇数番号のボイスが上向きの符幹、@c 偶数番号のボイスが下向きの符幹を持ちます。@c ボイス 1 と 2 の符幹は正しいのですが、@c ボイス 3 の符幹はここでは下向きになるべきです。@c ボイス 3 を省略して音楽をボイス 4 に記述することによって修正できます。@c ボイス 3 を省略するには、@code{\\} を 2 つ記述します: @lilypond[quote,verbatim,fragment,ragged-right] \new Staff \relative c'' { \key aes \major << % Voice one { c2 aes4. bes8 } \\ % Voice two { 2 des } \\ % Omit Voice three \\ % Voice four { aes'2 f4 fes } >> | 1 | } @end lilypond @noindent これにより符幹の向きが修正されました。@c しかしながら、音符の水平方向の配置が望んだとおりになっていません。@c 内側の音符の符頭や符幹が外側のボイスと衝突する場合 LilyPond は内側の@c 音符の位置をずらしますが、これはピアノ譜では不適切です。@c 他の状況でも、LilyPond が音符の位置をずらしても衝突が解決されない場合が@c あります。@c LilyPond は音符の水平方向の位置を調節するための手段をいくつか提供します。@c しかしながら、我々はまだこの問題を修正するための方法を見ていく準備が@c 整っていないので、この問題は後に残しておくことにします -- @ref{Fixing overlapping notation} の @code{force-hshift} プロパティ@c を参照してください。 @warning{歌詞、スパナ (スラー、タイ、強弱のヘアピン記号など) をボイスを@c @q{またいで} 作成することはできません。} @seealso 記譜法リファレンス: @ruser{複数のボイス} @node ボイスを明示的にインスタンス化する @subsection ボイスを明示的にインスタンス化する @translationof Explicitly instantiating voices @funindex \voiceOne @funindex voiceOne @funindex \voiceTwo @funindex voiceTwo @funindex \voiceThree @funindex voiceThree @funindex \voiceFour @funindex voiceFour @funindex \oneVoice @funindex oneVoice @funindex \new Voice @cindex voice contexts, creating (ボイス コンテキストを作成する) 多声部音楽を作成するためにボイス コンテキストを手動で @code{<< >>} ブロックの中に作成することもできます。@c 符幹、スラーなどの向きを示すために @code{\voiceOne} @dots{} @code{\voiceFour} を使用します。@c この手法は各ボイスを別々にして、より記述的な名前を与えることを可能にするため、@c 長い楽譜ではわかりやすいものになります。 本質的には、前のセクションで使用した構造 @code{<< \\ >>}: @example \new Staff @{ \relative c' @{ << @{ e4 f g a @} \\ @{ c,4 d e f @} >> @} @} @end example @noindent は以下と等価です: @example \new Staff << \new Voice = "1" @{ \voiceOne \relative c' @{ e4 f g a @} @} \new Voice = "2" @{ \voiceTwo \relative c' @{ c4 d e f @} @} >> @end example 上記の両方ともが以下の楽譜を生成します: @c The following example should not display the code @lilypond[ragged-right,quote] \new Staff << \new Voice = "1" { \voiceOne \relative c' { e4 f g a } } \new Voice = "2" { \voiceTwo \relative c' { c4 d e f } } >> @end lilypond @cindex voices, reverting to single (単一のボイスに戻す) @cindex reverting to a single voice (単一のボイスに戻す) @code{\voiceXXX} コマンドは符幹、スラー、タイ、アーティキュレーション、@c テキストの注釈、付点音符の付点、運指記号の向きをセットします。@c @code{\voiceOne} と @code{\voiceThree} はこれらのオブジェクトを上向きにし、@c 一方の @code{\voiceTwo} と @code{\voiceFour} は下向きにします。@c さらに、符頭の衝突を避ける必要がある場合、これらのコマンドは@c 各ボイスに対して水平方向のシフトを発生させます。@c コマンド @code{\oneVoice} は設定を単一のボイスの場合の通常値に戻します。 いくつかの簡単な例で、@code{\oneVoice}, @code{\voiceOne}, @code{\voiceTwo} が@c マークアップ、タイ、スラー、強弱記号に与える影響を見ていきましょう: @lilypond[quote,ragged-right,verbatim] \relative c' { % Default behavior or behavior after \oneVoice c4 d8~ d e4( f | g4 a) b-> c | } @end lilypond @lilypond[quote,ragged-right,verbatim] \relative c' { \voiceOne c4 d8~ d e4( f | g4 a) b-> c | \oneVoice c,4 d8~ d e4( f | g4 a) b-> c | } @end lilypond @lilypond[quote,ragged-right,verbatim] \relative c' { \voiceTwo c4 d8~ d e4( f | g4 a) b-> c | \oneVoice c,4 d8~ d e4( f | g4 a) b-> c | } @end lilypond 今度は、前のセクションの例を使って同じ多声部音楽のパッセージを 3 つの異なる方法で表記する例を見ていきます。@c それぞれ異なる状況で利点があります。 1 つはメイン ボイスに属する @code{<< >>} の内部に直接表記を記述する方法です (しかしながら、音符は @code{<< \\ >>} 構造の中に置かれては@strong{いません})。@c これはメイン ボイスの途中で追加のボイスが現れる場合に有用です。@c ここでは例にさらに調整を加えます。@c 赤のダイアモンド形の音符はメイン メロディが単一のボイス コンテキストに@c なっていて、その上にフレージング スラーを描くことができるということを@c 示しています。 @lilypond[quote,ragged-right,verbatim] \new Staff \relative c' { \voiceOneStyle % This section is homophonic c16^( d e f % Start simultaneous section of three voices << % Continue the main voice in parallel { g4 f e | d2 e) | } % Initiate second voice \new Voice { % Set stems, etc., down \voiceTwo r8 e4 d c8~ | c8 b16 a b8 g~ g2 | } % Initiate third voice \new Voice { % Set stems, etc, up \voiceThree s2. | s4 b c2 | } >> } @end lilypond @cindex nesting music expressions (音楽表記をネストさせる) @cindex nesting simultaneous constructs (同時進行構造をネストさせる) @cindex nesting voices (ボイスをネストさせる) @cindex voices, temporary (一時的なボイス) @cindex voices, nesting (ボイスをネストさせる) @lilypond[quote,ragged-right,verbatim] \new Staff \relative c' { c16^( d e f << { g4 f e | d2 e) | } \new Voice { \voiceTwo r8 e4 d c8~ | << { c8 b16 a b8 g~ g2 | } \new Voice { \voiceThree s4 b c2 | } >> } >> } @end lilypond @cindex spacing notes (空白音符) 新しいボイスを一時的にネストさせる手法は音楽のほんの一部だけが多声である場合に@c 有用です。@c しかしながら、楽譜全体が多声である場合、@c 一貫して複数のボイスを使用した方がわかりやすくなります。@c ボイスが無音の場所を飛ばすには以下のように空白音符を使用します: @lilypond[quote,ragged-right,verbatim] \new Staff \relative c' << % Initiate first voice \new Voice { \voiceOne c16^( d e f g4 f e | d2 e) | } % Initiate second voice \new Voice { % Set stems, etc, down \voiceTwo s4 r8 e4 d c8~ | c8 b16 a b8 g~ g2 | } % Initiate third voice \new Voice { % Set stems, etc, up \voiceThree s1 | s4 b c2 | } >> @end lilypond @subsubheading 音符列 @c Note columns @cindex note column (音符列) @cindex note collisions (音符の衝突) @cindex collisions, notes (音符の衝突) @cindex shift commands (シフト コマンド) @funindex \shiftOff @funindex shiftOff @funindex \shiftOn @funindex shiftOn @funindex \shiftOnn @funindex shiftOnn @funindex \shiftOnnn @funindex shiftOnnn 和音の中で小さな間隔で置かれる音符、@c あるいは異なるボイスで同時に発生する音符は、@c 符頭が重なるのを避けるために 2 列、時にはそれ以上の列に割り振られます。@c これらの列は音符列と呼ばれます。@c それぞれのボイスに対して別々の列が存在し、符頭の衝突が起こる場合は@c ボイスごとのシフトが適用されます。@c これは上の例でも見ることができます。@c 2 小節目でボイス 2 の C はボイス 1 の D との関係で右にシフトされていて、@c 最後の和音でボイス 3 の C も他の音符との関係で右にシフトされています。 @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn}, それに @code{\shiftOff} コマンドは、衝突が起こる場合に音符や和音をシフトさせる度合いを指定します。@c デフォルトでは、外側のボイス (通常はボイス 1 と 2) には @code{\shiftOff} が@c 指定されていて、内側のボイス (ボイス 3 と 4) には @code{\shiftOn} が@c 指定されています。@c シフトが適用される場合、ボイス 1 と 3 は右にシフトされ、ボイス 2 と 4は@c 左にシフトされます。 @code{\shiftOnn} と @code{\shiftOnnn} はさらなるシフト レベルを@c 定義するものであり、複雑な状況での衝突を解決するために@c 一時的に指定されるかもしれません -- @ref{実際の音楽からの例} を参照してください。 ある音符列は上向きの符幹を持つボイスからの音符 (あるいは和音) を 1 つだけ、@c 下向きの符幹を持つボイスからの音符 (あるいは和音) を 1 つだけ@c 保持することができます。@c 同じ向きの符幹を持つ 2 つのボイスからの音符が同じ位置に置かれ、両方のボイスに@c シフトが指定されていない、あるいは同じシフトが指定されている場合、@c エラー メッセージ @qq{Too many clashing note columns} (音符が多すぎて音符列で@c 衝突が起こっています) が生成されます。 @seealso 記譜法リファレンス: @ruser{複数のボイス} @node ボイスとボーカル @subsection ボイスとボーカル @translationof Voices and vocals 声楽には特別な困難があります: 2 つの表記 -- 音符と歌詞 -- を組み合わせる必要があります。 @funindex \new Lyrics @funindex \lyricsto @funindex lyricsto @funindex Lyrics @cindex Lyrics context, creating (歌詞コンテキストを作成する) @cindex lyrics, linking to voice (歌詞をボイスにリンクさせる) すでに @code{\addlyrics@{@}} コマンドを見てきました。@c これは簡単な楽譜であればうまく処理できます。@c しかしながら、この方法では限界があります。@c より複雑な音楽では、@code{\new Lyrics} を使って歌詞を @code{Lyrics} コンテキストに取り込み、ボイスに割り当ている名前を使って @code{\lyricsto@{@}} でその歌詞を明示的に音符にリンクさせます。 @lilypond[quote,verbatim] << \new Voice = "one" { \relative c'' { \autoBeamOff \time 2/4 c4 b8. a16 | g4. f8 | e4 d | c2 | } } \new Lyrics \lyricsto "one" { No more let | sins and | sor -- rows | grow. | } >> @end lilypond 歌詞は @code{Staff} コンテキスト@emph{ではなく} @code{Voice} コンテキストに@c リンクさせなければならないということに注意してください。@c このため、@code{Staff} コンテキストと @code{Voice} コンテキストを@c 明示的に作成する必要があります。 @cindex lyrics and beaming (歌詞と連桁) @cindex beaming and lyrics (連桁と歌詞) @funindex \autoBeamOff @funindex autoBeamOff LilyPond がデフォルトで使用する自動連桁は楽器だけの音楽では@c うまく機能しますが、歌詞を持つ音楽ではそれほどうまく機能しません。@c そこでは連桁はまったく必要ないか、歌詞のメリスマ (訳者注: 歌詞の 1 音節に@c 対して複数の音符を割り当てること) を示すために使用されるかのどちらかです。@c 上の例では、自動連桁を Off にするためにコマンド @code{\autoBeamOff} を@c 使用しています。 @funindex \new ChoirStaff @funindex ChoirStaff @funindex \lyricmode @funindex lyricmode @cindex vocal score structure (ボーカル譜構造) @cindex choir staff 以前使用した Judas Maccabæus からの例を再度使用して、@c より自由度の高い方法を示します。@c まず、楽譜の内容を変数に振り直し、音楽と歌詞を譜表構造から分離させます。@c さらに @code{ChoirStaff} ブラケットを導入します。@c 歌詞自体は、音楽ではなく歌詞として解釈されることを保証するために、@c @code{\lyricsmode} で導入されなければなりません。 @lilypond[quote,verbatim] global = { \key f \major \time 6/8 \partial 8 } SopOneMusic = \relative c'' { c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 } SopOneLyrics = \lyricmode { Let | flee -- cy flocks the | hills a -- dorn, __ } SopTwoMusic = \relative c' { r8 | r4. r4 c8 | a'8([ g)] f f([ e)] d | e8([ d)] c bes' } SopTwoLyrics = \lyricmode { Let | flee -- cy flocks the | hills a -- dorn, } \score { \new ChoirStaff << \new Staff << \new Voice = "SopOne" { \global \SopOneMusic } \new Lyrics \lyricsto "SopOne" { \SopOneLyrics } >> \new Staff << \new Voice = "SopTwo" { \global \SopTwoMusic } \new Lyrics \lyricsto "SopTwo" { \SopTwoLyrics } >> >> } @end lilypond これはすべての声楽譜の基本的な構造です。@c 必要に応じてさらに多くの譜が追加されるかもしれませんし、さらに多くのボイスが@c 譜に追加されるかもしれませんし、さらに多くの歌詞 (原文: verse、@c 各ボイスに対する歌詞、あるいは、歌詞の 1 番、2 番のことを指すと思われる) が@c 歌詞に追加されるかもしれません。@c 音楽部分が長くなりすぎた場合は、音楽を保持している変数を容易に別のファイルに@c 置くことができます。 @cindex hymn structure (賛美歌構造) @cindex SATB structure (SATB 構造) @cindex vocal scores with multiple verses (複数のボーカル譜) @cindex multiple vocal verses @cindex verses, multiple vocal ここで、例として 4 つの歌詞 -- それぞれが SATB (ソプラノ、アルト、テナー、バス) に対してセットされている -- を持つ賛美歌の最初の 1 行目を取り上げます。@c この歌の場合、4 つのパートに対する歌詞の言葉は同じです。@c 変数を使用して音楽記譜と歌詞の言葉を譜表構造から分離させている手法に@c 注意してください。@c さらに、 @q{keyTime} と呼ぶことにした変数が、2 つの譜で使用される@c いくつかのコマンドを保持するために、使用されていることにも注意してください。@c 他の例では、この変数はしばしば @q{global} と呼ばれます。 @lilypond[quote,verbatim] keyTime = { \key c \major \time 4/4 \partial 4 } SopMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g } AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 f e } TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 } BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 } VerseOne = \lyricmode { E -- | ter -- nal fa -- ther, | strong to save, } VerseTwo = \lyricmode { O | Christ, whose voice the | wa -- ters heard, } VerseThree = \lyricmode { O | Ho -- ly Spi -- rit, | who didst brood } VerseFour = \lyricmode { O | Tri -- ni -- ty of | love and pow'r } \score { \new ChoirStaff << \new Staff << \clef "treble" \new Voice = "Sop" { \voiceOne \keyTime \SopMusic } \new Voice = "Alto" { \voiceTwo \AltoMusic } \new Lyrics \lyricsto "Sop" { \VerseOne } \new Lyrics \lyricsto "Sop" { \VerseTwo } \new Lyrics \lyricsto "Sop" { \VerseThree } \new Lyrics \lyricsto "Sop" { \VerseFour } >> \new Staff << \clef "bass" \new Voice = "Tenor" { \voiceOne \keyTime \TenorMusic } \new Voice = "Bass" { \voiceTwo \BassMusic } >> >> } @end lilypond @seealso 記譜法リファレンス: @ruser{Vocal music} @c 声楽 @node コンテキストとエングラーバ @section コンテキストとエングラーバ @translationof Contexts and engravers これまでに、コンテキストとエングラーバについて簡単に言及してきました。@c ここでは、これらのコンセプトをより詳細に見ていくことにします。@c なぜなら、これらは LilyPond 出力をうまく調節するのに重要だからです。 @menu * コンテキストの説明:: * コンテキストを作成する:: * エングラーバの説明:: * コンテキスト プロパティを変更する:: * エングラーバを追加 / 削除する:: @end menu @node コンテキストの説明 @subsection コンテキストの説明 @translationof Contexts explained @cindex contexts explained (コンテキストの説明) 音楽が譜刻されるとき、入力ファイルでははっきりとは現れてこない多くの@c 記譜要素を出力に追加しなければなりません。@c 例えば、以下の例で入力と出力を比較してください: @lilypond[quote,verbatim,relative=2] cis4 cis2. | a4 a2. | @end lilypond この入力は内容がやや乏しいですが、出力では小節線、臨時記号、音部記号、@c 拍子記号が追加されています。@c LilyPond が入力を@emph{解釈}するとき、音楽情報は時系列に調べられます。@c これは楽譜を左から右へ読むのと似ています。@c 入力を読み込んでいる間、プログラムは小節の境目となる場所と明示的な臨時記号を@c 必要とするピッチを覚えています。@c この情報はいくつかのレベルで持続されなければなりません。@c 例えば、臨時記号の効果は単一の譜表に制限されますが、@c 小節線は楽譜全体に亘って同調されなければなりません。 LilyPond 内部では、これらの規則と情報ビットは@emph{コンテキスト}に@c グループ化されます。@c すでに @code{Voice} コンテキストを見てきました。@c 他にも、@code{Staff} コンテキストと @code{Score} コンテキストがあります。@c コンテキストは、楽譜の階層構造を反映するために、階層構造になっています。@c 例えば: @code{Staff} コンテキストは多くの @code{Voice} コンテキストを@c 保持することができ、@code{Score} コンテキストは@c 多くの @code{Staff} コンテキストを保持することができます。 @quotation @sourceimage{context-example,5cm,,} @end quotation 各コンテキストは、いくつかの記譜オブジェクトを作成し、関連プロパティを@c 維持しながら、いくつかの記譜規則を施行する責任があります。@c 例えば、@code{Voice} コンテキストは臨時記号を作り出すかもしれず、@c そうした場合 @code{Staff} コンテキストはその小節の残りの部分で臨時記号を@c 表示したり隠したりするための規則を維持します。 他の例としては、小節線の同調はデフォルトでは @code{Score} コンテキストが@c 扱います。@c しかしながら、いくつかの音楽では小節線を同調させたくない場合もあります -- 4/4 拍子と 3/4 拍子の多声の楽譜といった場合です。@c そのようなケースでは、@code{Score} と @code{Staff} コンテキストの@c デフォルト設定を変更しなければなりません。 非常にシンプルな楽譜では、コンテキストは暗黙的に作成され、@c あなたはそれらに気づく必要もありません。@c 複数の譜表を持つようなより大きな楽曲では、あなたが必要としているだけの譜を@c 手に入れられるよう、さらに、それらの譜が正しい順序で並ぶことを保証するために、@c コンテキストを明示的に作成する必要があります。@c 特殊な記譜法を持つ楽曲を譜刻するには、通常は既存のコンテキストを変更します。@c あるいは完全に新しいコンテキストを定義することさえあります。 @code{Score}, @code{Staff}, @code{Voice} コンテキストに加えて、@c @code{PianoStaff} や @code{ChoirStaff} コンテキストといった譜表グループを@c 制御するための、楽譜レベルと譜表レベルの間にあるコンテキストがあります。@c さらに、代替の譜表コンテキストとボイスコンテキストがあり、歌詞、打楽器、@c フレットボード (訳者: 弦楽器の一種。フレットでウィキぺディアを参照)、@c 通奏低音 (数字付き低音、原文: figured bass) などのためのコンテキストがあります。 すべてのコンテキスト タイプの名前は 1 つ、あるいは複数の単語からなります。@c 各単語の最初の文字は大文字であり、前の単語のすぐあとに次の単語が続きます。@c ハイフンやアンダスコアは使いません。@c つまり @code{GregorianTranscriptionStaff} といった具合です。 @seealso 記譜法リファレンス: @ruser{Contexts explained} @c コンテキストの説明 @node コンテキストを作成する @subsection コンテキストを作成する @translationof Creating contexts @funindex \new @funindex new @cindex new contexts (新しいコンテキスト) @cindex creating contexts (コンテキストを作成する) @cindex contexts, creating (コンテキストを作成する) 入力ファイルの中で、@code{\score} コマンドによって導入される score ブロックは単一の音楽表記とそれに関連する出力定義 (@code{\layout} ブロックあるいは @code{\midi} ブロック) を保持します。@c 通常、@code{Score} コンテキストは省略され、@c 音楽表記の解釈が始まった時点で自動的に作成されます。 ボイスが 1 つだけで、譜も 1 つだけの楽譜では、@c @code{Voice} と @code{Staff} も省略して、自動的に作成させることができます。@c コンテキストは自動的に作成されるために放っておかれるかもしれません。@c しかしながら、より複雑な楽譜ではこれらを手ずから作成する必要があります。@c これらを作成する最も簡単なコマンドは @code{\new} です。@c これは音楽表記の前に置きます。@c 例を挙げます: @example \new @var{type} @var{music-expression} @end example @noindent ここで、@var{type} はコンテキスト名です (@code{Staff} や @code{Voice} など)。@c このコマンドは新しいコンテキストを作成し、そのコンテキストの中にある @var{music-expression} の解釈を開始します。 @warning{必須の最上位 @code{Score} コンテキストとして @bs{}@code{new Score} を使わないでください。@c これは、@bs{}@code{score} ブロックの中にある音楽表記が解釈される時に@c 自動的に作成されます。@c 楽譜全体のコンテキスト プロパティのデフォルト値を変更するには、@c @bs{}@code{layout} ブロックの中で行います。@c @ref{コンテキスト プロパティを変更する} を参照してください。} これまでに、新たに @code{Staff} と @code{Voice} コンテキストを作成する多くの@c 実際的な例を見てきましたが、これらのコマンドが実際にどのように使用されるのかを@c 覚えてもらうために、実際の音楽に注釈を付けた例を挙げます: @c KEEP LY @lilypond[quote,verbatim,ragged-right] \score { % 複合音楽表記の開始点 << % 同時進行する譜の開始点 \time 2/4 \new Staff { % create RH staff \clef "treble" \key g \minor \new Voice { % 右手の音符用のボイスを作成します \relative c'' { % 右手の音符の開始点 d4 ees16 c8. | d4 ees16 c8. | } % 右手の音符の終了点 } % 右手のボイスの終了点 } % 右手の譜の終了点 \new Staff << % 左手の譜を作成します。2 つの同時進行するボイスを必要とします \clef "bass" \key g \minor \new Voice { % 左手のボイス 1 を作成します \voiceOne \relative g { % 左手のボイス 1 の音符の開始点 g8 ees, | g8 ees, | } % 左手のボイス 1 の音符の終了点 } % 左手のボイス 1 の終了点 \new Voice { % 左手のボイス 2 を作成します \voiceTwo \relative g { % 左手のボイス 2 の音符の開始点 g4 ees | g4 ees | } % 左手のボイス 2 の音符の終了点 } % 左手のボイス 2 の終了点 >> % 左手の譜の終了点 >> % 同時進行する譜セクションの終了点 } % 複合音楽表記の終了点 @end lilypond (波括弧 @code{@{} や 2 重山括弧 @code{<<} の中でブロックになっているすべての@c 記述には括弧よりもスペースが 2 つ多いインデントを付けられていて、@c 閉じ括弧には括弧の開始行と同じインデントを付けられているということに@c 注意してください。@c これは必須ではありませんが、こうしておくと @q{unmatched backet} (「括弧が一致しない」) エラーを大幅に減らすことができますので、@c 強く推奨します。@c これにより、音楽の構造を簡単に見て取ることができ、@c 一致していない括弧が明瞭になります。@c さらに、右手の譜はボイスを 1 つだけしか必要としないために波括弧によって@c 囲まれた単一の音楽表記として作成されているのに対して、@c 左手の譜は 2 つのボイスを必要とするために 2 重山括弧を使って作成されていることにも注意してください。) @cindex contexts, naming (コンテキストを名前を付ける) @cindex naming contexts (コンテキストを名前を付ける) また、@code{\new} コマンドはコンテキストに識別名を与えて、そのコンテキストを@c 同じタイプの他のコンテキストと区別することを可能にするかもしれません: @example \new @var{type} = @var{id} @var{music-expression} @end example @code{Staff}, @code{Voice} などといったコンテキスト タイプの名前と@c そのようなコンテキスト タイプのインスタンスの名前 --これはユーザによって決定され、どのような文字の連なりにもなり得ます -- の違いに注意してください。@c 数字とスペースも識別名に使用することができますが、@c その場合クォートで囲まなければなりません -- つまり、@code{\new Staff = "MyStaff 1" @var{music-expression}} のようになります。@c 識別名はコンテキストのあるインスタンスを参照するために使用されます。@c このことを歌詞についてのセクションで見てきました。@c @ref{ボイスとボーカル} を参照してください。 @seealso 記譜法リファレンス: @ruser{Creating contexts} @node エングラーバの説明 @subsection エングラーバの説明 @translationof Engravers explained @cindex engravers (エングラーバ) LilyPond によって作成された楽譜上にあるすべての記号は @code{Engraver} によって作り出されます。@c つまり、譜を譜刻するエングラーバがあり、符頭を譜刻するエングラーバ、@c 符幹を譜刻するエングラーバ、連桁を譜刻するエングラーバなどなどです。@c そのようなエングラーバは 120 以上あります!@c 幸いなことに、たいていの楽譜では数個のエングラーバについて知っていれば良く、@c 簡単な楽譜ではまったく知らなくても大丈夫です。 エングラーバはコンテキストの中に存在し、そこで活動します。@c @code{Metronome_mark_engraver} などといった楽譜全体に影響を与える@c エングラーバは最上位のコンテキスト -- @code{Score} コンテキスト -- で@c 活動します。 @code{Clef_engraver} と @code{Key_engraver} は各 @code{Staff} コンテキストの@c 中で見つかります -- 譜が異なれば音部記号や調号も異なるかもしれないからです。 @code{Note_heads_engraver} と @code{Stem_engraver} は@c 各 @code{Voice} コンテキスト -- 最下位のコンテキスト -- の中にあります。 各エングラーバはそれの機能に関連付けされているある特定のオブジェクトを処理し、@c 機能に関連するプロパティを維持します。@c コンテキストに関連付けされているプロパティなどのようにこれらのプロパティは、@c エングラーバの処理を変更するためや、譜刻される楽譜の中にある要素の見た目を@c 変更するために、変更されるかもしれません。 エングラーバはすべてそれらの機能を記述する単語から形成された複合名を持ちます。@c 最初の単語の最初の文字は大文字であり、その後に続く単語はアンダスコアで@c 連結されます。@c ですから、@code{Staff_symbol_engraver} には譜表の線を作成する責任があり、@c @code{Clef_engraver} は音部記号を描くことによってピッチの参照ポイントを@c 決定、セットします。 ここに、最も一般的なエングラーバをいくつかそれらの機能とともに挙げます。@c たいていの場合、名前から簡単に機能を推測でき、その逆も成り立つことが@c わかるでしょう。 @multitable @columnfractions .3 .7 @headitem エングラーバ @tab 機能 @item Accidental_engraver @tab 臨時記号 (警告的臨時記号とアドバイス的な臨時記号を含む) を作成します。 @item Beam_engraver @tab 連桁を譜刻します。 @item Clef_engraver @tab 音部記号を譜刻します。 @item Completion_heads_engraver @tab 小節線をまたがる音符を分割します。 @c The old Dynamic_engraver is deprecated. -jm @item New_dynamic_engraver @tab 強弱記号 (クレッシェンド、デクレッシェンド) と強弱テキスト (p や f など) を作成します。 @item Forbid_line_break_engraver @tab 音楽要素がアクティブなままである場合に改行されることを防ぎます。(訳者: いわゆる禁則処理) @item Key_engraver @tab 調号を作成します。 @item Metronome_mark_engraver @tab メトロノーム記号を譜刻します。 @item Note_heads_engraver @tab 符頭を譜刻します。 @item Rest_engraver @tab 休符を譜刻します。 @item Staff_symbol_engraver @tab (デフォルトで) 五線の譜表を譜刻します。 @item Stem_engraver @tab 符幹と単一符幹のトレモロを作成します。 @item Time_signature_engraver @tab 拍子記号を作成します。 @end multitable @smallspace 後ほど、エングラーバのアクションを変更することによって LilyPond の出力が@c どのように変わるのかを見ていきます。 @seealso 内部リファレンス: @rinternals{Engravers and Performers} @node コンテキスト プロパティを変更する @subsection コンテキスト プロパティを変更する @translationof Modifying context properties @cindex context properties (コンテキスト プロパティ) @cindex context properties, modifying (コンテキスト プロパティを変更する) @cindex modifying context properties (コンテキスト プロパティを変更する) @funindex \set @funindex set @funindex \unset @funindex unset コンテキストにはいくつかのコンテキスト プロパティを保持する責任があります。@c それらプロパティの多くは変更可能であり、変更することで入力の構文解釈に影響を@c 与えて出力の見た目を変化させます。@c それらプロパティは \set コマンドによって変更されます。@c これは以下のような形で行います: @example \set @emph{ContextName}.@emph{propertyName} = #@emph{value} @end example @emph{ontextName} には通常、@code{Score}, @code{Staff} or @code{Voice} が@c 入ります。@c これを省略する場合もあり、そのような場合は @code{Voice} であると@c 見なされます。 コンテキスト プロパティの名前はハイフンやアンダスコアを使わずに連結された@c 単語によって形成され、最初の単語を除いて単語の最初の文字は大文字になります。@c ここで、一般的に使用されるコンテキスト プロパティの例をいくつか挙げます。@c 実際には、コンテキスト プロパティはもっとたくさんあります。 @c attempt to force this onto a new page @need 50 @multitable @columnfractions .25 .15 .45 .15 @headitem プロパティ名 @tab タイプ @tab 機能 @tab 実際の値の例 @item extraNatural @tab ブール値 @tab 真の場合、追加のナチュラル記号を臨時記号の前にセットします @tab @code{#t}, @code{#f} @item currentBarNumber @tab 整数 @tab 小節番号をセットします @tab @code{50} @item doubleSlurs @tab ブール値 @tab 真の場合、音符の上と下の両方にスラーを譜刻します @tab @code{#t}, @code{#f} @item instrumentName @tab テキスト @tab 譜表の先頭に表示される名前をセットします @tab @code{"Cello I"} @item fontSize @tab 実数 @tab フォント サイズを増減させます @tab @code{2.4} @item stanza @tab テキスト @tab 歌詞の先頭に譜刻されるテキストをセットします @tab @code{"2"} @end multitable @noindent ここでのブール値とは真 (@code{#t}) または偽 (@code{#f}) の@c どちらかであり、整数とは正の整数であり、実数とは正または負の小数点付きの@c 数であり、テキストはダブル アポストロフィで囲まれます。@c ハッシュ記号 (@code{#}) が 2 つの異なる箇所で出現することに@c 注意してください -- ブール値での @code{t} や @code{f} の前と、@c @code{@bs{}set} での@emph{値}の前です。@c そのため、@code{@bs{}set} の値にブール値を挿入する場合、ハッシュ記号が 2 つ@c 必要になります -- つまり @code{##t} です。 @cindex properties operating in contexts (コンテキスト内でのプロパティの操作) @cindex setting properties within contexts (コンテキスト内部のプロパティを設定する) これらのプロパティのいずれかをセットする前に、それらが操作するコンテキストは@c どれなのかを知る必要があります。@c これは明らかな場合もありますが、ややこしい場合もあります。@c 間違ったコンテキストが指定された場合、エラー メッセージは表示されませんが、@c 予期したアクションが起こりません。@c 例えば、@code{instrumentName} は間違いなく @code{Staff} コンテキストの中に@c きます。@c なぜなら、このプロパティが名前を付けるのは譜表だからです。@c 以下の例では、最初の譜表には名前が付けられていますが、2 番目の譜表には@c 付けられていません。@c なぜなら、コンテキスト名を省略しているからです。 @lilypond[quote,verbatim,ragged-right] << \new Staff \relative c'' { \set Staff.instrumentName = #"Soprano" c2 c } \new Staff \relative c' { \set instrumentName = #"Alto" % Wrong! d2 d } >> @end lilypond デフォルトのコンテキスト名は @code{Voice} であることを思い出してください。@c このため、2 番目の @code{@bs{}set} コマンドは @code{Voice} コンテキストの@c プロパティ @code{instrumentName} を @qq{Alto} にセットしています。@c しかしながら、LilyPond は @code{Voice} コンテキストでそのようなプロパティを@c 見つけ出さないため、何のアクションも起こしません。@c これはエラーではなく、ログ ファイルにエラー メッセージは残りません。 同様に、プロパティ名の綴りを間違えた場合もエラー メッセージは表示されず、@c 予期したアクションが起こりません。@c 実際のところ、@code{@bs{}set} コマンドを使って、存在するいかなる@c コンテキストにでも、いかなる (架空の) @q{プロパティ} を@c セットすることができます。@c しかしながら、そのプロパティ名を LilyPond が知らない場合、@c 何のアクションも起こしません。@c LilyPond 入力ファイルに対する特別なサポートを持つ@c いくつかのテキスト エディタは、あなたがプロパティ名の上にマウスを@c 持ってくるとバレット (テキストの先頭に付く小丸) 付きのプロパティ名を表示して@c そのプロパティの裏づけを行い (LilyPondTool を持つ JEdit)、@c あるいは未知のプロパティ名をハイライトします (ConTEXT)。@c そのような機能を持つエディタを使用していないのなら、内部リファレンスで@c プロパティ名をチェックすることを推奨します: @rinternals{Tunable context properties} や @rinternals{Contexts} を参照してください。 @code{instrumentName} プロパティは @code{Staff} コンテキストの中に@c セットされた場合にのみ効果を持ちますが、いくつかのプロパティは複数の@c コンテキストの中にセットすることができます。@c 例えば、プロパティ @code{extraNatural} はすべての譜に対してデフォルトで @code{##t} (真) にセットされています。@c ある特定の @code{Staff} コンテキストでこれを @code{##f} (偽) に@c セットした場合、その譜表の臨時記号にのみ適用されます。@c これを @code{Score} コンテキストにセットした場合、すべての譜に適用されます。 それでは、ある譜表の追加ナチュラル記号を消してみます: @lilypond[quote,verbatim,ragged-right] << \new Staff \relative c'' { aeses2 aes } \new Staff \relative c'' { \set Staff.extraNatural = ##f aeses2 aes } >> @end lilypond @noindent さらに、すべての譜の追加ナチュラル記号を消します: @lilypond[quote,verbatim,ragged-right] << \new Staff \relative c'' { aeses2 aes } \new Staff \relative c'' { \set Score.extraNatural = ##f aeses2 aes } >> @end lilypond 他の例としては、@code{clefOctavation} が @code{Score} コンテキストに@c セットされた場合、直ちにすべての譜でのオクターブの値を変更し、すべての譜に@c 適用される新しいデフォルト値をセットします。 逆のことを行うコマンド @code{\unset} はコンテキストからプロパティを@c 削除し、それによりたいていのプロパティはデフォルト値に戻ります。@c 通常、望みのことを達成するために新たな @code{\set} コマンドを@c 用いる場合、@code{\unset} は必要ありません。 @code{\set} と @code{\unset} コマンドは入力ファイルのどこにでも@c 現れる可能性があり、そのコマンドが出現した時点から、楽譜の終わりまたは@c そのプロパティが再度 @code{\set} や @code{\unset} されるまで効果を@c 持ちます。@c フォント サイズを変更してみましょう。@c それにより (他のものに加えて) 符頭のサイズが何段階か変更されます。@c 変更は直前にセットされた値から行われるのではなく、デフォルト値から行われます。 @c KEEP LY @lilypond[quote,verbatim,ragged-right,relative=1] c4 d % 符頭を小さくします \set fontSize = #-4 e4 f | % 符頭を大きくします \set fontSize = #2.5 g4 a % デフォルトのサイズに戻します \unset fontSize b4 c | @end lilypond これまでにいくつかのタイプのプロパティ値をセットする方法を見てきました。@c 整数と番号の前には常にハッシュ記号 @code{#} が付き、真と偽の値は 2 つのハッシュ記号を付けて @code{##t} と @code{##f} によって指定されてるということに注意してください。@c テキスト プロパティは上で示したようにダブル クォーテーションによって@c 囲まれます。@c しかしながら、後ほど、テキストは実際には非常に強力な @code{\markup} コマンドを@c 用いたもっと一般的な方法で指定できるということを見ていきます。 @subsubheading @code{\with} を使ったコンテキスト プロパティの設定 @c Setting context properties with @code{\with} @funindex \with @funindex with @cindex context properties, setting with \with (\with でコンテキスト プロパティを設定する) コンテキスト プロパティはコンテキストが作成されるときに@c セットされることもあるかもしれません。@c この設定がコンテキスト全体で保持される場合、この方法でプロパティ値を@c 指定すると明瞭になります。@c コンテキストが @code{@bs{}new} コマンドで作成されるとき、その直後に @code{@bs{}with @{ .. @}} ブロックが続き、その中でプロパティ値が@c セットされるかもしれません。@c 例えば、ある譜表全体で追加のナチュラルの表示を抑制しようとする場合、@c 以下のように書きます: @example \new Staff \with @{ extraNatural = ##f @} @end example @noindent like this: @lilypond[quote,verbatim,ragged-right] << \new Staff { \relative c'' { gisis4 gis aeses aes } } \new Staff \with { extraNatural = ##f } { \relative c'' { gisis4 gis aeses aes } } >> @end lilypond この方法でプロパティをセットした場合でも、@code{\set} を使って動的に変更されたり、@c @code{\unset} を使ってデフォルト値に戻されたりするかもしれません。 @cindex fontSize, default and setting (fontSize のデフォルトと設定) @code{fontSize} プロパティの扱いは異なります。@c これが @code{\with} の中でセットされた場合、フォント サイズの@c デフォルト値をセットし直します。@c そのあとでフォント サイズが @code{\set} によって変更された場合、@c @code{\with} でセットされた新しいデフォルト値は @code{\unset fontSize} コマンドによって元に戻されるかもしれません。 @subsubheading @code{\context} を使ったコンテキスト プロパティの設定 @c Setting context properties with @code{\context} @cindex context properties, setting with \context (\context でコンテキスト プロパティを設定する) @funindex \context @funindex context コンテキスト プロパティの値は単一のコマンドによってある特定のタイプの@c コンテキスト@emph{すべて} -- すべての @code{Staff} コンテキストなどのように -- にセットされるかもしれません。@c プロパティをセットするコンテキストのタイプは、@code{Staff} のような@c そのコンテキストのタイプ名に接頭辞としてバック スラッシュを付けたもの -- @code{\Staff} のように -- によって指定されます。@c プロパティ値をセットするための記述は上で紹介した @code{\with} ブロックの中の@c 記述と同じです。@c この記述は @code{\layout} ブロック内部の @code{\context} ブロックの中に@c 置かれます。@c 各 @code{\context} ブロックは、その @code{\layout} ブロックが@c 置かれている @code{\score} または @code{\book} ブロック全体を通じて、@c 指定されたタイプのコンテキストすべてに対して効果を持ちます。@c ここで、記述方法を示すための例を挙げます: @lilypond[verbatim,quote] \score { \new Staff { \relative c'' { cisis4 e d cis } } \layout { \context { \Staff extraNatural = ##t } } } @end lilypond プロパティのオーバライドが score の中にあるどの譜にも適用されない場合: @lilypond[quote,verbatim] \score { << \new Staff { \relative c'' { gisis4 gis aeses aes } } \new Staff { \relative c'' { gisis4 gis aeses aes } } >> \layout { \context { \Score extraNatural = ##f } } } @end lilypond @noindent この方法でセットされたコンテキスト プロパティは、@code{\with} ブロックの@c 中の記述によって、さらには、音楽表記の中に埋め込まれた @code{\set} コマンドによって、ある特定のコンテキスト インスタンスでは@c 上書きされるかもしれません。 @seealso 記譜法リファレンス: @ruser{Changing context default settings}, @ruser{The set command} 内部リファレンス: @rinternals{Contexts}, @rinternals{Tunable context properties} @node エングラーバを追加 / 削除する @subsection エングラーバを追加 / 削除する @translationof Adding and removing engravers @cindex engravers, adding (エングラーバを追加する) @cindex adding engravers (エングラーバを追加する) @cindex engravers, removing (エングラーバを削除する) @cindex removing engravers (エングラーバを削除する) @funindex \consists @funindex consists @funindex \remove @funindex remove これまでに、コンテキストはそれぞれにいくつかのエングラーバを保持し、@c それぞれのエングラーバは出力のある特定部分 -- 小節線、譜、符頭、符幹など -- の譜刻に責任を持つということを見てきました。@c あるエングラーバがコンテキストから削除されると、それはもはや出力を行いません。@c これは出力を変更するための荒っぽい方法ですが、役に立つ場合もあります。 @subsubheading 単一のコンテキストの変更 @c Changing a single context あるコンテキストからあるエングラーバを削除するには、前のセクションで@c 見てたきたのと同様に、コンテキスト作成コマンドの直後に置く @code{\with} コマンドを使用します。 例として、前のセクションで使用した例から譜表線を取り除いてみましょう。@c 譜表線は @code{Staff_symbol_engraver} によって作り出されるということを@c 思い出してください。 @c KEEP LY @lilypond[quote,verbatim,ragged-right] \new Staff \with { \remove "Staff_symbol_engraver" } \relative c' { c4 d \set fontSize = #-4 % 符頭を小さくします e4 f | \set fontSize = #2.5 % 符頭を大きくします g4 a \unset fontSize % デフォルトのサイズに戻します b4 c | } @end lilypond @cindex ambitus engraver (音域エングラーバ) さらに、エングラーバは個々のコンテキストに追加されることもあります。@c エングラーバを追加するコマンドは以下のようなものです: @code{\consists @var{Engraver_name}}, @noindent これを @code{\with} ブロックの中に置きます。@c いくつかのボーカル譜は、その譜表の中にある音符の範囲を示すために、@c 譜表の開始点に音域 (ambitus) を置きます -- @rglos{ambitus} を参照してください。@c 音域は @code{Ambitus_engraver} によって作成され、普通は、@c これはどのコンテキストにも含まれません。@c これを @code{Voice} コンテキストに追加した場合、それはそのボイスのみから@c 音域を計算します: @lilypond[quote,verbatim,ragged-right] \new Staff << \new Voice \with { \consists "Ambitus_engraver" } { \relative c'' { \voiceOne c4 a b g } } \new Voice { \relative c' { \voiceTwo c4 e d f } } >> @end lilypond @noindent しかし、音域エングラーバを @code{Staff} コンテキストに追加した場合、@c そのエングラーバはその譜表上にあるすべてのボイスの中の音符から音域を計算します: @lilypond[quote,verbatim,ragged-right] \new Staff \with { \consists "Ambitus_engraver" } << \new Voice { \relative c'' { \voiceOne c4 a b g } } \new Voice { \relative c' { \voiceTwo c4 e d f } } >> @end lilypond @subsubheading 同じタイプのコンテキストをすべて変更する @c Changing all contexts of the same type @funindex \layout @funindex layout 上の例では、個々のコンテキストにエングラーバを追加あるいは削除する方法を@c 示しました。@c さらに、そのコマンドを @code{\layout} ブロックの中の適当なコンテキストの@c 中に置くことによって、ある特定のタイプのコンテキストすべてにエングラーバを@c 追加あるいは削除することもできます。@c 例えば、4 つの譜表を持つ楽譜ですべての譜表に音域を表示する場合、@c 以下のように記述します: @lilypond[quote,verbatim,ragged-right] \score { << \new Staff { \relative c'' { c4 a b g } } \new Staff { \relative c' { c4 a b g } } \new Staff { \clef "G_8" \relative c' { c4 a b g } } \new Staff { \clef "bass" \relative c { c4 a b g } } >> \layout { \context { \Staff \consists "Ambitus_engraver" } } } @end lilypond @noindent また、コンテキスト プロパティの値も、上記と同様に @code{\context} ブロックの中に @code{\set} を含ませることによって、@c ある特定のタイプのコンテキストすべてに対してセットすることができます。 @seealso 記譜法リファレンス: @ruser{Modifying context plug-ins}, @ruser{Changing context default settings} @c コンテキスト プラグインの変更, コンテキストのデフォルト設定の変更 @knownissues @code{Stem_engraver} と @code{Beam_engraver} はそれらが描くオブジェクトを@c 符頭にくっつけます。@c @code{Note_heads_engraver} が削除されると、符頭は作られず、@c それゆえ符幹も連桁も作られません。 @node テンプレートを拡張する @section テンプレートを拡張する @translationof Extending the templates あなたはチュートリアルを読み終えました。@c あなたはどのように楽譜を書くかを知っていて、@c 基礎となるコンセプトを理解しています。@c しかし、どうやったらあなたはあなたが望む譜を手に入れられるでしょうか?@c あなたにとって良いスタート地点となるかもしれない多くのテンプレートがあります (@ref{テンプレート} を参照してください)。@c しかしながら、あなたの望むものがそこでカバーされていなかったらどうしましょう?@c 続きを読んでください。 @menu * ソプラノとチェロ:: * 4 パート SATB ボーカル譜:: * ゼロから楽譜を構築する:: * 変数と関数を用いて入力の手間を省く:: * 楽譜とパート:: @end menu @node ソプラノとチェロ @subsection ソプラノとチェロ @translationof Soprano and cello @cindex template, modifying (テンプレートを変更する) @cindex modifying templates (テンプレートを変更する) あなたが最終的に望むものに最も近いテンプレートから始めてください。@c ソプラノとチェロのための楽譜を書きたいということにしましょう。@c ここでは、@q{音符と歌詞} (ソプラノ パート用) から始めることにします。 @example \version @w{"@version{}"} melody = \relative c' @{ \clef "treble" \key c \major \time 4/4 a4 b c d @} text = \lyricmode @{ Aaa Bee Cee Dee @} \score @{ << \new Voice = "one" @{ \autoBeamOff \melody @} \new Lyrics \lyricsto "one" \text >> \layout @{ @} \midi @{ @} @} @end example これにチェロ パートを追加していきます。@c @q{音符のみ} のテンプレートを見てみましょう: @example \version @w{"@version{}"} melody = \relative c' @{ \clef "treble" \key c \major \time 4/4 a4 b c d @} \score @{ \new Staff \melody \layout @{ @} \midi @{ @} @} @end example @code{\version} コマンドは 2 つも必要ありません。@c @code{melody} セクションは必要です。@c @code{\score} セクションは 2 つも必要ありません -- @code{\score} が 2 つあると、2 つのパートがばらばらになります。@c 2 つのパートをデュオのように一緒にしたいのです。@c @code{\score} セクションの中に @code{\layout} や @code{\midi} は 2 つも@c 必要ありません。 単に @code{melody} セクションをカット&コピーした場合、@c @code{melody} 定義が 2 つになります。@c これはエラーにはなりませんが、@ 2 番目の定義が両方の旋律で使われることになります。@c そのため、2 つの旋律を区別するためにリネームします。@c ソプラノ用のセクションを @code{sopranoMusic} と呼び、@c チェロ用のセクションを @code{celloMusic} と呼ぶことにします。@c リネームするときに、@code{text} を @code{sopranoLyrics} とりネームしましょう。@c これらのインスタンスをリネームすることも忘れないでください −- 初期定義 (@code{melody = \relative c' @{ } 部分) とその名前が@c 使われているところ (@code{\score セクションの中}) の両方です。 リネームする際に、チェロ パートの譜も変更しましょう −- 通常、チェロは低音部を使用します。@c さらに、チェロの音符を変えてみます。 @example \version @w{"@version{}"} sopranoMusic = \relative c' @{ \clef "treble" \key c \major \time 4/4 a4 b c d @} sopranoLyrics = \lyricmode @{ Aaa Bee Cee Dee @} celloMusic = \relative c @{ \clef "bass" \key c \major \time 4/4 d4 g fis8 e d4 @} \score @{ << \new Voice = "one" @{ \autoBeamOff \sopranoMusic @} \new Lyrics \lyricsto "one" \sopranoLyrics >> \layout @{ @} \midi @{ @} @} @end example これでうまくいくように見えますが、チェロ パートが楽譜に表示されません −- チェロ パートを @code{\score} セクションの中で使っていないからです。@c チェロ パートをソプラノ パートの下に表示させたいのなら、@c 以下をソプラノの譜の下に追加する必要があります: @example \new Staff \celloMusic @end example @noindent さらに、音楽を @code{<<} と @code{>>} で囲む必要もあります −- これは LilyPond に複数のもの (この場合は 2 つの @code{Stave}) が同時に起こるということを知らせます。@c @code{\score} は以下のようになります: @c Indentation in this example is deliberately poor @example \score @{ << << \new Voice = "one" @{ \autoBeamOff \sopranoMusic @} \new Lyrics \lyricsto "one" \sopranoLyrics >> \new Staff \celloMusic >> \layout @{ @} \midi @{ @} @} @end example @noindent これは少し見にくいです。@c インデントがきちんと入っていません。@c これは簡単に修正できます。@c ここで、完成したソプラノとチェロ用のテンプレートを挙げます。 @lilypond[quote,verbatim,ragged-right,addversion] sopranoMusic = \relative c' { \clef "treble" \key c \major \time 4/4 a4 b c d } sopranoLyrics = \lyricmode { Aaa Bee Cee Dee } celloMusic = \relative c { \clef "bass" \key c \major \time 4/4 d4 g fis8 e d4 } \score { << << \new Voice = "one" { \autoBeamOff \sopranoMusic } \new Lyrics \lyricsto "one" \sopranoLyrics >> \new Staff \celloMusic >> \layout { } \midi { } } @end lilypond @seealso 開始点となるテンプレートは付録 @q{テンプレート} で見つけることができます。@c @ref{単一の譜表} を参照してください。 @node 4 パート SATB ボーカル譜 @subsection 4 パート SATB ボーカル譜 @translationof Four-part SATB vocal score @cindex template, SATB (SATB テンプレート) @cindex SATB template (SATB テンプレート) Mendelssohn の Elijah や Handel の Messiah などのオーケストラ伴奏付きの 4 パート聖歌隊のために書かれたボーカル譜の多くは 4 つの譜上に@c 音符と歌詞を持ち、それぞれの譜は SATB (ソプラノ、アルト、テナー、バス) のうちの 1 つであり、その下にオーケストラ伴奏のピアノ譜が付きます。@c ここで、Handel の Messiah から例を挙げます: @c The following should appear as music without code @lilypond[quote,ragged-right] global = { \key d \major \time 4/4 } sopranoMusic = \relative c'' { \clef "treble" r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | } sopranoWords = \lyricmode { Wor -- thy | is the lamb | that was slain | } altoMusic = \relative a' { \clef "treble" r4 a2 a4 | fis4. fis8 a2 | g4 fis e2 | } altoWords = \sopranoWords tenorMusic = \relative c' { \clef "G_8" r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | } tenorWords = \sopranoWords bassMusic = \relative c' { \clef "bass" r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | } bassWords = \sopranoWords upper = \relative a' { \clef "treble" \global r4 2 4 | 4. 8 2 | 4 2 | } lower = \relative c, { \clef "bass" \global 4 2 4 | 4. 8 2 | 4 2 | } \score { << % combine ChoirStaff and PianoStaff in parallel \new ChoirStaff << \new Staff = "sopranos" << \set Staff.instrumentName = #"Soprano" \new Voice = "sopranos" { \global \sopranoMusic } >> \new Lyrics \lyricsto "sopranos" { \sopranoWords } \new Staff = "altos" << \set Staff.instrumentName = #"Alto" \new Voice = "altos" { \global \altoMusic } >> \new Lyrics \lyricsto "altos" { \altoWords } \new Staff = "tenors" << \set Staff.instrumentName = #"Tenor" \new Voice = "tenors" { \global \tenorMusic } >> \new Lyrics \lyricsto "tenors" { \tenorWords } \new Staff = "basses" << \set Staff.instrumentName = #"Bass" \new Voice = "basses" { \global \bassMusic } >> \new Lyrics \lyricsto "basses" { \bassWords } >> % end ChoirStaff \new PianoStaff << \set PianoStaff.instrumentName = #"Piano" \new Staff = "upper" \upper \new Staff = "lower" \lower >> >> } @end lilypond このレイアウトをそのまま提供するテンプレートはありません。@c 最も近いのは @q{SATB ボーカル譜と自動ピアノ伴奏譜} -- @ref{合唱} を@c 参照してください -- ですが、レイアウトを変更して、ボーカル パートから@c 自動的に生成されたものではないピアノ伴奏譜を付け加える必要があります。@c ボーカル パートのための音楽と歌詞を保持している変数はそのまま使えますが、@c ピアノ伴奏譜のための変数を付け加える必要があります。 テンプレートの @code{ChoirStaff} の中でコンテキストが出現する順序は上で@c 示したボーカル譜の順序と一致していません。@c そのため、コンテキストを再配置して、それぞれの歌詞が対応する譜表の@c すぐ下にくるようにします。@c すべてのボイスは @code{\voiceOne} -- これがデフォルトです -- に@c なるべきなので、@code{\voiceXXX} コマンドは削除すべきです。@c さらに、テノールに対してハ音記号 (中音部記号) を指定する必要があります。@c テンプレートの中で歌詞を指定する方法はまだ説明していませんので、@c 馴染みのある方法を使用する必要があります。@c さらに、それぞれの譜に名前を追加すべきです。 以上のことを @code{ChoirStaff} に対して行います: @example \new ChoirStaff << \new Staff = "sopranos" << \set Staff.instrumentName = #"Soprano" \new Voice = "sopranos" @{ \global \sopranoMusic @} >> \new Lyrics \lyricsto "sopranos" @{ \sopranoWords @} \new Staff = "altos" << \set Staff.instrumentName = #"Alto" \new Voice = "altos" @{ \global \altoMusic @} >> \new Lyrics \lyricsto "altos" @{ \altoWords @} \new Staff = "tenors" << \set Staff.instrumentName = #"Tenor" \new Voice = "tenors" @{ \global \tenorMusic @} >> \new Lyrics \lyricsto "tenors" @{ \tenorWords @} \new Staff = "basses" << \set Staff.instrumentName = #"Bass" \new Voice = "basses" @{ \global \bassMusic @} >> \new Lyrics \lyricsto "basses" @{ \bassWords @} >> % end ChoirStaff @end example 次にピアノ パートに取り掛からなければなりません。@c これは簡単です -- @q{ソロ ピアノ} テンプレートからピアノ パートを@c 引き抜いてくるだけです: @example \new PianoStaff << \set PianoStaff.instrumentName = #"Piano " \new Staff = "upper" \upper \new Staff = "lower" \lower >> @end example そして、@code{upper} と @code{lower} に変数定義を付け加えます。 @code{ChoirStaff} を @code{PianoStaff} の上に置きたいので、@c それらを山括弧を使って組み合わせなければなりません: @example << % combine ChoirStaff and PianoStaff one above the other \new ChoirStaff << \new Staff = "sopranos" << \new Voice = "sopranos" @{ \global \sopranoMusic @} >> \new Lyrics \lyricsto "sopranos" @{ \sopranoWords @} \new Staff = "altos" << \new Voice = "altos" @{ \global \altoMusic @} >> \new Lyrics \lyricsto "altos" @{ \altoWords @} \new Staff = "tenors" << \clef "G_8" % tenor clef \new Voice = "tenors" @{ \global \tenorMusic @} >> \new Lyrics \lyricsto "tenors" @{ \tenorWords @} \new Staff = "basses" << \clef "bass" \new Voice = "basses" @{ \global \bassMusic @} >> \new Lyrics \lyricsto "basses" @{ \bassWords @} >> % end ChoirStaff \new PianoStaff << \set PianoStaff.instrumentName = #"Piano" \new Staff = "upper" \upper \new Staff = "lower" \lower >> >> @end example これらすべてを組み合わせて、上の例の 3 小節分の音楽を付け加えます: @c KEEP LY @lilypond[quote,verbatim,ragged-right,addversion] global = { \key d \major \time 4/4 } sopranoMusic = \relative c'' { \clef "treble" r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | } sopranoWords = \lyricmode { Wor -- thy | is the lamb | that was slain | } altoMusic = \relative a' { \clef "treble" r4 a2 a4 | fis4. fis8 a2 | g4 fis fis2 | } altoWords = \sopranoWords tenorMusic = \relative c' { \clef "G_8" r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | } tenorWords = \sopranoWords bassMusic = \relative c' { \clef "bass" r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | } bassWords = \sopranoWords upper = \relative a' { \clef "treble" \global r4 2 4 | 4. 8 2 | 4 2 | } lower = \relative c, { \clef "bass" \global 4 2 4 | 4. 8 2 | 4 2 | } \score { << % ChoirStaff と PianoStaff を並行に組み合わせます \new ChoirStaff << \new Staff = "sopranos" << \set Staff.instrumentName = #"Soprano" \new Voice = "sopranos" { \global \sopranoMusic } >> \new Lyrics \lyricsto "sopranos" { \sopranoWords } \new Staff = "altos" << \set Staff.instrumentName = #"Alto" \new Voice = "altos" { \global \altoMusic } >> \new Lyrics \lyricsto "altos" { \altoWords } \new Staff = "tenors" << \set Staff.instrumentName = #"Tenor" \new Voice = "tenors" { \global \tenorMusic } >> \new Lyrics \lyricsto "tenors" { \tenorWords } \new Staff = "basses" << \set Staff.instrumentName = #"Bass" \new Voice = "basses" { \global \bassMusic } >> \new Lyrics \lyricsto "basses" { \bassWords } >> % ChoirStaff の終了 \new PianoStaff << \set PianoStaff.instrumentName = #"Piano " \new Staff = "upper" \upper \new Staff = "lower" \lower >> >> } @end lilypond @node ゼロから楽譜を構築する @subsection ゼロから楽譜を構築する @translationof Building a score from scratch @cindex template, writing your own (自分自身のテンプレートを記述する) @cindex example of writing a score (楽譜の書き方の例) @cindex writing a score, example (楽譜の書き方の例) @cindex score, example of writing (楽譜の書き方の例) LilyPond コードを書くことにある程度熟練した後、あなたはテンプレートの 1 つを@c 変更するよりもゼロから楽譜を構築するほうがより容易であることに@c 気づくかもしれません。@c さらに、あなたはこの方法であなたの好みのタイプの音楽に適したあなた自身の@c スタイルを開発することもできます。@c 例として、オルガン前奏曲のための楽譜を作成する手順を見てみましょう。 ヘッダ セクションから始めます。@c そこでタイトル、作曲者の名前などを記述し、それから任意の変数を定義し、@c 最後にスコア ブロックに取り掛かります。@c 以上のことを概要から始めて、その後に詳細を詰めていきます。 @emph{Jesu, meine Freude} -- これは 2 つの鍵盤とペダルを持つオルガンのために書かれたものです -- をベースとする Bach の前奏曲の最初の 2 小節を使います。@c このセクションの最後でこの音楽の最初の 2 小節を見ることができます。@c 上段鍵盤パートは 2 つのボイスを持ち、@c 下段鍵盤とペダルはそれぞれ 1 つのボイスを持ちます。@c そのため、4 つの音楽定義と、@c 拍子記号と調号を定義するための 1 つの音楽定義が必要となります: @example \version @w{"@version{}"} \header @{ title = "Jesu, meine Freude" composer = "J S Bach" @} keyTime = @{ \key c \minor \time 4/4 @} ManualOneVoiceOneMusic = @{ s1 @} ManualOneVoiceTwoMusic = @{ s1 @} ManualTwoMusic = @{ s1 @} PedalOrganMusic = @{ s1 @} \score @{ @} @end example ここでは、実際の音楽の代わりに空白音符 @code{s1} を使用しました。@c 実際の音楽は後で付け加えます。 次に、スコア ブロックで何をすべきなのかを見ていきましょう。@c 単純に望む譜表構造を反映させます。@c 通常、オルガン音楽は 3 つの譜で書かれます -- 2 つの鍵盤とペダルのための譜です。@c 鍵盤の譜はブレース (譜表の左端の波括弧) でまとめられているべきなので、@c それらに対して @code{PianoStaff} を使用する必要があります。@c 1 番目の鍵盤パートは 2 つのボイスを必要とし、2 番目の鍵盤パートは 1 つだけ@c ボイスを必要とします。 @example \new PianoStaff << \new Staff = "ManualOne" << \new Voice @{ \ManualOneVoiceOneMusic @} \new Voice @{ \ManualOneVoiceTwoMusic @} >> % ManualOne Staff コンテキストの終了 \new Staff = "ManualTwo" << \new Voice @{ \ManualTwoMusic @} >> % ManualTwo Staff コンテキストの終了 >> % PianoStaff コンテキストの終了 @end example 次にペダル オルガンのための譜表を付け加える必要があります。@c これは @code{PianoStaff} の下にきますが、@code{PianoStaff} と@c 同時進行でなければなりませんので、ペダル オルガンのための譜表と @code{PianoStaff} を山括弧で囲む必要があります。@c これを忘れるとエラーがログ ファイルに生成されます。@c このエラーはあなたが早かれ遅かれ遭遇する一般的なミスです!@c 生成されるエラーを確認するために、このセクションの最後にある例をコピーし、@c この山括弧を削除し、コンパイルしてみてください。 @example << % PianoStaff と Pedal Staff を同時進行させる必要があります \new PianoStaff << \new Staff = "ManualOne" << \new Voice @{ \ManualOneVoiceOneMusic @} \new Voice @{ \ManualOneVoiceTwoMusic @} >> % ManualOne Staff コンテキストの終了 \new Staff = "ManualTwo" << \new Voice @{ \ManualTwoMusic @} >> % ManualTwo Staff コンテキストの終了 >> % PianoStaff コンテキストの終了 \new Staff = "PedalOrgan" << \new Voice @{ \PedalOrganMusic @} >> >> @end example 2 番目の鍵盤パートとペダル オルガンの譜表は 1 つだけしか音楽表記を@c 保持しないため、それらに対して同時進行構造 @code{<< .. >>} を使う必要は@c 必ずしもありません。@c しかしながら、そうしても害はありませんし、@code{\new Staff} の後に常に@c 山括弧を置くというのは複数のボイスがある場合では推奨される良い習慣です。@c Voice はこれとは対照的に、あなたの音楽を連続して演奏すべきいくつかの変数に@c 分けてコード化する場合に Voice の後に波括弧 @code{@{ .. @}} を常に置くべきです。 この構造をスコア ブロックに付け加えて、インデントを調整しましょう。@c さらに、適切な音部記号を付け加え、@code{\voiceOne} と @code{\voiceTwo} を@c 使って上部譜の各ボイスで符幹、タイ、スラーの向きが正しくなるようにし、@c あらかじめ定義しておいた変数 @code{\keyTime} を使って拍子記号と調号を@c 各譜に挿入します。 @example \score @{ << % PianoStaff と Pedal Staff を同時進行させる必要があります \new PianoStaff << \new Staff = "ManualOne" << \keyTime % 調号と拍子記号をセットします \clef "treble" \new Voice @{ \voiceOne \ManualOneVoiceOneMusic @} \new Voice @{ \voiceTwo \ManualOneVoiceTwoMusic @} >> % ManualOne Staff コンテキストの終了 \new Staff = "ManualTwo" << \keyTime \clef "bass" \new Voice @{ \ManualTwoMusic @} >> % ManualTwo Staff コンテキストの終了 >> % PianoStaff コンテキストの終了 \new Staff = "PedalOrgan" << \keyTime \clef "bass" \new Voice @{ \PedalOrganMusic @} >> % PedalOrgan Staff の終了 >> @} % Score コンテキストの終了 @end example @cindex stretchability of staves (譜の伸縮性) @cindex staves, stretchability (譜の伸縮性) 上のオルガン譜のレイアウトはほぼ完璧です。@c しかしながら、それぞれの譜を見ているだけではわからない、@c ちょっとした欠陥があります。@c ペダル譜と左手譜の距離は右手譜と左手譜の距離とほぼ等しくなるべきです。@c 詳しく説明すると、@code{PianoStaff} コンテキストの譜の伸縮性は制限される (制限により、左手譜と右手譜の距離はあまりにも大きくなることはありません) ので、ペダル譜も同様に制限されるべきです。 @cindex sub-properties (サブ-プロパティ) @cindex properties, sub-properties (サブ-プロパティ) @cindex graphical objects (グラフィカル オブジェクト) @cindex objects, graphical (グラフィカル オブジェクト) @cindex grobs (グラフィカル オブジェクト) 譜の伸縮性は @q{グラフィカル オブジェクト} @code{VerticalAxisGroup} の @code{staff-staff-spacing} プロパティで制御することができます。 (LilyPond ドキュメントの中でグラフィカル オブジェクトは @q{grobs} と呼ばれることが多いです。) 今、グラフィカル オブジェクトの詳細について知らなくても心配しないでください。@c 後で詳しく説明します。@c 興味があるのなら、@ruser{Overview of modifying properties} を見てください。@c 今回は、@code{stretchability} サブ-プロパティを変更する必要があるだけです。@c さらに興味があるのなら、グラフィカル オブジェクト @code{VerticalAxisGroup} の定義を調べていくと、ファイル @file{scm/define-grobs.scm} の中に @code{staff-staff-spacing} プロパティのデフォルト値を見つけることができます。@c @code{stretchability} の値は、@code{PianoStaff} コンテキスト (これはファイル @file{ly/engraver-init.ly} の中にあります) の定義から来ていて、2 つの値は等価です。 @example \score @{ << % PianoStaff と Pedal Staff を同時進行させる必要があります \new PianoStaff << \new Staff = "ManualOne" << \keyTime % 調号と拍子記号をセットします \clef "treble" \new Voice @{ \voiceOne \ManualOneVoiceOneMusic @} \new Voice @{ \voiceTwo \ManualOneVoiceTwoMusic @} >> % ManualOne Staff コンテキストの終了 \new Staff = "ManualTwo" \with @{ \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5 @} << \keyTime \clef "bass" \new Voice @{ \ManualTwoMusic @} >> % ManualTwo Staff コンテキストの終了 >> % PianoStaff コンテキストの終了 \new Staff = "PedalOrgan" << \keyTime \clef "bass" \new Voice @{ \PedalOrganMusic @} >> % PedalOrgan Staff の終了 >> @} % Score コンテキストの終了 @end example これでこの構造は完成です。@c 3 つの譜を持つオルガン譜はいずれも同様の構造を持ちますが、@c ボイスの数はさまざまになるかもしれません。@c この後に行うべきことは、音楽を付け加え、各パートを一緒にすることです。 @c KEEP LY @lilypond[quote,verbatim,ragged-right,addversion] \header { title = "Jesu, meine Freude" composer = "J S Bach" } keyTime = { \key c \minor \time 4/4 } ManualOneVoiceOneMusic = \relative g' { g4 g f ees | d2 c | } ManualOneVoiceTwoMusic = \relative c' { ees16 d ees8~ ees16 f ees d c8 d~ d c~ | c8 c4 b8 c8. g16 c b c d | } ManualTwoMusic = \relative c' { c16 b c8~ c16 b c g a8 g~ g16 g aes ees | f16 ees f d g aes g f ees d e8~ ees16 f ees d | } PedalOrganMusic = \relative c { r8 c16 d ees d ees8~ ees16 a, b g c b c8 | r16 g ees f g f g8 c,2 | } \score { << % PianoStaff と Pedal Staff を同時進行させる必要があります \new PianoStaff << \new Staff = "ManualOne" << \keyTime % 調号と拍子記号をセットします \clef "treble" \new Voice { \voiceOne \ManualOneVoiceOneMusic } \new Voice { \voiceTwo \ManualOneVoiceTwoMusic } >> % ManualOne Staff コンテキストの終了 \new Staff = "ManualTwo" \with { \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5 } << \keyTime \clef "bass" \new Voice { \ManualTwoMusic } >> % ManualTwo Staff コンテキストの終了 >> % PianoStaff コンテキストの終了 \new Staff = "PedalOrgan" << \keyTime \clef "bass" \new Voice { \PedalOrganMusic } >> % PedalOrgan Staff コンテキストの終了 >> } % Score コンテキストの終了 @end lilypond @seealso 音楽用語集: @rglos{system} @node 変数と関数を用いて入力の手間を省く @subsection 変数と関数を用いて入力の手間を省く @translationof Saving typing with variables and functions @cindex variables (変数) これまでに、以下のような記述を見てきました: @lilypond[quote,verbatim,ragged-right] hornNotes = \relative c'' { c4 b dis c } \score { { \hornNotes } } @end lilypond これは音楽表記を最小化するのに役に立つ可能性があるということに@c 気付くかもしれません: @lilypond[quote,verbatim,ragged-right] fragmentA = \relative c'' { a4 a8. b16 } fragmentB = \relative c'' { a8. gis16 ees4 } violin = \new Staff { \fragmentA \fragmentA | \fragmentB \fragmentA | } \score { { \violin } } @end lilypond さらに、これらの変数 (変数、マクロ、(ユーザ定義) コマンドなどと呼ばれます) を調整のために使うこともできます: @c TODO Avoid padtext - not needed with skylining @lilypond[quote,verbatim,ragged-right] dolce = \markup { \italic \bold dolce } padText = { \once \override TextScript.padding = #5.0 } fthenp =_\markup { \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p } violin = \relative c'' { \repeat volta 2 { c4._\dolce b8 a8 g a b | \padText c4.^"hi there!" d8 e' f g d | c,4.\fthenp b8 c4 c-. | } } \score { { \violin } \layout { ragged-right = ##t } } @end lilypond これらの変数は明らかに入力の手間を省くのに役立っています。@c 例え 1 回しか使用しない音楽であっても、変数化することを考慮する価値はあります -- 変数化は複雑さを減らします。@c 前の例を変数化しなかったものを見てみましょう。@c とても読み難く、特に最後の行が読み難いです。 @example violin = \relative c'' @{ \repeat volta 2 @{ c4._\markup @{ \italic \bold dolce @} b8 a8 g a b | \once \override TextScript.padding = #5.0 c4.^"hi there!" d8 e' f g d | c,4.\markup @{ \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @} b8 c4 c-. | @} @} @end example @c TODO Replace the following with a better example -td @c Skylining handles this correctly without padText これまでに見てきたのは静的な置き換えです -- LilyPond は @code{\padText} を見つけると、それを定義した内容 (つまり、@code{padText=} の右側にあるもの) に置き換えます。 LilyPond は非静的な置き換えも処理できます (それらを関数と見なすことができます)。 @lilypond[quote,verbatim,ragged-right] padText = #(define-music-function (parser location padding) (number?) #{ \once \override TextScript.padding = #padding #}) \relative c''' { c4^"piu mosso" b a b | \padText #1.8 c4^"piu mosso" d e f | \padText #2.6 c4^"piu mosso" fis a g | } @end lilypond 変数を使うことは、LilyPond 入力構文に変更があった場合の作業を減らす@c 良い方法でもあります (@rprogram{convert-ly を使ってファイルを更新する} を参照してください)。@c あなたがあなたの入力ファイルすべてに使用する単一の定義 (@code{\dolce} のような) を持っていて、構文が変更された場合、@c すべての @code{.ly} ファイルを変更する代わりに、@c @code{@bs{}dolce} 定義をアップデートするだけで済みます。 (@ref{スタイル シート} を参照してください。) @node 楽譜とパート @subsection 楽譜とパート @translationof Scores and parts オーケストラ音楽では、すべての音符は 2 回譜刻されます。@c 1 回は演奏家のためのパート譜で、1 回は指揮者のための総譜で譜刻されます。@c 変数を使うことで二度手間を避けることができます。@c 音楽は 1 回、変数に入力されます。@c その変数の内容は、パート譜と総譜の両方を生成するために使用されます。 音符を特別なファイルの中に定義すると便利です。@c 例えば、ファイル @code{horn-music.ly} は@c 以下のホルン/@/バスーン デュオのパートを保持しているとします: @example hornNotes = \relative c @{ \time 2/4 r4 f8 a | cis4 f | e4 d | @} @end example @noindent 個々のパートは、ファイルの中に以下の記述をすることによって作り出されます: @example \include "horn-music.ly" \header @{ instrument = "Horn in F" @} @{ \transpose f c' \hornNotes @} @end example 以下の行: @example \include "horn-music.ly" @end example @noindent は、ファイルの中でその行が置かれている場所で、@c @file{horn-music.ly} の内容に置き換わり、@c @code{hornNotes} の定義になります。@c @code{\transpose f@tie{}c'} は、@c 引数 @code{\hornNotes} は 5 度上へ移調すべきであるということを@c 示しています。@c @code{f} の音は譜面に表記された @code{c'} で表され、@c これは通常のフレンチ ホルンを F にチューニングすることに相当します。@c この移調により出力は以下のようになります: @lilypond[quote,ragged-right] \transpose f c' \relative c { \time 2/4 r4 f8 a | cis4 f | e4 d | } @end lilypond アンサンブルでは、しばしばボイスの 1 つが何小節も演奏されないことがあります。@c これは特別な休符 -- 複小節休符 -- によって示されます。@c これは大文字の @code{R} とその後に続く演奏時間 (全音符には @code{1}、半音符には @code{2} などです) で入力されます。@c この演奏時間に掛け算を行うことによって、@c さらに長い休符を構築することができます。@c 例えば、以下の休符は 2/4 拍子で 3 小節分の長さになります: @example R2*3 @end example この部分を譜刻するとき、複小節休符を圧縮する必要があります。@c これは以下のラン-タイム変数を設定することによって行います: @example \set Score.skipBars = ##t @end example @noindent このコマンドは @code{Score} コンテキストの中にある@c プロパティ @code{skipBars} を真 (@code{##t}) にセットします。@c この休符とオプションを上記の音楽の先頭に追加することによって、@c 以下のような結果になります: @lilypond[quote,ragged-right] \transpose f c' \relative c { \time 2/4 \set Score.skipBars = ##t R2*3 | r4 f8 a | cis4 f | e4 d | } @end lilypond 楽譜はすべての音楽を一緒にすることによって作り出されます。@c 他のボイスはファイル @file{bassoon-music.ly} の中の @code{bassoonNotes} の@c 中にあると仮定すると、楽譜は以下のような記述で作られます: @example \include "bassoon-music.ly" \include "horn-music.ly" << \new Staff \hornNotes \new Staff \bassoonNotes >> @end example @noindent そして、以下のような楽譜になります: @lilypond[quote,ragged-right] \relative c << \new Staff { \clef "treble" \time 2/4 R2*3 | r4 f8 a | cis4 f | e4 d | } \new Staff { \clef "bass" \time 2/4 r4 d,8 f | gis4 c | b4 bes | a8 e f4 | g4 d | gis4 f | } >> @end lilypond