LilyPond — 学習マニュアル

このマニュアルは LilyPond バージョン 2.24.4 の導入部です。

このマニュアルと他のドキュメントの関係について、あるいは、このマニュアルを他の形式で読む方法についての情報は、 マニュアル を参照してください。

マニュアルのいずれかを見失ってしまった場合、https://lilypond.org/ にマニュアルがすべて揃っています。


1. Installing

This gentle, step-by-step installation tutorial guides you through installing LilyPond and creating a first music score.

LilyPond input files are simple text files. You can use any raw text editor to edit a LilyPond file (not a rich text editor such as Microsoft Word), but there are several editors tailored specifically for LilyPond, making the editing process very comfortable. Because a choice has to be made, this tutorial uses Frescobaldi, which is the most popular among such editors right now. However, there are several other options available. For more information, see editing Easier editing.

Please choose the tutorial according to your needs. (If you don’t know what the “command line” is, you want the graphical setup!)


1.1 Graphical setup under GNU/Linux

These instructions work for the GNOME environment, for example on the default flavors of Ubuntu and Fedora. In other desktop environments, they can likely be adapted. For more minimal GNU/Linux distributions, see Command line setup.

First, find the GNOME Software app.

linux-1-search-gnome-software

In GNOME Software, search “Frescobaldi”.

linux-2-search-frescobaldi

Install Frescobaldi. Behind the scenes, this should also automatically install some version of LilyPond.

linux-3-install-frescobaldi

Open Frescobaldi. It starts on a new file with some pre-filled text that will be explained later.

linux-4-frescobaldi-start

After the \version line, enter a new line containing exactly this:

{ c' }

Now click on the LilyPond icon, or press Control-M. On the right, a simple score appears.

linux-5-frescobaldi-simple-file

Congratulations, you have just created your first music sheet with LilyPond! If you’re satisfied now, you can skip the rest of this section. However, it may be that the version of LilyPond that was installed is not the same one as this documentation is for. If you want a different LilyPond version, you can register it in Frescobaldi, without losing the initial one. To do this, first download the archive from Download, and double-click to unpack it.

linux-6-download-and-unpack-archive

Move the unpacked folder out of your Downloads folder to the folder where you want to permanently store it. For example, put it in your home folder.

Now, in Frescobaldi, go the Preferences.

linux-7-frescobaldi-find-preferences

Select “LilyPond Preferences”, and click “Add” to register a new LilyPond version.

linux-8-frescobaldi-add-lilypond-version

Click on the file explorer icon.

linux-9-frescobaldi-select-lilypond-executable

Navigate to the folder you just extracted, then inside this folder, to ‘bin’ and finally ‘lilypond’.

linux-10-navigate-to-lilypond-executable

You’re done! You can click ‘OK’. You now have two versions of LilyPond installed.

linux-11-frescobaldi-new-version-added

Now turn to チュートリアル to learn more about LilyPond’s syntax.


1.2 Graphical setup under Windows

Download LilyPond for Windows from Download. The file will a ZIP archive called ‘lilypond-x.y.z-mingw-x86_64.zip’ (where “mingw” means it’s for Windows). Extract this in the file explorer. Place the resulting directory lilypond-x.y.z-mingw-x86_64 in a permanent location; the actual folder doesn’t matter, you just need to put it somewhere you won’t move it afterwards. For example, you could choose your home folder.

After this, download the latest release of Frescobaldi from the project’s download page. Choose the ‘.exe’ file.

windows-1-frescobaldi-download-github

Double-click on the downloaded file in the file explorer. This launches the setup wizard.

windows-2-frescobaldi-installer

Accept the license and install Frescobaldi using the wizard. You will find a startup screen like this:

windows-3-frescobaldi-startup

Navigate to the Frescobaldi preferences.

windows-4-frescobaldi-find-preferences

Navigate to “LilyPond Preferences” on the left.

windows-5-frescobaldi-find-lilypond-preferences

Click “Edit” on the right. This leads to a dialog for choosing the LilyPond executable.

windows-6-frescobaldi-select-lilypond-executable

Click on the folder icon and navigate to the lilypond-x.y.z-mingw-x86_64 folder you previously created. Inside this folder, open ‘lilypond-x.y.z’, then ‘bin’, and finally select ‘lilypond’.

windows-7-frescobaldi-find-executable-from-explorer

Now click “OK”.

windows-8-frescobaldi-ok

Click “OK” again.

windows-9-frescobaldi-ok-2

Type this simple file in the window:

\version "2.24.4"

{ c' }

Compile it with Control-M or using the “LilyPond” icon. A minimal score appears.

windows-10-frescobaldi-done

Congratulations, you have just created your first music sheet with LilyPond! Now continue with the チュートリアル to learn more about LilyPond’s syntax.


1.3 Graphical setup under macOS

Download LilyPond for macOS from Download. The file will be an archive called ‘lilypond-x.y.z-darwin-x86_64.tar.gz’ (where “darwin” means it’s for macOS). In the Finder, extract this archive. Place the resulting directory lilypond-x.y.z-darwin-x86_64 in a permanent location; the actual folder doesn’t matter, you just need to put it somewhere you won’t move it afterwards. For example, you could choose your home folder.

After this, download the latest release of Frescobaldi from the project’s download page. Choose the ‘.dmg’ file.

macos-1-frescobaldi-download-github

In the Finder, double-click on the file to run the installer. At this point, you might encounter a problem:

macos-2-frescobaldi-cant-be-opened

This is because Frescobaldi is developed independently from Apple. Nevertheless, it is totally secure software, but you have to tell Apple so. To do this, you first need to click “Cancel”. After having clicked “Cancel”, open the “System Preferences” app and select “Security & Privacy”.

macos-3-open-system-preferences-security

Then click “Open Anyway”.

macos-4-allow-open-anyway

This leads to a new security warning. This time, you have the option to accept. Select “Open”. Again, do not fear: Frescobaldi is completely secure for your system.

macos-5-accept-security-warning

Frescobaldi is now open. Find the Preferences.

macos-6-frescobaldi-find-preferences

Click on “LilyPond Preferences” on the left.

macos-7-frescobaldi-find-lilypond-preferences

Click “Edit” on the right. This opens a new window:

macos-8-frescobaldi-edit-lilypond-executable

Click on the ‘folder’ icon. A Finder window opens. Navigate to the ‘lilypond-x.y.z-darwin-x86_64’ folder you saved earlier. Inside it, find ‘lilypond-x.y.z’, then ‘bin’ and finally ‘lilypond’.

macos-9-frescobaldi-navigate-to-lilypond-executable

When you press “OK”, a new security warning about LilyPond will likely appear. Again, first click “Cancel”, then enable LilyPond in the preferences, and redo the procedure to select ‘lilypond’ in the Finder.

Now click “OK” to everything until you are back to the main Frescobaldi window. Enter this simple file in source view on the left:

\version "2.24.4"

{ c' }

Click on the button with the LilyPond icon to compile the file, or use the Control-M keyboard shortcut. For a third time, the system will warn you about security, this time with “gs” (GhostScript). Once more, go to the System Preferences to enable the program to be executed.

Finally, the next compilation run will work and you will find a minimal score.

macos-10-minimal-score

Congratulations! You have compiled your first music sheet with LilyPond. Now continue with the チュートリアル to learn more about LilyPond’s syntax.


1.4 Command line setup

On many GNU/Linux distributions, LilyPond can be installed from the package manager. This is also the case on macOS using either MacPorts or Homebrew.

In any case, you can install LilyPond by downloading the archive from Download and unpacking it. The binaries are usable immediately after unpacking. You can run

/.../lilypond-x.y.z/bin/lilypond file.ly

(on Windows, replace the slashes ‘/’ with backslashes ‘\’).

This compiles file.ly, and produces file.pdf. To test your setup, you can use this minimal file:

\version "2.24.4"

{ c' }

This will produce this output in ‘file.pdf’:

[image of music]

Now continue with the チュートリアル to learn more about LilyPond’s syntax, or see Command-line usage for more information on calling LilyPond on the command line.


2. チュートリアル

この章は LilyPond に取り組むための基本的な入門書です。


2.1 ファイルをコンパイルする

このセクションでは “コンパイル”—出力ファイルを作り出すために (あなたが記述した) LilyPond 入力ファイルを処理すること—について説明します。

“コンパイル” は LilyPond フォーマットで書かれた入力ファイルから出力ファイルを作り出す処理を意味する用語です。出力ファイルには一般に PDF (印刷や閲覧用)、MIDI (演奏用)、それに PNG (オンラインで使用)があります。LilyPond 入力ファイルはシンプルなテキストファイルです。

最初の例ではシンプルな入力ファイルを示します。

\version "2.24.4"
{
  c' e' g' e'
}

出力は以下のようになります:

[image of music]

Note: LilyPond 入力の音符と歌詞は、 { 波括弧 } で囲まれている必要があります。さらに、あいまいさを避けるために、波括弧は行の最初か最後でない限りはスペースによって囲まれているべきです。波括弧はこのマニュアルのいくつかの例では省略されているかもしれませんが、あなた自身が作成する楽譜では忘れないでください!マニュアルの中にある例を表示する方法についての更なる情報については、このマニュアルの読み方 を参照してください。

さらに、LilyPond 入力は大文字/小文字の区別 があります。{ c d e } は有効な入力ですが、{ C D E } はエラーになります。


2.2 入力ファイルの書き方

このセクションでは、あなたが入力ファイルを書き始めるのを手助けするために LilyPond の基本的な構文をいくつか紹介します。


2.2.1 簡単な記譜法

LilyPond はいくつかの記譜要素を自動的に追加します。次の例では、我々は 4 つのピッチを指定しただけですが、LilyPond が音部記号、拍子記号、リズムを加えています。

{
  c' e' g' e'
}

[image of music]

この挙動は変更されるかもしれませんが、たいていのケースではこれらの自動値は役に立ちます。


ピッチ

音楽用語集: pitch, interval, scale, middle C, octave, accidental

LilyPondではピッチを指定するために小文字を使います。このセクションの全ての例の音符名には、オランダ語の命名システム (ピアノの白鍵は c-b です) を用います。しかしながら、LilyPond は英語や ‘固定ド’ (do-re-mi-...) のような、多くの異なる命名スキームをサポートしています。 他の言語での音符名 を参照してください。文字 c から bミドル Cの下の‘スモール・オクターブ’を示します。' や , を後ろにつけると上か下のオクターブになります。ミドル Cから始まる音階とアルペジオの例です:

{ c' d' e' f' g' a' b' c'' g c' e' g' c'' e'' g'' c''' }

[image of music]

音符を入力するための最も簡単な方法は \relative モードを使用することです。このモードでは、後に続く音符は常に前の音符に最も近い場所になるという仮定によって自動的にオクターブが選択されます。つまり、音符は前の音符から 3 譜表スペース (訳者: 1 譜表スペースとは同じ音階のド→レ、レ→ミ、~の間隔のこと) 以内に置かれます。我々はまず音楽の最も基本的な要素 – 音階 (ここでは各音符は前の音符からちょうど 1 譜表スペースの位置にきます) – からはじめます。

\relative {
  c' d e f
  g a b c
}

[image of music]

最初の音符はc'で示されるミドル C です。一連の音符はそれぞれ前の音符と最も近い場所に置かれています – 言い換えると、最初の c はミドル C に最も近い C です。これに前の音符に最も近い D が続きます。我々は \relative モードだけを使ってより大きな音程を持つ旋律を作ることができます:

\relative {
  d' f a g
  c b f d
}

[image of music]

前の例では、最初の音符 – d に一つ ' が付いている – はミドル C から B へ上がっていくオクターブにある D です。

最初の音符にクォート ' やカンマ , を付け加える (あるいは取り除く) ことによって、開始オクターブを変更することができます:

\relative {
  e'' c a c
}

[image of music]

相対モードは最初のうちは混乱を引き起こす可能性がありますが、たいていの旋律を入力するのに最も容易な方法です。相対計算が実際にどのように行われるのか見てみましょう。B – ト音記号の譜面の真ん中の譜線上にあります – から開始すると、C, D, E は上方向に 3 譜表スペース以内にあり、A, G, F は下方向に 3 譜表スペース以内にあります。そのため、B の後に続く音符が C, D, E である場合、その音符は B の上に置かれ、A, G, F である場合は B の下に置かれます。

\relative {
  b' c  % c は b よりも 1 譜表スペース上なので、c は b の上になります
  b d  % d は 2 つ上または 5 つ下なので、d は上になります
  b e  % e は 3 つ上または 4 つ下なので、e は上になります
  b a  % a は 6 つ上または 1 つ下なので、a は下になります
  b g  % g は 5 つ上または 2 つ下なので、g は下になります
  b f  % f は 4 つ上または 3 つ下なので、f は下になります
}

[image of music]

これらの音符のいずれかにシャープやフラットが付いたとしてもまったく同じことが起こります。相対位置の算出時に臨時記号完全に無視されます。譜表上の他のいずれかの位置にある音符からの譜表スペース数もまったく同じです。

3 譜表スペースよりも大きな音程を加えるために、シングル クォート ' (あるいはアポストロフィ) を音符名に付け加えることによってオクターブを上げることができます。音符名にカンマ , を付け加えることによってオクターブを下げることができます。

\relative {
  a' a, c' f,
  g g'' a,, f'
}

[image of music]

音符を 2 オクターブ (あるいはそれ以上) 変えるには、複数化した '',, を使用します – しかしながら、1 つのダブル クォート " ではなく、2 つのシングル クォートを使用するよう注意してください!


演奏時間 (リズム)

音楽用語集: beam, duration, whole note, half note, quarter note, dotted note

音符の演奏時間は音符名の後の番号によって指定されます。全音符には 1 を、半音符には 2 を、4 分音符には 4 を、などです。連桁 (符幹と符幹をつなぐ横棒。符幹は符頭から上下にでる縦棒。符頭は音符の玉) は自動的に追加されます。

あなたが演奏時間を指定しなかった場合、前の音符の演奏時間が次の音符の演奏時間に対しても使用されます。最初の音符のデフォルトの演奏時間は 4 分音符です。

\relative {
  a'1
  a2 a4 a8 a
  a16 a a a a32 a a a a64 a a a a a a a a2
}

[image of music]

付点音符を作成するには、演奏時間数にドット . を付け加えます。付点音符の演奏時間は明記されなければなりません (つまり、数字で)。

\relative {
  a'4 a a4. a8
  a8. a16 a a8. a8 a4.
}

[image of music]


休符

音楽用語集: rest

休符r という名前の音符のような形で入力されます:

\relative {
  a'4 r r2
  r8 a r4 r4. r8
}

[image of music]


拍子記号

音楽用語集: time signature

拍子記号\time コマンドでセットすることができます:

\relative {
  \time 3/4
  a'4 a a
  \time 6/8
  a4. a
  \time 4/4
  a4 a a a
}

[image of music]


テンポ記号

音楽用語集: tempo indication, metronome

テンポ指示メトロノーム記号\tempo コマンドでセットすることができます:

\relative {
  \time 3/4
  \tempo "Andante"
  a'4 a a
  \time 6/8
  \tempo 4. = 96
  a4. a
  \time 4/4
  \tempo  "Presto" 4 = 120
  a4 a a a
}

[image of music]


音部記号

音楽用語集: clef

音部記号\clef コマンドを使ってセットすることができます:

\relative {
  \clef "treble"
  c'1
  \clef "alto"
  c1
  \clef "tenor"
  c1
  \clef "bass"
  c1
}

[image of music]


すべてをまとめて

以上の要素をすべて集めたちょっとした例をお見せします:

\relative {
  \clef "bass"
  \time 3/4
  \tempo "Andante" 4 = 120
  c,2 e8 c'
  g'2.
  f4 e d
  c4 c, r
}

[image of music]

参照

記譜法リファレンス: ピッチを記述する, リズムを記述する, 休符を記述する, 拍子, 音部記号


2.2.2 入力ファイルに取り組む

LilyPond 入力ファイルは多くの一般的なプログラミング言語のソース ファイルと同じようなものです。それらは大文字/小文字の区別があり、空白はたいてい無視されます。表記は波括弧 { } で囲まれ、% または %{ .. %} でコメントになります。

上の文章があなたにとって意味不明だとしても、心配ありません!我々がそれらの用語の意味を説明します:


2.3 エラーに対処する

時には LilyPond はあなたが予期したような出力を作り出さないことがあります。このセクションでは、あなたが遭遇するかもしれない問題を解決するのに役立つリンクをいくつか提供します。


2.3.1 一般的なトラブルシュート Tips

LilyPond で発生する問題をトラブルシュートすることは、グラフィカルインターフェイスに慣れ親しんだ人々にとっては骨の折れることかもしれません。なぜなら無効な入力ファイルが生成される可能性があるからです。問題が発生した時は、論理的なアプローチが問題を特定して解決する最善の方法です。トラブルシュートの仕方を学ぶのに役立つガイドラインが トラブルシュート で提供されています。


2.3.2 いくつかの一般的なエラー

表示されるエラーメッセージだけでは解決が難しい一般的なエラーがいくつかあります。それらのエラーについて 一般的なエラー で記述されています。


2.4 このマニュアルの読み方

このセクションではドキュメントを効率的に読む方法を示し、さらに、オンライン版で利用できる有用な対話的機能をいくつか紹介します。


2.4.1 省略された構成要素

入力ファイルに取り組む で見てきたように、LilyPond 入力は { } マークか ‘relative { … }’ で囲まれていなければなりません。このマニュアルの残りの部分では、いくつかの短い例はこのことを省略しています。このような例を複製するためにあなたは表示されている入力をコピーできますが、あなたは入力ファイルの中で、 {{ の間にペーストしてください。

{
  …例がここに来ます…
}

さらに、すべての LilyPond ファイルは \version 宣言を持つべきであるということを思い出してください。マニュアルの中の例はコードの断片であり、ファイルではないため、\version 宣言は省略されています。しかしながら、あなたは入力ファイルの中にバージョン宣言を記述すべきです。


2.4.2 クリック可能な例

Note: この機能は HTML マニュアルでのみ利用可能です。

多くの人々はすでにあるプログラムを試したり、いじったりすることでプログラムを学びます。これは LilyPond でも可能です。このマニュアルの HTML バージョンの中にある画像をクリックすると、画像を生成するために使用された正確な LilyPond 入力を見ることができます。以下の画像を試してみてください:

[image of music]

‘ly コード断片’ セクションにある記述をカット&ペーストすることによって、あなたは LilyPond を経験するための開始テンプレートを入手できます。まったく同じもの (線の太さなどもすべて同じ) を出力させるには、“Start cut-&-pastable section” からファイルの最後までをコピーしてください。


2.4.3 マニュアルの概要

LilyPond にはたくさんのドキュメントがあります。新しいユーザは時々ドキュメントのどこを読むべきなのか混乱し、時には必須の部分を読み飛ばしてしまいます。

Note: ドキュメントの重要な部分を読み飛ばさないでください。その後のセクションを理解することがはるかに難しくなります。


3. 一般的な記譜法

この章では、チュートリアル内の下記素材で、一般的な音楽記譜法による美しい楽譜を作成する方法を説明します。


3.1 単一譜表表記

このセクションはでは 1 つの譜表の上にある 1 つの声部のために使用される一般的な記譜法を紹介します。


3.1.1 小節線と小節チェック


小節線

単線の小節線は自動的に挿入されるので、手動で追加する必要はありません。他の種類の小節線は \bar "||" で複縦線、\bar "|." で終止線、のように \bar を使って追加します。 小節線のすべてのリストは 小節線 を見てください。

\relative { g'1 e1 \bar "||" c2. c'4 \bar "|." }

[image of music]


小節チェック

必須ではありませんが、入力コードの中で 小節チェック を挿入してどこに小節線を置こうとしているのかを示すべきです。小節チェックは挿入するには | を入力します。小節チェックがあると、プログラムはあなたが各小節に入力した演奏時間が正しい長さになっているかを検証することができます。さらに、小節チェックは要素を整理する助けとなるため、 入力コードが読みやすくなります。

\relative {
  g'1 | e1 | c2. c' | g4 c g e | c4 r r2 |
}

[image of music]

上の例のコードをコンパイルすると、コンソールに以下の警告が出力されます。

warning: barcheck failed at: 1/2
 g'1 | e1 | c2. c'
                   | g4 c g e | c4 r r2 |

この単純な例では長さの間違いは明確ですが、コンソール出力の警告は 3 小節目に 4 が欠けていることが効果的にわかります。

参照

記譜法リファレンス: 小節と小節番号のチェック


3.1.2 ピッチと調号

Note: 新しいユーザはしばしば LilyPond の調号の使い方を誤解します。 – このページの最後にある警告を読んでください。


ピッチ変更

音楽用語集: sharp, flat, double sharp, double flat, accidental

LilyPond の音符名はピッチを示しています。 例えば、c は調号に関係なく常に C-ナチュラル を意味します。

多くの言語では、音符名は C メジャー / A マイナースケールのダイアトニックステップを参照する基準音、たとえば d 、そしてこの基準のピッチに対する 変更 を示すサフィックスで構成されます。音符名のためのデフォルトの入力言語はオランダ語です。シャープ は音符名に is を付け加えることによって作られ、フラットes を付け加えることによって作られます。予想しているかもしれませんが、ダブル シャープダブル フラットisiseses を付け加えることによって作られます。この構文はドイツ語やオランダ語のような北欧とドイツの言語での命名規則から生まれました。 音符名 に対して他の命名スキームを使うには、 他の言語での音符名 を参照してください。

\relative { cis''4 ees fisis, aeses }

[image of music]


調号

音楽用語集: key signature, major, minor

調号 はコマンド \key とそれに続くピッチと \major または \minor によってセットされます。

\relative {
  \key d \major
  d'4 fis a c |
  \bar "||" \key c \minor
  c,4 ees g b |
}

[image of music]



警告: 調号とピッチ

音楽用語集: accidental, key signature, pitch, flat, natural, sharp, transposition, Pitch names.

LilyPond は音楽の内容と印刷表現を区別します。d4 e fis2 のような入力は、音楽の内容としてピッチと長さを定義します。調号 は印刷表現の一部です。また、調号は音符の印刷表現のルールを設定します。LilyPond は 臨時記号 を譜刻するかどうかを決定するためにピッチと調号 を比較します。

コマンド \key は印刷表現に作用する 調号 を設定しますが、 c のような入力中の音符に割り当てられたピッチは変更 しません

以下の例では:

\relative {
  \key d \major
  cis''4 d e fis
}

[image of music]

臨時記号を譜刻されている音符はありません。しかしながら、あなたは入力ファイルで is を付け加えて cisfis などとタイプしなければなりません。

コード b は “譜表の最初の線 (一番上の線) のすぐ下に黒い点を譜刻せよ” という意味ではありません。そうではなく、“ピッチが B ナチュラルである音符がある” という意味です。A フラット メジャーの調では、b には臨時記号が付きます:

\relative {
  \key aes \major
  aes'4 c b c
}

[image of music]

あなたがピアノを弾いているとします。黒鍵を押したいのであれば、音符名に -is-es を付ける必要があります。

すべての変化を明示的に付け加えることは入力時にちょっとした努力を要するかもしれません。しかしながら、移調がより容易になる、異なる規約に対応して臨時記号を譜刻できるという利点があります。臨時記号がどのように異なる規則に対応して譜刻されるのかについてのいくつかの例は、 自動臨時記号 を参照してください。

参照

記譜法リファレンス: 他の言語での音符名, 臨時記号, 自動臨時記号, 調号


3.1.3 タイとスラー


タイ

音楽用語集: tie

タイはタイでつながる2つの音符の最初の音符にチルダ ~ を付加することによって作成されます。

\relative { g'4~ g c2~ | c4~ c8 a~ a2 | }

[image of music]

タイでつながれた音符のように、ピッチが変わらない場合、後のピッチを省略し、長さだけを指定できます。

\relative { g'4~ 4 c2~ | 4~ 8 a~ 2 | }

[image of music]

この省略形はピッチが変わらずにリズムが変わる場所で有用ですが、長さを指定しないピッチにはスペースが続くということと、長さだけを指定した場合でも1つの音符として解釈されるということを覚えてください。


スラー

音楽用語集: slur

スラーは多くの音符にわたって描かれる曲線です。スラーの開始音符と終了音符にはそれぞれ () を付加します。( は開始音符の後に記入することに注意してください。

\relative { d''4( c16) cis( d e c cis d) e( d4) }

[image of music]


フレージング スラー

音楽用語集: slur, phrasing

長い フレーズ を示すためのスラーは \(\) によって挿入することができます。あなたはスラーとフレージング スラーを同時に使うことができます。

\relative { g'4\( g8( a) b( c) b4\) }

[image of music]



警告: スラー vs. タイ

音楽用語集: articulation, slur, tie

スラータイ のように見えますが、意味が異なります。タイは単純に最初の音符をより長くするものであり、同じ音程の音符のペアに対してのみ使用することができます。スラーは複数の音符による アーティキュレーション (節、表現) を表していて、より大きな音符のグループに対して使用することができます。スラーとタイはネストさせることができます。

\relative { c''4(~ c8 d~ 4 e) }

[image of music]

参照

記譜法リファレンス: タイ, スラー, フレージング スラー


3.1.4 アーティキュレーションと強弱記号

アーティキュレーションと強弱記号は、音符の後に特別なコードを追加することで付加することができます。


アーティキュレーション

音楽用語集: articulation

一般的な アーティキュレーション はダッシュ - と単一文字を使うことで音符に付け加えることができます:

\relative {
  c''4-^ c-+ c-- c-!
  c4-> c-. c2-_
}

[image of music]


運指法記号

音楽用語集: fingering

同様に、運指法 はダッシュ (-) と譜刻する数字を使うことで音符に付け加えることができます:

\relative { c''4-3 e-5 b-2 a-1 }

[image of music]

通常、アーティキュレーションと運指法は自動的に譜刻されます。しかしながら、あなたはダッシュ (-) を ^ (上へ) または _ (下へ) に置き換えることによって方向を指定することができます。さらに、あなたは同じ音符に複数のアーティキュレーションを使用することもできます。しかしながらたいていの場合は、LilyPond にアーティキュレーションの方向を決定させるのが一番です。

\relative { c''4_-^1 d^. f^4_2-> e^-_+ }

[image of music]


強弱記号

音楽用語集: dynamics, crescendo decrescendo

強弱記号 は音符にバック スラッシュ付きのマークを付け加えることによって作成されます:

\relative { c''4\ff c\mf c\p c\pp }

[image of music]

クレッシェンドデクレッシェンド はコマンド \<\> によって開始されます。次の強弱記号 – 例えば、\f – が (デ)クレッシェンドを終わらせます。コマンド \! を使って終わらせることもできます:

\relative { c''4\< c\ff\> c c\! }

[image of music]

参照

記譜法リファレンス: アーティキュレーションと装飾, 運指の指示, 強弱記号


3.1.5 テキストを追加する

テキストをあなたの楽譜に追加することができます:

c''2^"espr" a'_"legato"

[image of music]

追加のフォーマット指定を \markup コマンドで追加することができます:

c''2^\markup { \bold espr }
a'2_\markup {
  \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
}

[image of music]

参照

記譜法リファレンス: テキストを記述する


3.1.6 自動連桁と手動連桁

音楽用語集: beam

すべての 連桁 は自動的に描かれます:

\relative { a'8 ais d ees r d c16 b a8 }

[image of music]

あなたが自動連桁を好まない場合、手動で上書きすることもできます。ある箇所の連桁を修正するには、連桁を付ける最初の音符に [ を、最後の音符に ] を付け加えます。[ は連桁の最初の音符の後に記入することに注意してください。

\relative { a'8[ ais] d[ ees r d] c16 b a8 }

[image of music]

もしあなたが楽譜全体あるいは一部で自動連桁を Off にしたいのなら、自動連桁を Off にするにはコマンド \autoBeamOff を、再度自動連桁を On にするには \autoBeamOn を使用します。

\relative {
  \autoBeamOff
  a'8 c b4 d8. c16 b4 |
  \autoBeamOn
  a8 c b4 d8. c16 b4 |
}

[image of music]

参照

記譜法リファレンス: 自動連桁, 手動連桁


3.1.7 高度なリズム コマンド


部分小節

音楽用語集: anacrusis

ピックアップ (訳者: 本来の拍子以外の拍子を持つ小節のこと) (または弱拍) はキーワード \partial によって挿入されます。この後に演奏時間が続きます: \partial 4 は 4 分音符のピックアップであり、\partial 8 は 8 分音符のピックアップです。

\relative {
  \partial 8 f''8 |
  c2 d |
}

[image of music]


連符

音楽用語集: note value, triplet

連符\tuplet キーワードによって作成されます。これは 2 つの引数をとります: 分数と楽譜の断片です。分数の分母は通常の音符の数で、分子は連符の音符の数です。3 連符は 2 つの音符の代わりに 3 つの音符を演奏しますので、連符 の分数は 3/2 となります。

\relative {
  \tuplet 3/2 { f''8 g a }
  \tuplet 3/2 { c8 r c }
  \tuplet 3/2 { f,8 g16[ a g a] }
  \tuplet 3/2 { d4 a8 }
}

[image of music]


装飾小音符

音楽用語集: grace notes, acciaccatura, appoggiatura

装飾小音符\grace コマンドによって作成されますが、キーワード \appoggiatura\acciaccatura による接頭音楽表記によっても作成されます:

\relative {
  c''2 \grace { a32 b } c2 |
  c2 \appoggiatura b16 c2 |
  c2 \acciaccatura b16 c2 |
}

[image of music]

参照

記譜法リファレンス: 装飾小音符, 連符, 上拍


3.2 同時に演奏する複数の音符

このセクションでは同時に複数の音符 – 複数の楽器、単一の楽器に対する複数の譜 (すなわちピアノ)、和音 – を持つ方法について紹介します。

楽譜の中での多声は楽曲の中にある複数の声部を参照します。LilyPond の中での多声は同じ譜表上にある複数の声部を参照します。


3.2.1 音楽表記についての説明

LilyPond 入力ファイルの中では、音楽は 音楽表記 によって表されます。単一の音符は 1 つの音楽表記になります:

a'4

[image of music]

表記を波括弧で括ることによって 複合音楽表記 が作成されます。2 つの音符を持つ複合音楽表記を作成しました:

\relative { a'4 g4 }

[image of music]

波括弧の中にある音楽表記 (例えば、いくつかの音符) のグループはそれらがシークエンスであるということを意味しています (つまり、それぞれの音符は前の音符に続くということです)。もう 1 つ音楽表記の結果を示します:

\relative { { a'4 g } f4 g }

[image of music]


数学的表記との類似

このメカニズムは数学式と似ています: 大きな式は小さな式を組み合わせることによって作成されます。そのような式は表記と呼ばれ、それらの定義は再帰的なのであなたは任意に複雑で大きな表記を作ることができます。例えば、

1

1 + 2

(1 + 2) * 3

((1 + 2) * 3) / (4 * 5)

これは表記のシークエンスであり、各表記は次の (より大きな) 表記に組み込まれています。最も単純な表記は数であり、より大きな表記は演算子 (+, *, / など) と括弧を組み合わせることによって作成されます。数学式と同様に、音楽表記も任意の深さにネストさせることができ、それは多声楽譜のような複雑な音楽のために必要なことです。


同時進行する音楽表記: 複数の譜

音楽用語集: polyphony

このテクニックは 多声音楽 に対して有用です。複数の声部や複数の譜を持つ音楽を入力するために、音楽表記を並列に組み合わせます。2 つの声部を同時に演奏すべきであるということを示すには、単純に音楽表記を同時進行するよう組み合わせて入力します。‘同時進行’ の音楽表記は <<>> で音楽表記を囲い込むことによって形成されます。以下の例では、3 つのシークエンス (すべてのシークエンスはそれぞれ 2 つの音符を保持しています) が同時進行するように組み合わされています:

<<
  \relative { a'2 g }
  \relative { f'2 e }
  \relative { d'2 b }
>>

[image of music]

入力の各レベルに対して異なる量のスペースをインデントとして与えていることに注意してください。LilyPond は行の先頭にどれくらい多く (あるいは少なく) のスペースがあるかを気にしません。しかしながら、上の例のように LilyPond コードにインデントを入れることによって人間にとってはずっと読みやすくなります。


同時進行する音楽表記: 単一の譜表

楽曲の中にある譜の数を決定するために、LilyPond は最初の音楽表記の始まりを調べます。それが単一の音符であった場合は譜表が 1 つ、同時進行する表記であった場合は譜表が複数になります。以下の例は複雑な表記を持ちますが、単一の音符で始まっているため譜表も 1 つです。

\relative {
  c''2 <<c e>> |
  << { e2 f } { c2 <<b d>> } >> |
}

[image of music]


3.2.2 複数の譜

音楽表記についての説明 で見てきたように、LilyPond 入力ファイルは音楽表記によって構築されています。複数の同時進行の音楽表記で始まる楽譜の場合、LilyPond は複数の譜を作成します。しかしながら、各譜表を明示的に作成すると何が起こるかより容易に見て取ることができます。

複数の譜表を譜刻するには、1 つの譜表を形成する音楽の各部分の前に \new Staff を付け加えます。これらの Staff 要素は <<>> で並列に組み合わされます:

<<
  \new Staff { \clef "treble" c''4 }
  \new Staff { \clef "bass" c4 }
>>

[image of music]

コマンド \new は 1 つの ‘記譜コンテキスト’ を導入します。記譜コンテキストは音楽的イベント (音符や \clef コマンドなど) が解釈される環境です。単純な楽曲では、そのような記譜コンテキストは自動的に作成されます。より複雑な楽曲ではコンテキストを明示的に記述することが望ましいです。

コンテキストにはいくつかのタイプがあります。Score, Staff, Voice は旋律記譜を扱います。一方、Lyrics は歌詞テキストをセットし、ChordNames はコード ネームを譜刻します。

構文という観点で見ると、\new を音楽表記の先頭に付け加えることによってより大きな音楽表記が作成されます。これは数学でのマイナス符号に似ています。数式 (4+5) は数学表記であり、-(4+5) はより大きな数学表記です。

ある譜表に挿入された拍子記号はデフォルトで他のすべての譜に影響を与えます。一方で、ある譜表に挿入された調号は他のすべての譜に影響を与えません。記号によってデフォルトの振る舞いが異なるのは、移調する楽器を扱う楽譜の方が複合リズム (polyrhythmic) の楽譜よりも一般的だからです。

<<
  \new Staff { \clef "treble" \key d \major \time 3/4 c''4 }
  \new Staff { \clef "bass" c4 }
>>

[image of music]


3.2.3 譜表グループ

音楽用語集: brace, staff, system.

ピアノ譜は ブレース でつながれた 2 つの譜表として譜刻されます。そのような譜表を譜刻することは 複数の譜 での多声の例に似ています。しかしながら、今度は表記全体が PianoStaff の中に挿入されます:

\new PianoStaff <<
  \new Staff …
  \new Staff …
>>

小さな例を挙げます:

\new PianoStaff <<
  \new Staff \relative { \time 2/4 c''4 e | g g, | }
  \new Staff \relative { \clef "bass" c4 c' | e c | }
>>

[image of music]

ピアノ譜以外の譜表グループ化はオーケストラ譜向けには \new GrandStaff で、ボーカル譜向けには \new ChoirStaff で導入されます。これらの譜表グループはそれぞれタイプの異なるコンテキストを形成し、各システム (訳者: 楽譜 1 行分のこと。ピアノ譜では右手と左手の 2 つの譜表ペアでの 1 行が 1 システムになります) の左端にブレースを付けて、さらに、小節線の高さを制御します。

参照

記譜法リファレンス: Keyboard and other multi-staff instruments, 譜を表示する


3.2.4 音符を組み合わせて和音にする

Music Glossary: chord

音符を << ... >> で囲んでそれらの音符が同時進行であることを示すことによって、それらの音符を和音として組み合わせる方法について見てきました。しかしながら、和音であることを示すための通常の方法は音符を < ... > (山括弧) で囲みます。和音の中にある音符はすべて同じ演奏時間でなければならず、その演奏時間は山括弧を閉じた後に置かれなければならないということに注意してください。

\relative { r4 <c'' e g> <c f a>2 }

[image of music]

和音は単一の音符とほとんど同じであると考えてください: 単一の音符に付け加えられるものはほとんどすべて和音にも付け加えられ、付け加えるものはすべて山括弧のに付け加えられなければなりません。例えば、あなたは連桁やタイなどのマークをコードに組み合わせることができます。それらは山括弧の外側に置かれなければなりません。

\relative {
  r4 <c'' e g>~ <c f a>2 |
  <c e g>8[ <c f a> <c e g> <c f a>]
    <c e g>8\>[ <c f a> <c f a> <c e g>]\! |
  r4 <c e g>8.\p <c f a>16( <c e g>4-. <c f a>) |
}

[image of music]

参照

記譜法リファレンス: 和音の音符


3.2.5 単一譜表での多声

LilyPond での多声音楽はまだ説明していないコンセプトを用いますので、多声音楽についてここでは説明しません。以下のセクションで多声音楽で用いるコンセプトを紹介し、多声音楽について説明します。

参照

学習マニュアル: 音楽を保持するボイス

記譜法リファレンス: 同時進行する音符


3.3 歌曲

このセクションでは声楽とシンプルな歌曲譜についての紹介を行います。


3.3.1 簡単な歌曲を作成する

音楽用語集: lyrics

童謡 Girls and boys come out to play の冒頭部分の旋律です:

\relative {
  \key g \major
  \time 6/8
  d''4 b8 c4 a8 | d4 b8 g4
}

[image of music]

\addlyrics キーワードで組み合わせることによって、歌詞 をこれらの音符にセットすることができます。歌詞は音節ごとにスペースで区切って入力します。

<<
  \relative {
    \key g \major
    \time 6/8
    d''4 b8 c4 a8 | d4 b8 g4
  }
  \addlyrics {
    Girls and boys come out to play,
  }
>>

[image of music]

二重の山括弧 <<…>> が楽曲全体を囲っていて、音楽と歌詞が同時進行することを示しています。


3.3.2 歌詞を旋律に揃える

音楽用語集: melisma, extender line

童謡の次の行は The moon doth shine as bright as day です。これを前の例に付け加えてみましょう:

<<
  \relative {
    \key g \major
    \time 6/8
    d''4 b8 c4 a8 | d4 b8 g4 g8 |
    a4 b8 c b a | d4 b8 g4. |
  }
  \addlyrics {
    Girls and boys come out to play,
    The moon doth shine as bright as day;
  }
>>

[image of music]

楽譜を見ると、追加した歌詞は適切に音符に揃えられてはいません。単語 shine は 1 つの音符ではなく 2 つの音符に割り当てられるべきです。これは メリスマ と呼ばれ、歌詞の音節 1 つを複数の音符に割り当てます。音節を複数の音符に広げる方法はいくつかあります。最も簡単な方法は割り当てられる音符にスラーを付けることです。詳細は タイとスラー を参照してください。

<<
  \relative {
    \key g \major
    \time 6/8
    d''4 b8 c4 a8 | d4 b8 g4 g8 |
    a4 b8 c( b) a | d4 b8 g4. |
  }
  \addlyrics {
    Girls and boys come out to play,
    The moon doth shine as bright as day;
  }
>>

[image of music]

今度は、単語は音符に対して正しく並んでいます。しかしながら、shine as 上の音符に対する自動連桁は適当でないように見えます。これを修正するために、手動連桁コマンドを挿入して自動連桁をオーバライドします。詳細は 自動連桁と手動連桁 を参照してください。

<<
  \relative {
    \key g \major
    \time 6/8
    d''4 b8 c4 a8 | d4 b8 g4 g8 |
    a4 b8 c([ b]) a | d4 b8 g4. |
  }
  \addlyrics {
    Girls and boys come out to play,
    The moon doth shine as bright as day;
  }
>>

[image of music]

スラーを用いる方法のほかに、メリスマに含まれるべきである各音符に対応したアンダスコア _ を用いることによってその歌詞がメリスマであるということを示すことができます:

<<
  \relative {
    \key g \major
    \time 6/8
    d''4 b8 c4 a8 | d4 b8 g4 g8 |
    a4 b8 c[ b] a | d4 b8 g4. |
  }
  \addlyrics {
    Girls and boys come out to play,
    The moon doth shine _ as bright as day;
  }
>>

[image of music]

ある歌詞がいくつかの音符に亘って延長される場合や単一の非常に長い音符に割り当てられる場合、通常はその歌詞からその歌詞に対応しているすべての音符の下に延長線 が描かれます。延長線は 2 つのアンダスコア __ で挿入します。今度は、例として Purcell の Dido and Æeneas から最初の 3 小節目からを挙げます:

<<
  \relative {
    \key g \minor
    \time 3/2
    g'2 a bes | bes2( a) b2 |
    c4.( bes8 a4. g8 fis4.) g8 | fis1
  }
  \addlyrics {
    When I am laid,
    am laid __ in earth,
  }
>>

[image of music]

今までの例には複数の音節を持つ単語はありませんでした。通常、複数の音節を持つ単語は音節ごとに 1 つの音符に分割され、音節間はハイフンで結ばれます。ハイフンは 2 つのダッシュとして入力し、その結果として音節の間にハイフンが描かれます。今度の例では歌詞に複数の音節を持つ単語が含まれ、我々が今まで歌詞を音符に揃える方法について学んだことがすべて含まれています。

<<
  \relative {
    \key g \major
    \time 3/4
    \partial 4
    d'4 | g4 g a8( b) | g4 g b8( c) |
    d4 d e | c2
  }
  \addlyrics {
    A -- way in a __ man -- ger,
    no __ crib for a bed,
  }
>>

[image of music]

ある歌詞では – 特にイタリア語では – 反対のことが求められます: 複数の音節を 1 つの音符にセットします。これは音節を単一のアンダスコア _ (スペース無し) でリンクさせるか、クォートで囲むことによって達成されます。今度の例は Rossini の Figaro からで、Largo al factotumalLargogo と同じ音符で歌われなければなりません:

<<
  \relative {
    \clef "bass"
    \key c \major
    \time 6/8
    c'4.~ 8 d b | c8([ d]) b c d b | c8
  }
  \addlyrics {
    Lar -- go_al fac -- to -- tum del -- la cit -- 
  }
>>

[image of music]

参照

記譜法リファレンス: Vocal music


3.3.3 複数の譜への歌詞

\addlyrics を用いた簡単なアプローチは歌詞を複数の譜表の下に置くために使用することができます。ここで、Handel の Judas Maccabæus から例を挙げます:

<<
  \relative {
    \key f \major
    \time 6/8
    \partial 8
    c''8 | c8([ bes]) a a([ g]) f | f'4. b, | c4.~ 4
  }
  \addlyrics {
    Let flee -- cy flocks the hills a -- dorn, __
  }
  \relative {
    \key f \major
    \time 6/8
    \partial 8
    r8 | r4. r4 c'8 | a'8([ g]) f f([ e]) d | e8([ d]) c bes'4
  }
  \addlyrics {
    Let flee -- cy flocks the hills a -- dorn,
  }
>>

[image of music]

この簡単な例よりも複雑な楽譜では、変数を使って楽譜構造を音符と歌詞から分離したほうが良いです。このことは 変数を用いて楽曲を編成する で議論されています。

参照

記譜法リファレンス: Vocal music


3.4 仕上げ

このセクションはチュートリアルの最終セクションです。単純な楽譜に仕上げを加える方法を示し、このマニュアルの残りの部分についての紹介を行います。


3.4.1 変数を用いて楽曲を編成する

これまで議論してきたすべての要素を組み合わせてより大きなファイルを作成すると、音楽表記はずっと大きくなります。多くの譜を持つ多声音楽では、入力ファイルはとても混乱しやすくなります。変数 を使って混乱を避けることができます。

変数 (これは識別子やマクロとも言えます) を使うことによって、音楽表記の複雑さを打破することができます。変数は以下のように割り当てられます:

namedMusic = { … }

音楽表記 namedMusic の内容は名前の前にバックスラッシュを置くことによって (\namedMusic、これはまさに LilyPond の標準コマンドと同様です) 後で使用することができます。

violin = \new Staff {
  \relative {
    a'4 b c b
  }
}

cello = \new Staff {
  \relative {
    \clef "bass"
    e2 d
  }
}

{
  <<
    \violin
    \cello
  >>
}

[image of music]

慣習的に、変数の名前にはアルファベットのみを用います。詳細な情報は、 ファイル構造 を参照してください。

変数はメインの音楽表記の に定義されていなければなりません。しかしながら定義後は必要とされる場所で何度でも使用できます。変数の定義後は、その変数を他の変数定義の中で使うことも可能であり、 楽曲のある部分が何度もリピートしている場合に入力の手間を省くことができます。

tripletA = \relative { \tuplet 3/2 { c'8 e g } }
barA = { \tripletA \tripletA \tripletA \tripletA }

{ \barA \barA }

[image of music]

変数を入力ファイルの中にある他の多くのオブジェクト タイプに対しても使用できます。 例えば以下のようにです:

myWidth = 60      % \paper 変数に渡す数字 (単位は mm)
myName = "Wendy"  % マークアップに渡す文字列
aFivePaper = \paper { #(set-paper-size "a5") }

変数の内容次第では、変数は他の場所で使用することができます。以下の例は上の例の変数を使用しています:

\paper {
  \aFivePaper
  line-width = \myWidth
}

{
  c4^\myName
}

3.4.2 タイトルを付け加える

タイトル、作曲者、作品番号、それに類似の情報は \header ブロックの中に挿入されます。これはメインの音楽表記の外に存在します。普通、\header ブロックはバージョン番号の下に置かれます。

\version "2.24.4"

\header {
  title = "Symphony"
  composer = "Me"
  opus = "Op. 9"
}

{
  … music …
}

ファイルが処理されると、タイトルと作曲者は楽譜の上に譜刻されます。タイトルについての更なる情報は、 Creating titles headers and footers を参照してください。


3.4.3 絶対音符名

これまで我々はピッチを定義するのに \relative を使ってきました。これは通常たいていの音楽を入力するのに最も早い方法です。\relative 無しだとピッチは絶対モードで解釈されます。

LilyPond はすべてのピッチを絶対値として扱います。c' は常にミドル C を意味し、b は常にミドル C の 1 音下の音符を意味し、g, は常にヘ音記号の譜表の最下段の譜線上にある音符を意味します。

{
  \clef "bass"
  c'4 b g, g, |
  g,4 f, f c' |
}

[image of music]

ト音記号に旋律を書く場合は多くのクォート ' 記号が使用されます。モーツァルトからの以下の楽譜の断片について考えてみます:

{
  \key a \major
  \time 6/8
  cis''8. d''16 cis''8 e''4 e''8 |
  b'8. cis''16 b'8 d''4 d''8 |
}

[image of music]

コマンド \fixed に参照用ピッチを続けることにより、共通のオクターブ記号を 1 回だけ示すようにすることができます。

\fixed c'' {
  \key a \major
  \time 6/8
  cis8. d16 cis8 e4 e8 |
  b,8. cis16 b,8 d4 d8 |
}

[image of music]

\relative を使うと、 前の例は 3 譜表スペースより大きいメロディーの動きが無いので、 オクターブ記号が不要になります:

\relative {
  \key a \major
  \time 6/8
  cis''8. d16 cis8 e4 e8 |
  b8. cis16 b8 d4 d8 |
}

[image of music]

\relative モードを使っているときにあなたがオクターブ記号 (',) を付け間違えた場合、すぐにわかります – 多くの音符が間違ったオクターブに譜刻されます。絶対モードを使っているときに付け間違いをした場合、はっきりとせず、見つけにくいです。

しかしながら、絶対モードは大きな音程を持つ音楽に対しては有用であり、LilyPond ファイルをコンピュータで生成する場合は非常に有用です。メロディーの断片をコピー&ペーストした場合、絶対モードは元のオクターブが維持されます。

時には音楽はより複雑な方法でアレンジされます。\relative の中で \relative を使うと、外と中の相対部分は独立しています:

\relative { c'4 \relative { f'' g } c }

[image of music]

\relative の中で絶対モードを使うには、\fixed c { … } の中に絶対モードの音楽を置きます。絶対モードのピッチは相対モードのオクターブに影響しません:

\relative {
  c'4 \fixed c { f'' g'' } c |
  c4 \fixed c'' { f g } c
}

[image of music]


3.4.4 このチュートリアルの後にすべきこと

このチュートリアルを終えた後、あなたは楽譜を 1 つ、2 つ書いてみるべきです。テンプレート にある楽譜の 1 つに音符を付け加えることから始めてください。あなたがこのチュートリアルではカバーされなかった記譜法を必要とする場合、 音楽記譜法 で始まる記譜法リファレンスを参照してください。あなたがテンプレートではカバーされていない楽器のアンサンブルのために楽譜を書こうとする場合、テンプレートを拡張する を参照してください。

あなたがいくつかの短い楽譜を書き終えた後は、学習マニュアルの残りの部分 (3~5 章) を読んでください。もちろん、今それらを読んでも何も問題はありません!しかしながら、学習マニュアルの残りの部分はあなたが LilyPond 入力に馴れていると仮定しています。あなたはそれらの章を今すぐ一読し、もっと経験を積んだ後に読み直すことを望むかもしれません。

このチュートリアルと学習マニュアルの残りの部分では、各セクションの最後に 参照 があり、他のセクションを参照してます: 初めて本書を読むときはこれらの参照を追うべきではありません。あなたが学習マニュアルをすべて読み終えたとき、いくつかのセクションを読み返し、さらに参照を追おうと思うかもしれません。

マニュアルの概要 をまだ読んでいないのなら、それを 読んでください。LilyPond についての情報は多いため、新しく LilyPond を始める人はしばしば、必要な情報を得るためにどこを読むべきかわからないことがあります。5 分間使ってマニュアルの概要を注意深く読めば、あなたは何時間も見当違いの場所を読むフラストレーションを持たずに済ますことができるでしょう!


4. 基礎となるコンセプト

チュートリアルではシンプルなテキスト ファイルから美しい楽譜を譜刻する方法を見てきました。このセクションでは、同じように美しいがより複雑な楽譜を作り出すのに必要とされるコンセプトとテクニックについて紹介します。


4.1 LilyPond 入力ファイルの仕組み

LilyPond の入力フォーマットは非常に自由な形式であり、経験豊富なユーザにとってはファイルを構築する際の自由度が高いです。しかしながら、この自由度が新しいユーザにとっては混乱の元になります。このセクションではこの入力ファイルの構造についていくつか説明します。しかしながら、簡潔さを保つためにいくつかの詳細については目をつぶるかもしれません。入力フォーマットについての完全な記述は、 File structure を参照してください。


4.1.1 LilyPond ファイル構造の紹介

LilyPond 入力ファイルの基本例は以下のようなものです:

\version "2.24.4"

\header { }

\score {
   … 複合音楽表記 …                   % すべての音楽がここに入ります!
  \layout { }
  \midi { }
}

基本パターンは本当にさまざまです。しかしながら、この例はスタート地点として役に立ちます。

これまで、あなたが見てきた例では \score {} コマンドを使用していませんでした。その理由は、あなたが LilyPond に与えたのが簡単な入力であった場合、LilyPond が自動的に追加のコマンドを付け加えるからです。LilyPond は以下のような入力:

\relative {
  c''4 a d c
}

を以下を簡略表記したものとして扱います:

\book {
  \score {
    \new Staff {
      \new Voice {
        \relative {
          c''4 a b c
        }
      }
    }
    \layout { }
  }
}

言い換えると、入力が保持しているのが単一の音楽表記である場合、LilyPond はまるでその音楽表記が上で示されたコマンドで包まれているかのように解釈します。

一言警告! LilyPond ドキュメントの中にある多くの例では、 \new Staff\new Voice コマンドは暗黙的に作成されるために省略されています。簡単な例ではそれでうまくいきますが、より複雑な例の場合 – 特に追加のコマンドが使用される場合 – コンテキストの暗黙的な作成は予想外の結果となる可能性があります。多分、予期しない余分な譜が作成されるでしょう。コンテキストを明示的に作成する方法は コンテキストとエングラーバ で説明されています。

Note: 数行以上の音楽を入力する場合、常に譜とボイスを明示的に作成したほうが賢明です。

今度は最初の例に戻って、\score コマンドについて検証します。他のことはデフォルトのままにしておきます。

\score ブロックは常にただ 1 つの音楽表記を保持していなければなりません。音楽表記は単一の音符である場合もありますし、以下のような巨大な複合表記である場合もあるということを覚えておいてください:

{
  \new StaffGroup <<
     … ワーグナーのオペラの楽譜全体がここに入ります … 
  >>
}

すべては { … } の内部にあるため、それは 1 つの音楽表記であるとカウントされます。

以前見てきたように、\score ブロックは他のものを含む可能性もあります。例えば以下のように:

\score {
  { c'4 a b c' }
  \header { }
  \layout { }
  \midi { }
}

これら 3 つのコマンド – \header, \layout, \midi – は特別なものであるということに注意してください: バックスラッシュ (\) で始まる他の多くのコマンドとは異なり、これらは音楽表記 ではなく、何らかの音楽表記の一部でもありません。そのため、これらは \score ブロックの中に置くこともできますし、外部に置くこともできます。実際、これらのコマンドは一般的に \score ブロックの外側に置かれます – 例えば、このセクションの最初の例のように \header はしばしば \score コマンドの上に置かれます。

以前は見なかった他の 2 つのコマンドは \layout { }\midi { } です。それらが上記のように記述された場合、LilyPond はそれぞれ譜刻された楽譜と MIDI 出力を作り出します。それらは記譜法リファレンスの Score layout Creating MIDI output で完全に記述されています。

あなたは複数の \score ブロックを記述するかもしれません。それらはそれぞれ別々の楽譜として扱われますが、それらは結合されて単一の出力ファイルに収められます。\book コマンドは必要ありません – このコマンドは暗黙的に 1 つ作成されます。しかしながら、あなたが 1 つの .ly ファイルから別々に分かれた出力ファイルを作成しようとするのなら、それぞれのセクションを異なる出力ファイルに分けるために \book コマンドが使用されます: 各 \book ブロックは別々の出力ファイルを作り出します。

要約:

\book ブロックは別々の出力ファイル (つまり PDF ファイル) を作成します。あなたが明示的に \book コマンドを記述しなかった場合、LilyPond は暗黙的に入力コードを \book ブロックで包み込みます。

\score ブロックは \book ブロック内部で別々の音楽表記のチャンク (塊) となります。

\layout ブロックはそのブロックを含んでいる \score ブロックや \book ブロックに影響を与えます – つまり、ある \score ブロックの内部にある \layout ブロックはその \score ブロックにだけ影響を与え、\score ブロックの外部にある (それゆえ、明示的あるいは暗黙的に \book ブロックの中にある) \layout ブロックはその \book ブロックの中にあるすべての \score に影響を与えます。

詳細は、 Multiple scores in a book を参照してください。

もう一つの重要な簡略表記は変数を定義することです。すべてのテンプレートがこれを使っています:

melody = \relative {
  c'4 a b c
}

\score {
  \melody
}

LilyPond がこのファイルを見ると、melody の値 (イコール記号の後にあるすべて) を記憶し、\melody と記述された箇所すべてにその値を挿入します。変数の名前について特別なことは何もありません – 変数名は melody, global, keyTime, pianorighthand などとなります。変数名はアルファベットだけで構成されていて、LilyPond コマンド名と異なっている限りは、ほぼどんな名前でも使用できるということを覚えておいてください。詳細は、変数と関数を用いて入力の手間を省く を参照してください。変数名の厳密な制限については、 File structure で詳述されています。

参照

入力フォーマットの完全な定義は、 File structure を参照してください。


4.1.2 Score は (単一の) 複合的な音楽表記

前のセクション – LilyPond ファイル構造の紹介 – で LilyPond 入力ファイルの一般的な構造について見てきました。しかしながら、我々は最も重要な部分を飛ばしてきたようです: どうやって \score の後に記述するものを見つけ出すのでしょうか?

我々はそのことを完全には飛ばしてきませんでした。この大きな謎は簡単なことであり、謎でもなんでもないのです。以下の行がこの謎についてすべてを説明しています:

\score ブロックはただ 1 つの音楽表記のみを含まなくてはなりません。

音楽表記が意味しているものを理解するには、チュートリアルの 音楽表記についての説明 を読み返すと役に立つかもしれません。そこでは、小さな音楽表記 – 音符から始めて、それから和音など – から大きな音楽表記を構築する方法を説明しています。今度は、大きな音楽表記から始めます。話を簡単にするために、例を歌手 1 人とピアノとします。このアンサンブルでは StaffGroup は必要ありません。StaffGroup はいくつかの譜をグループ化して左端に括弧を付けるだけですが、我々は歌手 1 人とピアノ用の譜を必要としています。

\score {
  <<
    \new Staff = "singer" <<
    >>
    \new PianoStaff = "piano" <<
    >>
  >>
  \layout { }
}

ここで譜に名前を付けます – “singer” と “piano” です。 ここで名前を付ける必要は必ずしもありませんが、一見して各譜が何なのか見て取れるので名前を付けておくべきです。

歌手とピアノが同時進行であることを示すために { … } の代わりに << … >> を使用するということを思い出してください。こうすることで、ボーカル パートはピアノ パートの上に表示されます。上の例で歌手の譜が一続きの音楽表記を保持するだけであるのなら << … >> を使う必要はありませんが、譜が同時進行する複数の音楽表記 – 例えば、同時進行する 2 つの声部や、声部と歌詞です – を保持するのであれば必須となります。我々は歌詞を持つ声部にしようとしているので、二重角括弧が必須です。実際の音楽は後で付け加えるとして、ここではいくつかのダミーの音符と歌詞を配置してみます。歌詞の入力の仕方を忘れてしまったのなら、簡単な歌曲を作成する\addlyrics を見直してください。

\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 { }
}

[image of music]

更に詳細を加えていきます。歌手の譜は Voice (LilyPond では、この用語は音符のセットを参照するものであり、必ずしもボーカルの音符であるわけではありません – 例えば、一般にバイオリンは 1 つのボイスを演奏します) と歌詞を保持します。さらに、ピアノの譜表は上部譜表(右手) と下部譜 (左手) を保持します。

この段階で、音符の入力を開始することができます。\new Voice = "vocal" の後の波括弧の中に、以下を書き加えることができます:

\relative {
  r4 d''8\noBeam g, c4 r
}

しかしながら、そのようにすると、\score セクションは非常に長くなり、何が起こるのか理解しにくくなります。そのため、直接音符を付け加える代わりに変数を使用しましょう。前のセクションで変数についての紹介を行いました。覚えていますよね?text 変数の内容が間違いなく歌詞と解釈されるよう、内容の前に \lyricmode を記述します。\addlyrics と同様に、これは入力モードを歌詞に切替間す。\lyricmode を記述しなければ、LilyPond は内容を音符と解釈しようとしてエラーを引き起こします。 (他にもいくつかの入力モードがあります。 Input modes を参照してください。)

では、いくつかの音符を加えて、左手にはヘ音記号を加えます。これで、実際の楽譜の一部ができます:

melody = \relative { r4 d''8\noBeam g, c4 r }
text   = \lyricmode { And God said, }
upper  = \relative { <g' d g,>2~ <g d g,> }
lower  = \relative { b,2 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 { }
}

[image of music]

\score セクションを書いている (あるいは読んでいる) とき、ゆっくりと注意深く進めてください。外側のレベルから始めて、それから内部の細かな部分に取り組んでください。さらに、きちんとインデントを入れると非常に役に立ちます – これは、テキスト エディタの中で同じレベルにある各要素は同じ水平位置から始まるということを保証します。

参照

記譜法リファレンス: Structure of a score


4.1.3 音楽表記をネストする

すべての譜を開始時に宣言することは必須ではありません。譜はどこででも臨時に導入される可能性があります。これはオッシアを作成する際に特に有用です – ossia を参照してください。ここで、3 つの音符に対して臨時に新しい譜を導入する方法を示すちょっとした例を挙げます:

\new Staff {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff {
        f8 f c
      }
    >>
    r4 |
  }
}

[image of music]

音部記号のサイズは音部変更後に譜刻される音部記号のサイズ – 行の開始点での音部記号よりも少し小さい – と同じであるということに注意してください。これは行の途中で譜刻される音部記号全般に言えることです。

オッシアは以下のように譜の上に置かれるかもしれません:

\new Staff = "main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main"
      } { f8 f c }
    >>
    r4 |
  }
}

[image of music]

この例は後で説明される \with を使用しています。このコマンドは単一の譜のデフォルトの振る舞いを変更することを意味します。ここでは、このコマンドは新しい譜をデフォルトの位置 (“main” と呼ばれている譜の下) ではなく、上に置くべきであると言っています。

参照

オッシアはしばしば音部記号や拍子記号無しで描かれ、通常は小さなフォントで描かれます。これらはまだ紹介されていない追加のコマンドを必要とします。オブジェクトのサイズ オッシア譜 を参照してください。


4.1.4 入力音符の構造

LilyPond の入力における音符は、順番にピッチ、長さ、1 つ以上の‘後置イベント’ (省略可能) からなります。LilyPond における‘後置イベント’ は、アーティキュレーション、運指、弦番号、スラー、タイ、テキストなどを追加するものです。

ピッチは、現在の音符名の言語 ( Note names in other languages で説明されています) に基づいて明示的に指定されます。ピッチが省略された場合、その音符のピッチは前の音符と同じものになります。 Durations を参照してください。rs はピッチではないことに注意してください。

長さは、数字と省略可能な 1 つ以上のドットからなります。長さが明示的に指定されない場合、その音符の長さは前の音符、和音、休符、空白休符と同じものになります。 Durations を参照してください。

後置イベントはこれらの後に付加するものです。例えば、c’ の 8 分音符に、1 の運指記号、テヌート アーティキュレーション、スラーの開始、タイの開始、テキスト指示を付加したいとしましょう。これは以下のようになります:

{ c'8-1--(~^\markup{"text annotation"} c' d') }

[image of music]

参照

学習マニュアル: タイとスラー, アーティキュレーションと強弱記号, テキストを追加する

記譜法リファレンス: Pitches, Rhythms, Expressive marks


4.1.5 ネストされない括弧とタイ

これまでに LilyPond への入力ファイルを書く際に使用する括弧と括弧のような構成物にはいくつかの種類があるということを見てきました。これらは異なる規則 – 最初は混乱を引き起こす可能性があります – に従います。規則についての説明を行う前に、括弧と括弧のような構成物の種類を再確認してみましょう。

括弧のタイプ機能
{ … }一続きの音楽を囲みます
< … >和音となる音符を囲みます
<< … >>同時進行する音楽表記を囲みます
( … )スラーの開始点と終了点を意味します
\( … \)フレージング スラーの開始点と終了点を意味します
[ … ]手動連桁の開始点と終了点を意味します

こららに対して、音符の間や音符をまたがって線を生成する他の構文を付け加えるべきです: タイ (チルド ~ によって記述されます)、連符 (\tuplet x/y { … } として記述されます)、グレイス ノート (\grace { … } として記述されます) です。

LilyPond 以外では、種類の異なる括弧が適切にネストされること – [ { ( … ) } ] のように – が一般的な使い方であり、括弧の終わりの順序は正確に括弧の始まりの順序と逆になります。このことは上記の表で ‘囲みます’ という言葉で記述されている 3 種類の括弧に対しては必須となります – それらは適切にネストされなければなりません。しかしながら、残りの括弧のような構成物 – 上記の表で ‘意味します’ という言葉で記述されいるものと、タイ、連符で使用されるもの – はいかなる括弧ともネストされる必要は ありません。実際、これらは何かを囲むという意味では括弧ではありません – それらは単に何かが始まる場所、終わる場所を示すためのマークです。

そのため、例えばフレージング スラーは手動で挿入される連桁の前に開始して、その手動連桁の前に終わる可能性もあります – たぶん音楽的ではないかもしれませんが、可能性はあります:

\relative { g'8\( a b[ c b\) a] g4 }

[image of music]

一般に、種類の異なる括弧、括弧のような構成物、それに連符、タイ、装飾小音符の囲みは自由に組み合わせることができます。以下の例では、連桁は連符の中にまで伸びていて (行 1)、スラーは連符の中にまで伸びていて (行 2)、連桁とスラーが連符の中にまで伸びていて (行 3)、タイが 2 つの連符にまたがっていて、さらにフレージング スラーが連符の外にまで伸びています (行 3 と 4)。

\relative {
  r16[ g' \tuplet 3/2 { r16 e'8] }
  g,16( a \tuplet 3/2 { b16 d) e }
  g,8[( a \tuplet 3/2 { b8 d) e~] } |
  \tuplet 5/4 { e32\( a, b d e } a4.\)
}

[image of music]


4.2 音楽を保持するボイス

歌手は歌うボイスを必要とし、LilyPond も歌う (演奏する) ボイスを必要とします。楽譜の中にあるすべての楽器に対する実際の音楽はボイスの中に保持されます – このことは LilyPond すべてのコンセプトの中での最も基礎的なことです。


4.2.1 私はボイスを聴いている

LilyPond の楽譜の中で最も低レベルで、最も基礎的であり、最も内部にあるレイヤは ‘ボイス コンテキスト’ または縮めて単に ‘ボイス’ と呼ばれます。ボイスはときどき他の記譜法パッケージの中で ‘レイヤ’ と呼ばれます。

実際、ボイス レイヤまたはコンテキストは音楽を保持することができる唯一のものです。ボイス コンテキストが明示的に宣言されていない場合、この章の始めで見てきたようにボイス コンテキストが 1 つ自動的に生成されます。オーボエなどといった楽器は同時に 1 つの音符だけを演奏できます。そのような楽器のために書かれた楽譜はボイスを 1 つだけを必要とします。ピアノのように同時に複数の音符を演奏することができる楽器はしばしば、それらが演奏することのできる同時進行の異なる音符やリズムをエンコードするために、複数のボイスを必要とします。

もちろん、単一のボイスは和音の中で多くの音符を保持することができます。それでは、複数のボイスが実際に必要とされるのはどんな場合なのでしょうか?まずは、4 つの和音を持つ以下の例を見てください:

\relative {
  \key g \major
  <d' g>4 <d fis> <d a'> <d g>
}

[image of music]

この例は単一の山括弧からなる和音記号 < … > を使って表記することができ、必要とされるボイスは 1 つだけです。しかしながら、F シャープが A に移行する際に、F シャープは実際には 8 分音符であり、そのあとに 8 分音符の G が続くとしたらどうでしょうか?そのような場合、同時に開始されるが演奏時間が異なる 2 つの音符を持つことになります: 4 分音符の D と 8 分音符の F シャープです。これらの音符をどのように記述すればよいのでしょうか?これらの音符は和音として記述することはできません。なぜなら、和音の中の音符はすべて同じ演奏時間でなければならないからです。そして、それらの音符は同時に開始しなければならないので、2 つのシーケンシャルな (連続した) 音符として記述することもできません。この場合は 2 つのボイスが必要となります。

上記のことが LilyPond 入力構文でどのように達成されるのかを見てみましょう。

1 つの譜に複数のボイスがある楽譜を入力する最も簡単な方法は、各ボイスをシーケンスに (続けて) 入力し (各ボイスを { … } の中に入れます)、それらのボイスを << … >> を使って同時進行するよう組み合わせます。さらに、各断片は、それぞれが別の断片であることを示すために、ダブル バックスラッシュ \\ で区切られなければなりません。ダブル バックスラッシュが無ければ、すべての音符は単一のボイスの中に挿入され、通常はエラーとなります。このテクニックは、大部分が同じ音で、時々短い部分で多声になる楽曲に特に適しています。

以下では、上記の例の和音を 2 つのボイスに分け、経過音とスラーを付け加えています:

\relative {
  \key g \major
  %    Voice = "1"             Voice = "2"
  << { g'4 fis8( g) a4 g } \\ { d4 d d d }  >>
}

[image of music]

この例では 2 番目のボイスの符幹が下向きになっていることに気付いてください。

今度はもう 1 つ簡単な例を挙げてみます:

\relative {
  \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 }       >> |
}

[image of music]

各小節で別々に << \\ >> 構造を使用する必要はありません。各小節に音符が少ししかないような音楽の場合、このレイアウトはコードの可読性を良くするのに役立ちます。しかしながら、各小節に多くの音符がある場合、以下のようにボイス毎に分離した方が良いかもしれません:

<<
  \key d \minor
  \relative { % Voice = "1"
    r4 g' g4. a8 |
    bes4 bes c bes |
    a2. r4 |
  } \\
  \relative { % Voice = "2"
    d'2 d4 g |
    g4 g g8( a) g4 |
    fis2. s4 |
  }
>>

[image of music]

この例にあるボイスは 2 つだけです。しかしながら、これと同じ構成にもっと多くのバック スラッシュを付け加えることによって、3 つかそれ以上のボイスを持たせることが可能です。

ボイス コンテキストは "1", "2" などの名前を持ちます。最初の 2 つのコンテキストは 外側 のボイスをセットして、上のボイスはコンテキスト "1"、下のボイスはコンテキスト "2" になります。内側のボイスはコンテキスト "3""4" になります。これらの各コンテキストでは、スラー、符幹、タイ、強弱記号などの垂直方向の向きは適切にセットされます。

\new Staff \relative {
  % Main voice
  c'16 d e f
  %  Voice = "1"   Voice = "2"             Voice = "3"
  << { g4 f e } \\ { r8 e4 d c8~ } >> |
  << { d2 e }   \\ { c8 b16 a b8 g~ 2 } \\ { s4 b c2 } >> |
}

[image of music]

もし別の順番で – 例えば上から下の順番に – ボイスを入力したい場合、 << … >> 構造の前に \voices を用いることで、各ボイスの番号を指定することができます。以下は例です。

\new Staff \relative {
  % Main voice
  c'16 d e f
  %  Voice = "1"   Voice = "2"
  << { g4 f e } \\ { r8 e4 d c8~ } >> |
  \voices 1,3,2
  %  Voice = "1"   Voice = "3"    Voice = "2"
  << { d2 e }   \\ { s4 b c2 } \\ { c8 b16 a b8 g~ 2 } >> |
}

[image of music]

これらのボイスはすべてメインのボイスからは分かれています。メインのボイスの音符は<< … >> 構造の外にあるからです。この << … >> 構造を 同時進行構造 と呼ぶことにしましょう。スラーとタイは同じボイス内にある音符だけをつなぎます。そのため、スラーとタイは同時進行構造を出たり入ったりすることはありません。反対に、同じ譜上にある個々の同時進行構造で、平行の位置にあるボイスは同じボイスになります。さらに、その他のボイス関連プロパティは同時進行構造をまたがって持ち越されます。ここで、上記と同じ例で各ボイスに対して異なる色と符頭を割り当ててみます。あるボイスでの変更は他のボイスに影響を与えませんが、その後に続く同じボイス (訳者: 平行位置にあるボイス) でその変更が維持されることに注意してください。さらに、タイでつながれた音符は、同じボイスとなる 2 つの同時進行構造にまたがって分かれるかもしれないということに注意してください。

\new Staff \relative {
  % Main voice
  c'16 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~ 2 }
  \\
    {
      \voiceThreeStyle
      s4 b c2
    }
  >> |
}

[image of music]

コマンド \voiceXXXStyle は主にこのマニュアルのような教育目的のドキュメントで使用することを意図したものです。このコマンドは、各ボイスが容易に見分けられるように、符頭、符幹、連桁の色、それに符頭のスタイルを変更します。ボイス 1 は赤でダイアモンドの符頭を持つようにセットされ、ボイス 2 は青で三角形の符頭を、ボイス 3 は緑で×付きの円を、ボイス 4 (ここでは使用されていません) はマゼンダの×の符頭を持つようにセットされます。\voiceNeutralStyle (これもここでは使用されていません) は符頭のスタイルをデフォルトに戻します。後ほど、ユーザがこのようなコマンドを作成するための方法を見ていきます。オブジェクトの可視性と色レイアウトの調整のために変数を使用する を参照してください。

多声部は \relative { } ブロック内の音符の相対関係を変えません。各音符は直前の音符あるいは直前の和音の最初の音符との相対関係で計算されます。そのため、以下の例では

\relative { noteA << < noteB noteC > \\ noteD >> noteE }

noteBnoteA との相対関係で決まり
noteCnoteA ではなく noteB との相対関係で決まり
noteDnoteAnoteC ではなく noteC との相対関係で決まり
noteEnoteA ではなく noteD との相対関係で決まります。

各ボイスの中にある音符の音程がボイスごとに大きく離れている場合、各ボイスの始めに \relative コマンドを置くと明瞭になるかもしれません:

\relative { noteA … }
<<
  \relative { < noteB noteC > … }
\\
  \relative { noteD … }
>>
\relative { noteE … }

最後に、もっと複雑な楽曲の中にあるボイスを分析してみましょう。以下は、ショパンの Deux Nocturnes, Op 32 の 2 番の最初の 2 小節です。この例は、記譜を行うためのテクニックをいくつか示すために、本章の後の方と次の章で使用されます。ですから、今はコードの中にある意味不明に見えるものは無視して、音楽とボイスだけに注目してください – 込み入った内容は後ほど説明します。

[image of music]

符幹の向きはしばしば 2 つの同時進行する旋律ラインのつながりを示すために使用されます。ここでは、一番上の音符の符幹はすべて上向きであり、下の方にある音符の符幹はすべて下向きです。これは、複数のボイスが必要とされているということを示す最初の兆候です。

しかしながら、複数のボイスが実際に必要とされるのは、同時に始まる音符が異なる演奏時間を持つ場合です。最初の小節の 3 拍目を見てください。A フラットは付点 4 分音符であり、F は 4 分音符、D フラットは半音符です。これらの音符を和音として記述することはできません。なぜなら、和音の中の音符はすべて同じ演奏時間でなければならないからです。これらの音符をシーケンシャルな (連続する) 音符として記述することもできません。なぜなら、これらの音符は同時に始まらなければならないからです。この箇所では 3 つのボイスが必要となり、以下に示すように一般的にはこの小節全体を 3 つのボイスで記述します。そこでは、3 つのボイスに対して異なる符頭と色を割り当てています。もう一度繰り返しますが、この例のコードのことは後ほど説明しますので、理解できないことは無視してください。

[image of music]

この音楽のコードをゼロから記述してみましょう。これから見ていくように、いくつかの問題に遭遇します。すでに学んだように、最初の小節の音楽を 3 つのボイスに分けて記述するために << \\ >> 構造を使用します:

\new Staff \relative {
  \key aes \major
  <<
    { c''2 aes4. bes8 } \\ { <ees, c>2 des } \\ { aes'2 f4 fes }
  >> |
  <c ees aes c>1 |
}

[image of music]

符幹の向きは自動的に割り当てられ、奇数番号のボイスが上向きの符幹、偶数番号のボイスが下向きの符幹を持ちます。ボイス 1 と 2 の符幹は正しいのですが、ボイス 3 の符幹はここでは下向きになるべきです。ボイス 3 を省略して音楽をボイス 4 に記述することによって修正できます。ボイス 3 を省略するには、\\ を 2 つ記述します:

\new Staff \relative {
  \key aes \major
  \voices 1,2,4   % ボイス 3 を省略
  <<  % ボイス 1
    { c''2 aes4. bes8 }
  \\  % ボイス 2
    { <ees, c>2 des }
  \\  % ボイス 4
    { aes'2 f4 fes }
  >> |
  <c ees aes c>1 |
}

[image of music]

これにより符幹の向きが修正されました。しかしながら、音符の水平方向の配置が望んだとおりになっていません。内側の音符の符頭や符幹が外側のボイスと衝突する場合 LilyPond は内側の音符の位置をずらしますが、これはピアノ譜では不適切です。他の状況でも、LilyPond が音符の位置をずらしても衝突が解決されない場合があります。LilyPond は音符の水平方向の位置を調節するための手段をいくつか提供します。しかしながら、我々はまだこの問題を修正するための方法を見ていく準備が整っていないので、この問題は後に残しておくことにします – 表記の重なりを修正するforce-hshift プロパティを参照してください。

Note: 歌詞、スパナ (スラー、タイ、強弱のヘアピン記号など) をボイスを‘またいで’ 作成することはできません。

参照

記譜法リファレンス: 複数のボイス


4.2.2 ボイスを明示的にインスタンス化する

多声部音楽を作成するためにボイス コンテキストを手動で << >> ブロックの中に作成することもできます。符幹、スラーなどの向きを示すために \voiceOne\voiceFour を使用します。この手法は各ボイスを別々にして、より記述的な名前を与えることを可能にするため、長い楽譜ではわかりやすいものになります。

本質的には、前のセクションで使用した構造 << \\ >>:

\new Staff {
  \relative {
    << { e'4 f g a } \\ { c,4 d e f } >>
  }
}

は以下と等価です:

\new Staff <<
  \new Voice = "1" { \voiceOne \relative { e'4 f g a } }
  \new Voice = "2" { \voiceTwo \relative { c'4 d e f } }
>>

上記の両方ともが以下の楽譜を生成します:

[image of music]

\voiceXXX コマンドは符幹、スラー、タイ、アーティキュレーション、テキストの注釈、付点音符の付点、運指記号の向きをセットします。\voiceOne\voiceThree はこれらのオブジェクトを上向きにし、一方の \voiceTwo\voiceFour は下向きにします。さらに、符頭の衝突を避ける必要がある場合、これらのコマンドは各ボイスに対して水平方向のシフトを発生させます。コマンド \oneVoice は設定を単一のボイスの場合の通常値に戻します。

いくつかの簡単な例で、\oneVoice, \voiceOne, \voiceTwo がマークアップ、タイ、スラー、強弱記号に与える影響を見ていきましょう:

\relative {
  % Default behavior or behavior after \oneVoice
  c'4 d8~ 8 e4( f | g4 a) b-> c |
}

[image of music]

\relative {
  \voiceOne
  c'4 d8~ 8 e4( f | g4 a) b-> c |
  \oneVoice
  c,4 d8~ 8 e4( f | g4 a) b-> c |
}

[image of music]

\relative {
  \voiceTwo
  c'4 d8~ 8 e4( f | g4 a) b-> c |
  \oneVoice
  c,4 d8~ 8 e4( f | g4 a) b-> c |
}

[image of music]

今度は、前のセクションの例を使って同じ多声部音楽のパッセージを 4 つの異なる方法で表記する例を見ていきます。それぞれ異なる状況で利点があります。

1 つはメイン ボイスに属する << >> の内部に直接表記を記述する方法です (しかしながら、音符は << \\ >> 構造の中に置かれてはいません)。これはメイン ボイスの途中で追加のボイスが現れる場合に有用です。ここでは例にさらに調整を加えます。赤のダイアモンド形の音符はメイン メロディが単一のボイス コンテキストになっていて、その上にフレージング スラーを描くことができるということを示しています。

\new Staff \relative {
  \voiceOneStyle
  % This section is homophonic
  c'16^( 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~ | 8 b16 a b8 g~ 2 |
    }
    % Initiate third voice
    \new Voice {
      % Set stems, etc, up
      \voiceThree
      s2. | s4 b c2 |
    }
  >>
}

[image of music]

\voices コマンドはメインのボイスを同時進行表記へと続けるためにも使えます。

\new Staff \relative {
  \new Voice = "main" {
    \voiceOneStyle
    % ここは単声です
    c'16^( d e f
    % 3 ボイスの同時進行表記を開始
    \voices "main",2,3
    <<
      % メインのボイスの続き
      { g4 f e | d2 e) | }
      % ボイス 2 の開始
    \\
      % 符幹などの向きが下になります
      { r8 e4 d c8~ | 8 b16 a b8 g~ 2 | }
    \\
      % ボイス 3 の開始
      % 符幹などの向きが上になります
      { s2. | s4 b c2 | }
    >>
  }
}

[image of music]

より深くネストしたポリフォニー構造が可能であり、ボイスが短時間しか現れない場合、これは音楽を組版するより自然な方法です:

\new Staff \relative {
  c'16^( d e f
  <<
    { g4 f e | d2 e) | }
    \new Voice {
      \voiceTwo
      r8 e4 d c8~ |
      <<
        { c8 b16 a b8 g~ 2 | }
        \new Voice {
          \voiceThree
          s4 b c2 |
        }
      >>
    }
  >>
}

[image of music]

新しいボイスを一時的にネストさせる手法は音楽のほんの一部だけが多声である場合に有用です。しかしながら、楽譜全体が多声である場合、一貫して複数のボイスを使用した方がわかりやすくなります。ボイスが無音の場所を飛ばすには以下のように空白音符を使用します:

\new Staff \relative <<
  % Initiate first voice
  \new Voice {
    \voiceOne
    c'16^( d e f g4 f e | d2 e) |
  }
  % Initiate second voice
  \new Voice {
    % Set stems, etc, down
    \voiceTwo
    s4 r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
  }
  % Initiate third voice
  \new Voice {
    % Set stems, etc, up
    \voiceThree
    s1 | s4 b c2 |
  }
>>

[image of music]

音符列

和音の中で小さな間隔で置かれる音符、あるいは異なるボイスで同時に発生する音符は、符頭が重なるのを避けるために 2 列、時にはそれ以上の列に割り振られます。これらの列は音符列と呼ばれます。それぞれのボイスに対して別々の列が存在し、符頭の衝突が起こる場合はボイスごとのシフトが適用されます。これは上の例でも見ることができます。2 小節目でボイス 2 の C はボイス 1 の D との関係で右にシフトされていて、最後の和音でボイス 3 の C も他の音符との関係で右にシフトされています。

\shiftOn, \shiftOnn, \shiftOnnn, それに \shiftOff コマンドは、衝突が起こる場合に音符や和音をシフトさせる度合いを指定します。デフォルトでは、外側のボイス (通常はボイス 1 と 2) には \shiftOff が指定されていて、内側のボイス (ボイス 3 と 4) には \shiftOn が指定されています。シフトが適用される場合、ボイス 1 と 3 は右にシフトされ、ボイス 2 と 4は左にシフトされます。

\shiftOnn\shiftOnnn はさらなるシフト レベルを定義するものであり、複雑な状況での衝突を解決するために一時的に指定されるかもしれません – 実際の音楽からの例 を参照してください。

ある音符列は上向きの符幹を持つボイスからの音符 (あるいは和音) を 1 つだけ、下向きの符幹を持つボイスからの音符 (あるいは和音) を 1 つだけ保持することができます。同じ向きの符幹を持つ 2 つのボイスからの音符が同じ位置に置かれ、両方のボイスにシフトが指定されていない、あるいは同じシフトが指定されている場合、エラー メッセージ “This voice needs a voiceXx or shiftXx setting” (このボイスは \voiceXx\shiftXx の設定が必要です) が生成されます。

参照

学習マニュアル: Moving objects

記譜法リファレンス: 複数のボイス


4.2.3 ボイスとボーカル

声楽には特別な困難があります: 2 つの表記 – 音符と歌詞 – を組み合わせる必要があります。

すでに \addlyrics{} コマンドを見てきました。これは簡単な楽譜であればうまく処理できます。しかしながら、この方法では限界があります。より複雑な音楽では、\new Lyrics を使って歌詞を Lyrics コンテキストに取り込み、ボイスに割り当ている名前を使って \lyricsto{} でその歌詞を明示的に音符にリンクさせます。

<<
  \new Voice = "one" {
    \relative {
      \autoBeamOff
      \time 2/4
      c''4 b8. a16 | g4. f8 | e4 d | c2 |
    }
  }
  \new Lyrics \lyricsto "one" {
    No more let | sins and | sor -- rows | grow. |
  }
>>

[image of music]

歌詞は Staff コンテキストではなく Voice コンテキストにリンクさせなければならないということに注意してください。このため、Staff コンテキストと Voice コンテキストを明示的に作成する必要があります。

LilyPond がデフォルトで使用する自動連桁は楽器だけの音楽ではうまく機能しますが、歌詞を持つ音楽ではそれほどうまく機能しません。そこでは連桁はまったく必要ないか、歌詞のメリスマ (訳者注: 歌詞の 1 音節に対して複数の音符を割り当てること) を示すために使用されるかのどちらかです。上の例では、自動連桁を Off にするためにコマンド \autoBeamOff を使用しています。

以前使用した Judas Maccabæus からの例を再度使用して、より自由度の高い方法を示します。まず、楽譜の内容を変数に振り直し、音楽と歌詞を譜表構造から分離させます。さらに ChoirStaff ブラケットを導入します。歌詞自体は、音楽ではなく歌詞として解釈されることを保証するために、\lyricsmode で導入されなければなりません。

global = { \key f \major \time 6/8 \partial 8 }

SopOneMusic = \relative {
  c''8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ 4
}
SopOneLyrics = \lyricmode {
  Let | flee -- cy flocks the | hills a -- dorn, __
}
SopTwoMusic = \relative {
  r8 | r4. r4 c'8 | 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
      }
    >>
  >>
}

[image of music]

これはすべての声楽譜の基本的な構造です。必要に応じてさらに多くの譜が追加されるかもしれませんし、さらに多くのボイスが譜に追加されるかもしれませんし、さらに多くの歌詞 (原文: verse、各ボイスに対する歌詞、あるいは、歌詞の 1 番、2 番のことを指すと思われる) が歌詞に追加されるかもしれません。音楽部分が長くなりすぎた場合は、音楽を保持している変数を容易に別のファイルに置くことができます。

ここで、例として 4 つの歌詞 – それぞれが SATB (ソプラノ、アルト、テナー、バス) に対してセットされている – を持つ賛美歌の最初の 1 行目を取り上げます。この歌の場合、4 つのパートに対する歌詞の言葉は同じです。変数を使用して音楽記譜と歌詞の言葉を譜表構造から分離させている手法に注意してください。さらに、 ‘keyTime’ と呼ぶことにした変数が、2 つの譜で使用されるいくつかのコマンドを保持するために、使用されていることにも注意してください。他の例では、この変数はしばしば ‘global’ と呼ばれます。

keyTime = { \key c \major \time 4/4 \partial 4 }

SopMusic   = \relative { c'4 | e4. e8 g4  g    | a4   a   g  }
AltoMusic  = \relative { c'4 | c4. c8 e4  e    | f4   f   e  }
TenorMusic = \relative {  e4 | g4. g8 c4.   b8 | a8 b c d e4 }
BassMusic  = \relative {  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 }
    >>
  >>
}

[image of music]

参照

記譜法リファレンス: Vocal music


4.3 コンテキストとエングラーバ

これまでに、コンテキストとエングラーバについて簡単に言及してきました。ここでは、これらのコンセプトをより詳細に見ていくことにします。なぜなら、これらは LilyPond 出力をうまく調節するのに重要だからです。


4.3.1 コンテキストの説明

音楽が譜刻されるとき、入力ファイルでははっきりとは現れてこない多くの記譜要素を出力に追加しなければなりません。例えば、以下の例で入力と出力を比較してください:

\relative { cis''4 cis2. | a4 a2. | }

[image of music]

この入力は内容がやや乏しいですが、出力では小節線、臨時記号、音部記号、拍子記号が追加されています。LilyPond が入力を解釈するとき、音楽情報は時系列に調べられます。これは楽譜を左から右へ読むのと似ています。入力を読み込んでいる間、プログラムは小節の境目となる場所と明示的な臨時記号を必要とするピッチを覚えています。この情報はいくつかのレベルで持続されなければなりません。例えば、臨時記号の効果は単一の譜表に制限されますが、小節線は楽譜全体に亘って同調されなければなりません。

LilyPond 内部では、これらの規則と情報ビットはコンテキストにグループ化されます。すでに Voice コンテキストを見てきました。他にも、Staff コンテキストと Score コンテキストがあります。コンテキストは、楽譜の階層構造を反映するために、階層構造になっています。例えば: Staff コンテキストは多くの Voice コンテキストを保持することができ、Score コンテキストは多くの Staff コンテキストを保持することができます。

context-example

各コンテキストは、いくつかの記譜オブジェクトを作成し、関連プロパティを維持しながら、いくつかの記譜規則を施行する責任があります。例えば、Voice コンテキストは臨時記号を作り出すかもしれず、そうした場合 Staff コンテキストはその小節の残りの部分で臨時記号を表示したり隠したりするための規則を維持します。

他の例としては、小節線の同調はデフォルトでは Score コンテキストが扱います。しかしながら、いくつかの音楽では小節線を同調させたくない場合もあります – 4/4 拍子と 3/4 拍子の多声の楽譜といった場合です。そのようなケースでは、ScoreStaff コンテキストのデフォルト設定を変更しなければなりません。

非常にシンプルな楽譜では、コンテキストは暗黙的に作成され、あなたはそれらに気づく必要もありません。複数の譜表を持つようなより大きな楽曲では、あなたが必要としているだけの譜を手に入れられるよう、さらに、それらの譜が正しい順序で並ぶことを保証するために、コンテキストを明示的に作成する必要があります。特殊な記譜法を持つ楽曲を譜刻するには、通常は既存のコンテキストを変更します。あるいは完全に新しいコンテキストを定義することさえあります。

Score, Staff, Voice コンテキストに加えて、PianoStaffChoirStaff コンテキストといった譜表グループを制御するための、楽譜レベルと譜表レベルの間にあるコンテキストがあります。さらに、代替の譜表コンテキストとボイスコンテキストがあり、歌詞、打楽器、フレットボード (訳者: 弦楽器の一種。フレットでウィキぺディアを参照)、通奏低音 (数字付き低音、原文: figured bass) などのためのコンテキストがあります。

すべてのコンテキスト タイプの名前は 1 つ、あるいは複数の単語からなります。各単語の最初の文字は大文字であり、前の単語のすぐあとに次の単語が続きます。ハイフンやアンダスコアは使いません。つまり GregorianTranscriptionStaff といった具合です。

参照

記譜法リファレンス: Contexts explained


4.3.2 コンテキストを作成する

入力ファイルの中で、(\score コマンドによって導入される) score ブロックは単一の音楽表記を保持しますが、それに関連する出力定義 (\layout ブロックと \midi ブロックのいずれかあるいは両方) も保持することができます。通常、Score コンテキストは省略され、音楽表記の解釈が始まった時点で自動的に作成されます。

ボイスが 1 つだけで、譜も 1 つだけの楽譜では、VoiceStaff も省略して、自動的に作成させることができます。コンテキストは自動的に作成されるために放っておかれるかもしれません。しかしながら、より複雑な楽譜ではこれらを手ずから作成する必要があります。これらを作成する最も簡単なコマンドは \new です。これは音楽表記の前に置きます。例を挙げます:

\new type music-expression

ここで、type はコンテキスト名です (StaffVoice など)。このコマンドは新しいコンテキストを作成し、そのコンテキストの中にある music-expression の解釈を開始します。

Note: 必須の最上位 Score コンテキストとして \new Score を使わないでください。これは、\score ブロックの中にある音楽表記が解釈される時に自動的に作成されます。楽譜全体のコンテキスト プロパティのデフォルト値を変更するには、\layout ブロックの中で行います。コンテキスト プロパティを変更する を参照してください。

これまでに、新たに StaffVoice コンテキストを作成する多くの実際的な例を見てきましたが、これらのコマンドが実際にどのように使用されるのかを覚えてもらうために、実際の音楽に注釈を付けた例を挙げます:

\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 の終了点
    >>  % 左手の譜の終了点
  >>  % 同時進行する譜セクションの終了点
}  % 複合音楽表記の終了点

[image of music]

(波括弧 { や 2 重山括弧 << の中でブロックになっているすべての記述には括弧よりもスペースが 2 つ多いインデントを付けられていて、閉じ括弧には括弧の開始行と同じインデントを付けられているということに注意してください。これは必須ではありませんが、こうしておくと ‘unmatched backet’ (「括弧が一致しない」) エラーを大幅に減らすことができますので、強く推奨します。これにより、音楽の構造を簡単に見て取ることができ、一致していない括弧が明瞭になります。さらに、右手の譜はボイスを 1 つだけしか必要としないために波括弧によって囲まれた単一の音楽表記として作成されているのに対して、左手の譜は 2 つのボイスを必要とするために 2 重山括弧を使って作成されていることにも注意してください。)

また、\new コマンドはコンテキストに識別名を与えて、そのコンテキストを同じタイプの他のコンテキストと区別することを可能にするかもしれません:

\new type = id music-expression

Staff, Voice などといったコンテキスト タイプの名前とそのようなコンテキスト タイプのインスタンスの名前 –これはユーザによって決定され、どのような文字の連なりにもなり得ます – の違いに注意してください。数字とスペースも識別名に使用することができますが、その場合クォートで囲まなければなりません – つまり、\new Staff = "MyStaff 1" music-expression のようになります。識別名はコンテキストのあるインスタンスを参照するために使用されます。このことを歌詞についてのセクションで見てきました。ボイスとボーカル を参照してください。

参照

記譜法リファレンス: Creating and referencing contexts


4.3.3 エングラーバの説明

LilyPond によって作成された楽譜上にあるすべての記号は Engraver によって作り出されます。つまり、譜を譜刻するエングラーバがあり、符頭を譜刻するエングラーバ、符幹を譜刻するエングラーバ、連桁を譜刻するエングラーバなどなどです。そのようなエングラーバは 120 以上あります!幸いなことに、たいていの楽譜では数個のエングラーバについて知っていれば良く、簡単な楽譜ではまったく知らなくても大丈夫です。

エングラーバはコンテキストの中に存在し、そこで活動します。Metronome_mark_engraver などといった楽譜全体に影響を与えるエングラーバは最上位のコンテキスト – Score コンテキスト – で活動します。

Clef_engraverKey_engraver は各 Staff コンテキストの中で見つかります – 譜が異なれば音部記号や調号も異なるかもしれないからです。

Note_heads_engraverStem_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 の出力がどのように変わるのかを見ていきます。

参照

内部リファレンス: Engravers and Performers


4.3.4 コンテキスト プロパティを変更する

コンテキストにはいくつかのコンテキスト プロパティを保持する責任があります。それらプロパティの多くは変更可能であり、変更することで入力の構文解釈に影響を与えて出力の見た目を変化させます。それらプロパティは \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 つの異なる箇所で出現することに注意してください – ブール値での tf の前と、\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
  }
>>

[image of music]

デフォルトのコンテキスト名は Voice であることを思い出してください。このため、2 番目の \set コマンドは Voice コンテキストのプロパティ clefGlyph を “clefs.F” にセットしています。しかしながら、LilyPond は Voice コンテキストでそのようなプロパティを見つけ出さないため、何のアクションも起こしません。これはエラーではなく、ログ ファイルにエラー メッセージは残りません。

同様に、プロパティ名の綴りを間違えた場合もエラー メッセージは表示されず、予期したアクションが起こりません。実際のところ、\set コマンドを使って、存在するいかなるコンテキストにでも、いかなる (架空の) ‘プロパティ’ をセットすることができます。しかしながら、そのプロパティ名を LilyPond が知らない場合、何のアクションも起こしません。LilyPond 入力ファイルに対する特別なサポートを持ついくつかのテキスト エディタは、あなたがプロパティ名の上にマウスを持ってくるとバレット (テキストの先頭に付く小丸) 付きのプロパティ名を表示してそのプロパティの裏づけを行い (LilyPondTool を持つ JEdit)、あるいは未知のプロパティ名をハイライトします (ConTEXT)。そのような機能を持つエディタを使用していないのなら、内部リファレンスでプロパティ名をチェックすることを推奨します: Tunable context properties Contexts を参照してください。

clefGlyph プロパティは Staff コンテキストの中にセットされた場合にのみ効果を持ちますが、いくつかのプロパティは複数のコンテキストの中にセットすることができます。例えば、プロパティ extraNatural はすべての譜に対してデフォルトで ##t (真) にセットされています。ある特定の Staff コンテキストでこれを ##f (偽) にセットした場合、その譜表の臨時記号にのみ適用されます。これを Score コンテキストにセットした場合、すべての譜に適用されます。

それでは、ある譜表の追加ナチュラル記号を消してみます:

<<
  \new Staff \relative {
    aeses'2 aes
  }
  \new Staff \relative {
    \set Staff.extraNatural = ##f
    aeses'2 aes
  }
>>

[image of music]

さらに、すべての譜の追加ナチュラル記号を消します:

<<
  \new Staff \relative {
    aeses'2 aes
  }
  \new Staff \relative {
    \set Score.extraNatural = ##f
    aeses'2 aes
  }
>>

[image of music]

他の例としては、clefTranspositionScore コンテキストにセットされた場合、直ちにすべての譜でのオクターブ表示を変更し、すべての譜に適用される新しいデフォルト値をセットします。

逆のことを行うコマンド \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 |
}

[image of music]

これまでにいくつかのタイプのプロパティ値をセットする方法を見てきました。整数と番号の前には常にハッシュ記号 # が付き、真と偽の値は 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
    }
  }
>>

[image of music]

この方法でプロパティをセットした場合でも、\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
    }
  }
}

[image of music]

プロパティのオーバライドが score の中にあるどの譜にも適用されない場合:

\score {
  <<
    \new Staff {
      \relative {
        gisis'4 gis aeses aes
      }
    }
    \new Staff {
      \relative {
        gisis'4 gis aeses aes
      }
    }
  >>
  \layout {
    \context {
      \Score extraNatural = ##f
    }
  }
}

[image of music]

この方法でセットされたコンテキスト プロパティは、\with ブロックの中の記述によって、さらには、音楽表記の中に埋め込まれた \set コマンドによって、ある特定のコンテキスト インスタンスでは上書きされるかもしれません。

参照

記譜法リファレンス: Changing context default settings, The set command

内部リファレンス: Contexts, Tunable context properties


4.3.5 エングラーバを追加 / 削除する

これまでに、コンテキストはそれぞれにいくつかのエングラーバを保持し、それぞれのエングラーバは出力のある特定部分 – 小節線、譜、符頭、符幹など – の譜刻に責任を持つということを見てきました。あるエングラーバがコンテキストから削除されると、それはもはや出力を行いません。これは出力を変更するための荒っぽい方法ですが、役に立つ場合もあります。

単一のコンテキストの変更

あるコンテキストからあるエングラーバを削除するには、前のセクションで見てたきたのと同様に、コンテキスト作成コマンドの直後に置く \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 |
}

[image of music]

さらに、エングラーバは個々のコンテキストに追加されることもあります。エングラーバを追加するコマンドは以下のようなものです:

\consists Engraver_name,

これを \with ブロックの中に置きます。いくつかのボーカル譜は、その譜表の中にある音符の範囲を示すために、譜表の開始点に音域 (ambitus) を置きます – ambitus を参照してください。音域は 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
    }
  }
>>

[image of music]

しかし、音域エングラーバを 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
    }
  }
>>

[image of music]

同じタイプのコンテキストをすべて変更する

上の例では、個々のコンテキストにエングラーバを追加あるいは削除する方法を示しました。さらに、そのコマンドを \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
    }
  }
}

[image of music]

また、コンテキスト プロパティの値も、上記と同様に \context ブロックの中に \set を含ませることによって、ある特定のタイプのコンテキストすべてに対してセットすることができます。

参照

記譜法リファレンス: Modifying context plug-ins, Changing context default settings

既知の問題と警告

Stem_engraverBeam_engraver はそれらが描くオブジェクトを符頭にくっつけます。Note_heads_engraver が削除されると、符頭は作られず、それゆえ符幹も連桁も作られません。


4.4 テンプレートを拡張する

あなたはチュートリアルを読み終えました。あなたはどのように楽譜を書くかを知っていて、基礎となるコンセプトを理解しています。しかし、どうやったらあなたはあなたが望む譜を手に入れられるでしょうか?あなたにとって良いスタート地点となるかもしれない多くのテンプレートがあります (テンプレート を参照してください)。しかしながら、あなたの望むものがそこでカバーされていなかったらどうしましょう?続きを読んでください。


4.4.1 ソプラノとチェロ

あなたが最終的に望むものに最も近いテンプレートから始めてください。ソプラノとチェロのための楽譜を書きたいということにしましょう。ここでは、‘音符と歌詞’ (ソプラノ パート用) から始めることにします。

\version "2.24.4"

melody = \relative {
  \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 { }
}

これにチェロ パートを追加していきます。‘音符のみ’ のテンプレートを見てみましょう:

\version "2.24.4"

melody = \relative {
  \clef "treble"
  \key c \major
  \time 4/4
  a4 b c d
}

\score {
  \new Staff \melody
  \layout { }
  \midi { }
}

\version コマンドは 2 つも必要ありません。melody セクションは必要です。\score セクションは 2 つも必要ありません – \score が 2 つあると、2 つのパートがばらばらになります。2 つのパートをデュオのように一緒にしたいのです。\score セクションの中に \layout\midi は 2 つも必要ありません。

単に melody セクションをカット&コピーした場合、melody 定義が 2 つになります。これはエラーにはなりませんが、 2 番目の定義が両方の旋律で使われることになります。そのため、2 つの旋律を区別するためにリネームします。ソプラノ用のセクションを sopranoMusic と呼び、チェロ用のセクションを celloMusic と呼ぶことにします。リネームするときに、textsopranoLyrics とりネームしましょう。これらのインスタンスをリネームすることも忘れないでください −- 初期定義 (melody = \relative { 部分) とその名前が使われているところ (\score セクションの中) の両方です。

リネームする際に、チェロ パートの譜も変更しましょう −- 通常、チェロは低音部を使用します。さらに、チェロの音符を変えてみます。

\version "2.24.4"

sopranoMusic = \relative {
  \clef "treble"
  \key c \major
  \time 4/4
  a4 b c d
}

sopranoLyrics = \lyricmode {
  Aaa Bee Cee Dee
}

celloMusic = \relative {
  \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 { }
}

これでうまくいくように見えますが、チェロ パートが楽譜に表示されません −- チェロ パートを \score セクションの中で使っていないからです。チェロ パートをソプラノ パートの下に表示させたいのなら、以下をソプラノの譜の下に追加する必要があります:

\new Staff \celloMusic

さらに、音楽を <<>> で囲む必要もあります −- これは LilyPond に複数のもの (この場合は 2 つの Stave) が同時に起こるということを知らせます。\score は以下のようになります:

\score {
  <<
  <<
    \new Voice = "one" {
      \autoBeamOff
      \sopranoMusic
    }
    \new Lyrics \lyricsto "one" \sopranoLyrics
  >>
  \new Staff \celloMusic
  >>
  \layout { }
  \midi { }
}

これは少し見にくいです。インデントがきちんと入っていません。これは簡単に修正できます。ここで、完成したソプラノとチェロ用のテンプレートを挙げます。

sopranoMusic = \relative {
  \clef "treble"
  \key c \major
  \time 4/4
  a4 b c d
}

sopranoLyrics = \lyricmode {
  Aaa Bee Cee Dee
}

celloMusic = \relative {
  \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 { }
}

[image of music]

参照

開始点となるテンプレートは付録 ‘テンプレート’ で見つけることができます。単一譜テンプレート を参照してください。


4.4.2 4 パート SATB ボーカル譜

Mendelssohn の Elijah や Handel の Messiah などのオーケストラ伴奏付きの 4 パート聖歌隊のために書かれたボーカル譜の多くは 4 つの譜上に音符と歌詞を持ち、それぞれの譜は SATB (ソプラノ、アルト、テナー、バス) のうちの 1 つであり、その下にオーケストラ伴奏のピアノ譜が付きます。ここで、Handel の Messiah から例を挙げます:

[image of music]

Note: このレイアウトは LilyPond に組み込まれているテンプレートを用いることで簡単に実現できます: satb.ly組み込まれているテンプレート を参照してください。簡単に利用できるという利点はありますが、このテンプレートを用いるということは、必要なコンテキスト構造を自動で提供する代わりに、それを隠してしまうということです。ですから学習のために、これを一から作る方法を見てみましょう。組み込みのテンプレートが完全には望みどおりでない場合、この手順を行う必要があるかもしれません。

コピーして編集できるテンプレートの中で、最も近いものは SATB ボーカル譜と自動ピアノ譜 ですが、レイアウトを変更して、ボーカル パートから自動的に生成されたものではないピアノ伴奏譜を付け加える必要があります。ボーカル パートのための音楽と歌詞を保持している変数はそのまま使えますが、ピアノ伴奏譜のための変数を付け加える必要があります。

テンプレートの ChoirStaff の中でコンテキストが出現する順序は上で示したボーカル譜の順序と一致していません。そのため、コンテキストを再配置して、それぞれの歌詞が対応する譜表のすぐ下にくるようにします。すべてのボイスは \voiceOne – これがデフォルトです – になるべきなので、\voiceXXX コマンドは削除すべきです。さらに、テノールに対してハ音記号 (中音部記号) を指定する必要があります。テンプレートの中で歌詞を指定する方法はまだ説明していませんので、馴染みのある方法を使用する必要があります。さらに、それぞれの譜に名前を追加すべきです。

以上のことを ChoirStaff に対して行います:

\new ChoirStaff <<
  \new Staff = "sopranos"
  \with { instrumentName = "Soprano" }
  <<
    \new Voice = "sopranos" {
      \global
      \sopranoMusic
    }
  >>
  \new Lyrics \lyricsto "sopranos" {
    \sopranoWords
  }
  \new Staff = "altos"
  \with { instrumentName = "Alto" }
  <<
    \new Voice = "altos" {
      \global
      \altoMusic
    }
  >>
  \new Lyrics \lyricsto "altos" {
    \altoWords
  }
  \new Staff = "tenors"
  \with { instrumentName = "Tenor" }
  <<
    \new Voice = "tenors" {
      \global
      \tenorMusic
    }
  >>
  \new Lyrics \lyricsto "tenors" {
    \tenorWords
  }
  \new Staff = "basses"
  \with { instrumentName = "Bass" }
  <<
    \new Voice = "basses" {
      \global
      \bassMusic
    }
  >>
  \new Lyrics \lyricsto "basses" {
    \bassWords
  }
>>  % end ChoirStaff

次にピアノ パートに取り掛からなければなりません。これは簡単です – ‘ソロ ピアノ’ テンプレートからピアノ パートを引き抜いてくるだけです:

\new PianoStaff \with { instrumentName = "Piano  " }
<<
  \new Staff = "upper" \upper
  \new Staff = "lower" \lower
>>

そして、upperlower に変数定義を付け加えます。

ChoirStaffPianoStaff の上に置きたいので、それらを山括弧を使って組み合わせなければなりません:

<<  % 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 \with { instrumentName = "Piano" }
  <<
    \new Staff = "upper" \upper
    \new Staff = "lower" \lower
  >>
>>

これらすべてを組み合わせて、上の例の 3 小節分の音楽を付け加えます:

global = { \key d \major \time 4/4 }
sopranoMusic = \relative {
  \clef "treble"
  r4 d''2 a4 | d4. d8 a2 | cis4 d cis2 |
}
sopranoWords = \lyricmode {
  Wor -- thy | is the lamb | that was slain |
}
altoMusic = \relative {
  \clef "treble"
  r4 a'2 a4 | fis4. fis8 a2 | g4 fis fis2 |
}
altoWords = \sopranoWords
tenorMusic = \relative {
  \clef "G_8"
  r4 fis'2 e4 | d4. d8 d2 | e4 a, cis2 |
}
tenorWords = \sopranoWords
bassMusic = \relative {
  \clef "bass"
  r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
}
bassWords = \sopranoWords
upper = \relative {
  \clef "treble"
  \global
  r4 <a' d fis>2 <a e' a>4 |
  <d fis d'>4. <d fis d'>8 <a d a'>2 |
  <g cis g'>4 <a d fis> <a cis e>2 |
}
lower = \relative {
  \clef "bass"
  \global
  <d, d'>4 <d d'>2 <cis cis'>4 |
  <b b'>4. <b' b'>8 <fis fis'>2 |
  <e e'>4 <d d'> <a' a'>2 |
}

\score {
  <<  % ChoirStaff と PianoStaff を並行に組み合わせます
    \new ChoirStaff <<
      \new Staff = "sopranos"
      \with { instrumentName = "Soprano" }
      <<
        \new Voice = "sopranos" {
          \global
          \sopranoMusic
        }
      >>
      \new Lyrics \lyricsto "sopranos" {
        \sopranoWords
      }
      \new Staff = "altos"
      \with { instrumentName = "Alto" }
      <<
        \new Voice = "altos" {
          \global
          \altoMusic
        }
      >>
      \new Lyrics \lyricsto "altos" {
        \altoWords
      }
      \new Staff = "tenors"
      \with { instrumentName = "Tenor" }
      <<
        \new Voice = "tenors" {
          \global
          \tenorMusic
        }
      >>
      \new Lyrics \lyricsto "tenors" {
        \tenorWords
      }
      \new Staff = "basses"
      \with { instrumentName = "Bass" }
      <<
        \new Voice = "basses" {
          \global
          \bassMusic
        }
      >>
      \new Lyrics \lyricsto "basses" {
        \bassWords
      }
    >>  % ChoirStaff の終了

    \new PianoStaff
    \with { instrumentName = "Piano  " }
    <<
      \new Staff = "upper" \upper
      \new Staff = "lower" \lower
    >>
  >>
}

[image of music]


4.4.3 ゼロから楽譜を構築する

LilyPond コードを書くことにある程度熟練した後、あなたはテンプレートの 1 つを変更するよりもゼロから楽譜を構築するほうがより容易であることに気づくかもしれません。さらに、あなたはこの方法であなたの好みのタイプの音楽に適したあなた自身のスタイルを開発することもできます。例として、オルガン前奏曲のための楽譜を作成する手順を見てみましょう。

ヘッダ セクションから始めます。そこでタイトル、作曲者の名前などを記述し、それから任意の変数を定義し、最後にスコア ブロックに取り掛かります。以上のことを概要から始めて、その後に詳細を詰めていきます。

Jesu, meine Freude – これは 2 つの鍵盤とペダルを持つオルガンのために書かれたものです – をベースとする Bach の前奏曲の最初の 2 小節を使います。このセクションの最後でこの音楽の最初の 2 小節を見ることができます。上段鍵盤パートは 2 つのボイスを持ち、下段鍵盤とペダルはそれぞれ 1 つのボイスを持ちます。そのため、4 つの音楽定義と、拍子記号と調号を定義するための 1 つの音楽定義が必要となります:

\version "2.24.4"
\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 {
}

ここでは、実際の音楽の代わりに空白音符 s1 を使用しました。実際の音楽は後で付け加えます。

次に、スコア ブロックで何をすべきなのかを見ていきましょう。単純に望む譜表構造を反映させます。通常、オルガン音楽は 3 つの譜で書かれます – 2 つの鍵盤とペダルのための譜です。鍵盤の譜はブレース (譜表の左端の波括弧) でまとめられているべきなので、それらに対して PianoStaff を使用する必要があります。1 番目の鍵盤パートは 2 つのボイスを必要とし、2 番目の鍵盤パートは 1 つだけボイスを必要とします。

\new PianoStaff <<
  \new Staff = "ManualOne" <<
    \new Voice {
      \ManualOneVoiceOneMusic
    }
    \new Voice {
      \ManualOneVoiceTwoMusic
    }
  >>  % ManualOne Staff コンテキストの終了
  \new Staff = "ManualTwo" <<
    \new Voice {
      \ManualTwoMusic
    }
  >>  % ManualTwo Staff コンテキストの終了
>>  % PianoStaff コンテキストの終了

次にペダル オルガンのための譜表を付け加える必要があります。これは PianoStaff の下にきますが、PianoStaff と同時進行でなければなりませんので、ペダル オルガンのための譜表と PianoStaff を山括弧で囲む必要があります。これを忘れるとエラーがログ ファイルに生成されます。このエラーはあなたが早かれ遅かれ遭遇する一般的なミスです!生成されるエラーを確認するために、このセクションの最後にある例をコピーし、この山括弧を削除し、コンパイルしてみてください。

<<  % 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
    }
  >>
>>

2 番目の鍵盤パートとペダル オルガンの譜表は 1 つだけしか音楽表記を保持しないため、それらに対して同時進行構造 << … >> を使う必要は必ずしもありません。しかしながら、そうしても害はありませんし、\new Staff の後に常に山括弧を置くというのは複数のボイスがある場合では推奨される良い習慣です。Voice はこれとは対照的に、あなたの音楽を連続して演奏すべきいくつかの変数に分けてコード化する場合に Voice の後に波括弧 { … } を常に置くべきです。

この構造をスコア ブロックに付け加えて、インデントを調整しましょう。さらに、適切な音部記号を付け加え、\voiceOne\voiceTwo を使って上部譜の各ボイスで符幹、タイ、スラーの向きが正しくなるようにし、あらかじめ定義しておいた変数 \keyTime を使って拍子記号と調号を各譜に挿入します。

\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 コンテキストの終了

上のオルガン譜のレイアウトはほぼ完璧です。しかしながら、それぞれの譜を見ているだけではわからない、ちょっとした欠陥があります。ペダル譜と左手譜の距離は右手譜と左手譜の距離とほぼ等しくなるべきです。詳しく説明すると、PianoStaff コンテキストの譜の伸縮性は制限される (制限により、左手譜と右手譜の距離はあまりにも大きくなることはありません) ので、ペダル譜も同様に制限されるべきです。

譜の伸縮性は ‘グラフィカル オブジェクト’ VerticalAxisGroupstaff-staff-spacing プロパティで制御することができます。 (LilyPond ドキュメントの中でグラフィカル オブジェクトは ‘grobs’ と呼ばれることが多いです。) 今、グラフィカル オブジェクトの詳細について知らなくても心配しないでください。後で詳しく説明します。興味があるのなら、 Overview of modifying properties を見てください。今回は、stretchability サブ-プロパティを変更する必要があるだけです。さらに興味があるのなら、グラフィカル オブジェクト VerticalAxisGroup の定義を調べていくと、ファイル ‘scm/define-grobs.scm’ の中に staff-staff-spacing プロパティのデフォルト値を見つけることができます。stretchability の値は、PianoStaff コンテキスト (これはファイル ‘ly/engraver-init.ly’ の中にあります) の定義から来ていて、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 コンテキストの終了

これでこの構造は完成です。3 つの譜を持つオルガン譜はいずれも同様の構造を持ちますが、ボイスの数はさまざまになるかもしれません。この後に行うべきことは、音楽を付け加え、各パートを一緒にすることです。

\header {
  title = "Jesu, meine Freude"
  composer = "J S Bach"
}
keyTime = { \key c \minor \time 4/4 }
ManualOneVoiceOneMusic = \relative {
  g'4 g f ees |
  d2 c |
}
ManualOneVoiceTwoMusic = \relative {
  ees'16 d ees8~ 16 f ees d c8 d~ d c~ |
  8 c4 b8 c8. g16 c b c d |
}
ManualTwoMusic = \relative {
  c'16 b c8~ 16 b c g a8 g~ 16 g aes ees |
  f16 ees f d g aes g f ees d ees8~ 16 f ees d |
}
PedalOrganMusic = \relative {
  r8 c16 d ees d ees8~ 16 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 コンテキストの終了

[image of music]

参照

音楽用語集: system


4.4.4 変数と関数を用いて入力の手間を省く

これまでに、以下のような記述を見てきました:

hornNotes = \relative { c''4 b dis c }

\score {
  {
    \hornNotes
  }
}

[image of music]

これは音楽表記を最小化するのに役に立つ可能性があるということに気付くかもしれません:

fragmentA = \relative { a'4 a8. b16 }
fragmentB = \relative { a'8. gis16 ees4 }

violin = \new Staff {
  \fragmentA \fragmentA |
  \fragmentB \fragmentA |
}

\score {
  {
    \violin
  }
}

[image of music]

さらに、これらの変数 (変数、マクロ、(ユーザ定義) コマンドなどと呼ばれます) を調整のために使うこともできます:

dolce = \markup { \italic \bold dolce }

centerText = { \once \override TextScript.self-alignment-X = #CENTER }

fthenp =_\markup {
  \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
}

violin = \relative {
  \repeat volta 2 {
    c''4._\dolce b8 a8 g a b |
    \centerText
    c4.^"hi there!" d8 e f g d |
    c4.\fthenp b8 c4 c-. |
  }
}

\score {
  {
    \violin
  }
}

[image of music]

これらの変数は明らかに入力の手間を省くのに役立っています。例え 1 回しか使用しない音楽であっても、変数化することを考慮する価値はあります – 変数化は複雑さを減らします。前の例を変数化しなかったものを見てみましょう。とても読み難く、特に最後の行が読み難いです。

violin = \relative {
  \repeat volta 2 {
    c''4._\markup { \italic \bold dolce } b8 a8 g a b |
    \once \override TextScript.self-alignment-X = #CENTER
    c4.^"hi there!" d8 e f g d |
    c4._\markup {
      \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
    }
    b8 c4 c-. |
  }
}

これまでに見てきたのは静的な置き換えです – LilyPond は \centerText を見つけると、それを定義した内容 (つまり、centerText= の右側にあるもの) に置き換えます。

LilyPond は非静的な置き換えも処理できます (それらを関数と見なすことができます)。

padText =
#(define-music-function
     (padding)
     (number?)
   #{
     \once \override TextScript.padding = #padding
   #})

\relative {
  c''4^"piu mosso" b a b
  \padText #1.8
  c4^"piu mosso" b a b
  \padText #2.6
  c4^"piu mosso" b a b
}

[image of music]

変数を使うことは、LilyPond 入力構文に変更があった場合の作業を減らす良い方法でもあります ( convert-ly を使ってファイルを更新する を参照してください)。あなたがあなたの入力ファイルすべてに使用する単一の定義 (\dolce のような) を持っていて、構文が変更された場合、すべての .ly ファイルを変更する代わりに、\dolce 定義をアップデートするだけで済みます。 (スタイル シート を参照してください。)


4.4.5 楽譜とパート

オーケストラ音楽では、すべての音符は 2 回譜刻されます。1 回は演奏家のためのパート譜で、1 回は指揮者のための総譜で譜刻されます。変数を使うことで二度手間を避けることができます。音楽は 1 回、変数に入力されます。その変数の内容は、パート譜と総譜の両方を生成するために使用されます。

音符を特別なファイルの中に定義すると便利です。例えば、ファイル horn-music.ly は以下のホルン/バスーン デュオのパートを保持しているとします:

hornNotes = \relative {
  \time 2/4
  r4 f8 a | cis4 f | e4 d |
}

個々のパートは、ファイルの中に以下の記述をすることによって作り出されます:

\include "horn-music.ly"

\header {
  instrument = "Horn in F"
}

{
 \transpose f c' \hornNotes
}

以下の行:

\include "horn-music.ly"

は、ファイルの中でその行が置かれている場所で、‘horn-music.ly’ の内容に置き換わり、hornNotes の定義になります。\transpose f c' は、引数 \hornNotes は 5 度上へ移調すべきであるということを示しています。f の音は譜面に表記された c' で表され、これは通常のフレンチ ホルンを F にチューニングすることに相当します。この移調により出力は以下のようになります:

[image of music]

アンサンブルでは、しばしばボイスの 1 つが何小節も演奏されないことがあります。これは特別な休符 – 複小節休符 – によって示されます。これは大文字の R とその後に続く演奏時間 (全音符には 1、半音符には 2 などです) で入力されます。この演奏時間に掛け算を行うことによって、さらに長い休符を構築することができます。例えば、以下の休符は 2/4 拍子で 3 小節分の長さになります:

R2*3

この部分を譜刻するとき、複小節休符を圧縮する必要があります。これを行う音楽関数が存在します。

\compressMMRests { ... }

これを hornNotes に適用すると、以下のような結果になります:

[image of music]

楽譜はすべての音楽を一緒にすることによって作り出されます。他のボイスはファイル ‘bassoon-music.ly’ の中の bassoonNotes の中にあると仮定すると、楽譜は以下のような記述で作られます:

\include "bassoon-music.ly"
\include "horn-music.ly"

<<
  \new Staff \hornNotes
  \new Staff \bassoonNotes
>>

そして、以下のような楽譜になります:

[image of music]

参照

学習マニュアル: 変数を用いて楽曲を編成する.

記譜法リファレンス: Transpose, Writing parts, Full measure rests, Including LilyPond files.


5. 出力を調整する

この章では出力を変更する方法について議論します。LilyPond は本当にさまざまな設定が可能です。もしかすると出力のすべての部分が変更されるかもしれません。


5.1 調整の基本


5.1.1 調整の紹介

‘調整’ は入力ファイルの解釈中にとられるアクションを変更し、譜刻される楽譜の見た目を変更するためにユーザが利用可能なさまざまな手段を指す LilyPond の用語です。いくつかの調整はとても簡単に使うことができます。他の調整はもっと複雑です。しかしながら、調整のために利用可能な手段を組み合わせることによって、ほとんどいかなる望みの見た目を持った楽譜でも譜刻することが可能になります。

このセクションでは、調整を理解するのに必要な基礎となるコンセプトをカバーします。その後、コピーするだけで効果が得られる作成準備が完了しているさまざまなコマンドについての情報を提供し、同時に、あなたがあなた自身の調整を開発する方法を学べるようにそれらのコマンドがどのように構築されるのかを示します。

この章を読み始める前に、あなたは コンテキストとエングラーバ を再読することを望むかもしれません。なぜなら、コンテキスト、エングラーバとそれらの中に含まれるプロパティは調整について理解し、調整を構成するための基礎だからです。


5.1.2 オブジェクトとインタフェイス

調整には LilyPond プログラムの内部オペレーションと構造体への変更も含まれます。そのため、我々はまずそれらの内部オペレーションと構造体を記述するために使用されるいくつかの用語を導入しなければなりません。

‘オブジェクト’ という用語は入力ファイルを処理している最中に LilyPond によってビルドされる多くの内部構造体を参照するために使われる汎用的な用語です。LilyPond が \new Staff のようなコマンドに遭遇した場合、タイプ Staff の新しいオブジェクトを構築します。その Staff オブジェクトは、その譜のコンテキスト内部で機能するために割り当てられているエングラーバの詳細とともに、その譜に関連付けられているすべてのプロパティ – 例えば、その譜の名前、調号 – を保持します。同様に、Voice オブジェクト、Score オブジェクト、Lyrics オブジェクトなどの他のすべてのコンテキストのプロパティを保持するためのオブジェクトが存在し、さらに、小節線、符頭、タイ、強弱記号などのすべての記譜要素を表すためのオブジェクトも存在します。各オブジェクトはそれ自体のプロパティ値のセットを持ちます。

いくつかのタイプのオブジェクトには特別な名前が与えられています。符頭、符幹、スラー、タイ、運指記号、音部記号などの譜刻される出力上の記譜要素を表すオブジェクトは ‘レイアウト オブジェクト’ と呼ばれ、しばしば ‘グラフィカル オブジェクト’ あるいは短くして ‘グロッブ (Grob: GRaphical OBject)’ と呼ばれます。これらのオブジェクトも上記の汎用的な観点から見るとオブジェクトであり、それゆえ、それらもまたそれらのオブジェクトに関連付けされたプロパティ – そのオブジェクトの位置、サイズ、色など – を持ちます。

いくつかのレイアウト オブジェクトも特別です。フレージング スラー、クレッシェンド、オッターバ記号、他の多くのグラフィカル オブジェクトが置かれる場所は一点ではありません – それらは開始点、終了点、そしておそらくそれらの形に関係する他のプロパティを持ちます。これらのオブジェクトのように形が伸長されるオブジェクトは ‘スパナ (Spanners)’ と呼ばれます。

スパナは生成された後に調整を行うことができません。楽譜全体にわたって続く StaffSymbolLedgerLineSpanner も同様です。ただし、 \stopStaff コマンドによって終了し、\startStaff コマンドで新たに生成された場合を除きます。

また、‘抽象 (abstract)’ グラフィカル オブジェクトというものも存在します。これはオブジェクト自身は出力に何も書き出しませんが、他のグラフィカル オブジェクトを収集し、配置や管理をする役割を担います。 DynamicLineSpanner, BreakAlignment, NoteColumn, VerticalAxisGroup, NonMusicalPaperColumn などが例です。後で、これらがどのように使われるかを見ていきましょう。

‘インタフェイス’ とは何なのかという説明が残っています。多くのオブジェクト – たとえそれらが非常に異なっていたとしても – は同じ方法で処理される必要がある共通特徴を共有します。例えば、すべてのグラフィカル オブジェクトは色、サイズ、位置などを持ち、これらのプロパティはすべて LilyPond が入力ファイルを構文解釈する最中に同じ方法で処理されます。これらの内部オペレーションを簡潔にするために、これらの共通アクションとプロパティは 1 つのグループとして grob-interface と呼ばれるオブジェクトにまとめられています。これと同じような共有プロパティのグループ化が他にも多くあり、それぞれに対して最後に interface が付く名前が与えられています。そのようなインタフェイスの総数は 100 を越えます。我々は後でなぜこれがユーザにとって利益となり、役に立つのかを見ていきます。

これらは、我々がこの章で使用するオブジェクトと関係する主要な用語です。


5.1.3 オブジェクトとプロパティの命名規則

我々は以前にも コンテキストとエングラーバ でいくつかのオブジェクト命名規則を見てきました。ここで参照のために、最も一般的なオブジェクトとプロパティをリストアップし、それに加えてそれらの命名規則と実際の名前の例を挙げます。何らかの大文字のアルファベットを表すために ‘A’ を使用し、いくつかの小文字のアルファベットを表すために ‘aaa’ を使用しています。他の文字は実際の命名でもそのまま使用されます。

オブジェクト/プロパティのタイプ命名規則
コンテキストAaaa や AaaaAaaaAaaaStaff, GrandStaff
レイアウト オブジェクトAaaa や AaaaAaaaAaaaSlur, NoteHead
エングラーバAaaa_aaa_engraverClef_engraver, Note_heads_engraver
インタフェイスaaa-aaa-interfacegrob-interface, break-aligned-interface
コンテキスト プロパティaaa や aaaAaaaAaaaalignAboveContext, skipBars
レイアウト オブジェクト プロパティaaa や aaa-aaa-aaadirection, beam-thickness

これから見ていくのですが、タイプが異なるオブジェクトのプロパティは異なるコマンドによって変更されます。そのため、名前からオブジェクトやプロパティのタイプを識別できるようになると役に立ちます。

参照

記譜法リファレンス: プロパティを変更する


5.1.4 調整手段


\override コマンド

我々はすでに コンテキスト プロパティを変更するエングラーバを追加 / 削除するコンテキスト のプロパティを変更したり、エングラーバ を追加/削除したりするために使用するコマンド \set\with を見てきました。ここでは更に重要ないくつかのコマンドについて見ていきます。

レイアウト オブジェクト のプロパティを変更するためのコマンドは \override です。このコマンドは LilyPond の奥深くにある内部プロパティを変更しなければならないため、これまで見てきたコマンドのように単純な構文ではありません。どのコンテキストの中にあるどのオブジェクトのどのプロパティを変更しなければならないのか、そこにセットする新しい値を何にするのかを正確に知っている必要があります。どのようにこれを行うのかを見ていきましょう。

このコマンドの一般的な構文は以下のようなものです:

\override Context.LayoutObject.layout-property = #value

これは Context コンテキストのメンバである LayoutObject という名前のレイアウトの layout-property という名前のプロパティに値 value をセットします。

必要とされているコンテキストが明白であり、それが最下位レベルのコンテキストである – つまり、Voice, ChordNamesLyrics である – 場合、その Context は省略可能であり (そして通常は省略されます)、この後の例の多くでも省略します。後ほど、コンテキストを指定しなければならない場合について見ていきます。

これから後のセクションでは広範囲に亘るプロパティとそれらの値を扱います – プロパティのタイプ を参照してください。しかしながら、このセクションではそれらのフォーマットとコマンドの使い方を示すために、容易に理解できる簡単なプロパティと値をいくつか使用してみるだけです。

LilyPond の基本的な表記は文字列やマークアップだけでなく、音符や演奏時間のような音楽要素です。数字、シンボル、リストなどのより具体的な表記は ‘Scheme モード’ で処理されます – 表記の先頭に ‘#’ を記述することでこのモードが呼び出されます。Scheme モードについての更なる情報は LilyPond Scheme syntax を参照してください。

\override は調整で用いられる最も一般的なコマンドであり、本章の残りの大半を使ってこのコマンドの使用例を示します。まずは符頭の色を変更する簡単な例を挙げます:

\relative {
  c'4 d
  \override NoteHead.color = #red
  e4 f |
  \override NoteHead.color = #green
  g4 a b c |
}

[image of music]


\revert コマンド

一旦オーバライドされると、そのプロパティは再度オーバライドされるか \revert コマンドに遭遇するまで新しい値のままでいます。\revert コマンドは以下の構文を持ち、プロパティの値をオリジナルのデフォルト値に戻します。何度か \override コマンドが発行されている場合は、前の値に戻すわけではないということに注意してください。

\revert Context.LayoutObject.layout-property

繰り返しますが、\override コマンドでの Context と同様に、多くの場合で Context を記述する必要はありません。以下の例の多くで、Context は省略されます。ここでは、最後の 2 つの音符の符頭の色をデフォルトに戻します:

\relative {
  c'4 d
  \override NoteHead.color = #red
  e4 f |
  \override NoteHead.color = #green
  g4 a
  \revert NoteHead.color
  b4 c |
}

[image of music]


\once 接頭辞

\override, \revert, \set, \unset コマンドには接頭辞 \once が付く可能性があります。これはこのようなコマンドをその場一回限り有効にし、その後にそのプロパティの値をデフォルト値に戻します。上と同じ例を使って、以下のように 1 つだけの音符の色を変更することができます:

\relative {
  c'4 d
  \override NoteHead.color = #red
  e4 f |
  \once \override NoteHead.color = #green
  g4 a
  \once \revert NoteHead.color
  b c |
  \revert NoteHead.color
  f2 c |
}

[image of music]

\once 接頭辞をさまざまな定義済みコマンドの前に置くことで、コマンドの効果を次の音楽タイミングに限定することもできます:

\relative {
  c'4( d)
  \once \slurDashed
  e4( f) |
  g4( a)
  \once \hideNotes
  b( c) |
}

[image of music]


\overrideProperty コマンド

オーバライド コマンドには \overrideProperty というもう 1 つのフォーマットがあり、時々必要となります。完璧を期すためにここでこれに言及しましたが、詳細は Difficult tweaks を参照してください。


\tweak コマンド

利用可能な最後の調整コマンドは \tweak です。これは同じ音楽タイミングで発生するいくつかのオブジェクトのうち、1 つのオブジェクトだけを選択してプロパティを変更したい場合に使用します – 例えば、和音の中にある 1 つの音符のプロパティを変更する場合です。\override コマンドを使用すると和音の中にあるすべての音符に影響を与えます。一方、\tweak は入力ストリームの中でその \tweak のすぐ後にある要素 1 つだけに影響を与えます。

ここで例を挙げます。C メジャー コードの中にある真ん中の音符 (ミドル E) の符頭のサイズを変更したいとします。まず最初に、\once \override だとどうなるか見てみましょう:

\relative {
  <c' e g>4
  \once \override NoteHead.font-size = #-3
  <c e g>4
  <c e g>4
}

[image of music]

このオーバライドは和音の中にあるすべての符頭に影響を与えています。これは和音の中にあるすべての音符が同じ タイミング で起こるためであり、\once のアクションは \override と同様に同じタイミングで起こる、指定されたタイプすべてのレイアウト オブジェクトへのオーバライドに適用されます。

\tweak コマンドはこれとは異なるやり方で処理されます。これは入力ストリームの中ですぐ後に続く要素にだけ作用します。最もシンプルな形式の \tweak コマンドは、コマンドの直後にある要素から直接作成されるオブジェクト – 本質的に符頭とアーティキュレーション – にだけ効果を持ちます。

それでは例に戻り、この方法で和音の真ん中の音符のサイズを変更します:

\relative {
  <c' e g>4
  <c \tweak font-size #-3 e g>4
}

[image of music]

\tweak の構文は \override コマンドの構文とは異なるということに注意してください。コンテキストを指定しません – 実際、指定するとエラーになります。コンテキストとレイアウト オブジェクトはどちらも入力ストリームの中で後に続く要素によって示されます。さらに、イコール記号を使うべきではないということに注意してください。そのため、簡単な形式の \tweak コマンドは以下のようになります:

\tweak layout-property #value

さらに、\tweak コマンドは一連のアーティキュレーションの中にあるただ 1 つのアーティキュレーションを変更されるためにも使用できます。ここに例を挙げます:

a'4^"Black"
  -\tweak color #red ^"Red"
  -\tweak color #green _"Green"

[image of music]

\tweak コマンドはアーティキュレーション マークの前に配置する必要があることに注意してください。なぜなら、調整された表記がアーティキュレーションとして適用される必要があるためです。複数の向き記号 (^ または _) で上書きした場合、最後に適用される左端の記号が勝ち残ります。

符幹や臨時記号などのオブジェクトは後になってから作成されるもので、\tweak コマンドの後に続くイベントから直接作成されません。そのような直接作成されないオブジェクトの場合、明示的にレイアウト オブジェクト名を指定して LilyPond がそれらのオブジェクトの起源を追跡できるようにすることで、\tweak で調整することができます:

<\tweak Accidental.color #red   cis''4
 \tweak Accidental.color #green es''
 g''>

[image of music]

この長い形式の \tweak コマンドは以下のように記述することができます:

\tweak LayoutObject.layout-property #value

さらに、\tweak コマンドは、同時に起こるネストされた連符記号のセットのうちの 1 つの見た目を変更するためにも使用されます。以下の例では、長い連符記号と 3 つの短い連符記号のうちの最初の連符記号が同時に起こります。そのため、\override コマンドだと両方の連符記号に適用されてしまいます。この例では、\tweak は 2 つの連符記号を区別するために使用されています。最初の \tweak コマンドは長い連符記号を音符の上に置くことを指定していて、2 番目の \tweak コマンドは最初の短い連符記号の数字を赤で描くことを指定しています。

\relative c'' {
  \tweak direction #up
  \tuplet 3/4 {
    \tweak color #red
    \tuplet 3/2 { c8[ c c] }
    \tuplet 3/2 { c8[ c c] }
    \tuplet 3/2 { c8[ c c] }
  }
}

[image of music]

ネストされた連符が同時に起こらない場合、それらの見た目は \override コマンドを用いた通常通りの方法で変更されるかもしれません:

\relative {
  \tuplet 3/2 { c'8[ c c] }
  \once \override TupletNumber.text = #tuplet-number::calc-fraction-text
  \tuplet 3/2 {
    c8[ c]
    c8[ c]
    \once \override TupletNumber.transparent = ##t
    \tuplet 3/2 { c8[ c c] }
    \tuplet 3/2 { c8[ c c] }
  }
}

[image of music]

参照

記譜法リファレンス: The tweak command


\single 接頭辞

特定の符頭を赤色にしてサイズを大きくすることによって、強調を行いたいとしましょう。また、それを簡単にするためにこのような関数を定義したとしましょう:

emphNoteHead = {
  \override NoteHead.color = #red
  \override NoteHead.font-size = 2
}
\relative {
  c''4 a \once \emphNoteHead f d |
}

[image of music]

\once 接頭辞は単音や和音全体には動作しますが、和音の一つの音符に対しては使うことができません。さっき、\tweak はこのような場面で使うということを学びました。 \tweak コマンド を参照してください。しかし、\tweak は関数と一緒に使うことができません。そこで \single の登場です:

emphNoteHead = {
  \override NoteHead.color = #red
  \override NoteHead.font-size = 2
}
\relative {
   <c'' a \single \emphNoteHead f d>4
}

[image of music]

要約すると、\single\override\tweak に変換します。よって、(和音内の音符のように) 同じタイミングにいくつかのオブジェクトが存在する場合、\once はその全てに影響を与えるのに対し、 \single はその内の 1 つに – すぐ後に続く音楽表記のみに – 作用します。

\single をこのように使用することで、\override のみから成る簡略化のために定義された関数を、和音内の各音符に対して適用することができます。しかし、\single\revert, \set, \unset\tweak に変換することはできません。

参照

学習マニュアル: \tweak コマンド, レイアウトの調整のために変数を使用する


5.2 内部リファレンス マニュアル


5.2.1 レイアウト オブジェクトのプロパティ

あなたがスラーを楽譜に描き、そのスラーが細すぎるためにもう少し太くしたいと思ったとします。どうやってスラーを太くしますか?以前に LilyPond の自由度の高さについて述べたので、そのようなことが可能であることは知っています。あなたはおそらく \override コマンドが必要であると推測するでしょう。しかしながら、スラーの太さプロパティは存在するのでしょうか?そして、それが存在するならどうやって変更するのでしょうか?このようなことに内部リファレンス マニュアルは触れています。内部リファレンス マニュアルには、あなたがスラーを太くするために必要な情報、他のすべての \override コマンドを構築するために必要な情報が含まれています。

内部リファレンスを見ていく前に一言警告です。これは リファレンス ドキュメントであり、説明はほんの少しかまったく含まれていません: リファレンスの目的は情報を正確に、かつ簡潔に提供することです。そのため、内部リファレンスを一見してひるんでしまうかもしれません。しかし、心配しないでください!ここにあるガイダンスと説明を読めば、少し練習するだけで、内部リファレンスから必要な情報を取り出せるようになります。

実際の音楽からの簡単な断片を持つ具体例を使用していきましょう:

{
  \key es \major
  \time 6/8
  \relative {
    r4 bes'8 bes[( g]) g |
    g8[( es]) es d[( f]) as |
    as8 g
  }
  \addlyrics {
    The man who | feels love's sweet e -- | mo -- tion
  }
}

[image of music]

ここで、スラーをもう少し太くしようと決めたことにします。それは可能でしょうか?スラーは確かにレイアウト オブジェクトです。そのため、その疑問は ‘スラーに属していて、太さを制御するプロパティは存在するのか?’ ということになります。その答えを得るために内部リファレンス – 縮めて IR – を見なければなりません。

あなたが使用しているバージョンの LilyPond のための内部リファレンスは LilyPond ウェブサイト https://lilypond.org で見つかるでしょう。ドキュメント ページに行き、内部リファレンスへのリンクをクリックしてください。学習目的のためには標準の HTML バージョンを使うべきであり、‘1 つの大きなページ’ や PDF を使うべきではありません。次の数段落を読めば、あなたが内部リファレンスを読むときに実際にすべきことがわかるでしょう。

内部リファレンスの トップ ページ 下には 5 つのリンクがあります。Backend へのリンクを選択してください。そこにはレイアウト オブジェクトについての情報があります。Backend 下にある All layout objects へのリンクを選択してください。そのページには、あなたが使用しているバージョンの LilyPond で使用されるすべてのレイアウト オブジェクトがアルファベット順でリストアップされています。Slur へのリンクを選択すると、Slur のプロパティがリスト アップされます。

記譜法リファレンスからこのページを見つける方法もあります。スラーについて扱っているページで、内部リファレンスへのリンクが見つかるかもしれません。このリンクでこのページに直接行くことができます。しかしながら、あなたが調整するレイアウト オブジェクトの名前を想像できる場合は、すぐに内部リファレンスに行ってそこで探す方が簡単です。

内部リファレンスの Slur ページでは、まず Slur オブジェクトは Slur_engraver によって作成されるということが述べられています。それから、標準設定がリストアップされています。スラーの太さを制御していそうなプロパティを探してブラウザをスクロール ダウンさせていくと、以下が見つかります:

thickness (number)
     1.2
     Line thickness, generally measured in line-thickness

これが太さを変更するプロパティのようです。thickness の値は であり、デフォルト値は 1.2、この値は他のプロパティでは line-thickness と呼ばれるということがわかります。

前にも言ったように、内部リファレンスには説明がほとんど、あるいはまったくありません。しかしながら、すでにスラーの太さを変えるための十分な情報を持っています。レイアウト オブジェクトの名前は Slur であり、変更するプロパティの名前は thickness であり、スラーをもっと太くするには新しい値を 1.2 よりも大きくすべきであることがわかります。

今度は、レイアウト オブジェクト名で見つけた値を置き換えることによって \override コマンドを構築することができます。コンテキストは省略します。最初は太さに非常に大きな値を割り当ててみます。それによって、そのコマンドが確かに機能していることを確かめることができます。実行するコマンドは以下のようになります:

\override Slur.thickness = #5.0

新しい値の前に # を付けることを忘れないでください!

最後の疑問は ‘このコマンドをどこに置くべきか?’ ということです。そのことについて不確かであり、学んでいる最中であるのならば、ベストな答えはこうです ‘音楽表記の内部で、最初のスラーの直前’。ではやってみましょう:

{
  \key es \major
  \time 6/8
  \relative {
    % これ以降にある全てのスラーの太さを 1.2 から 5.0 にします
    \override Slur.thickness = #5.0
    r4 bes'8 bes[( g]) g |
    g8[( es]) es d[( f]) as |
    as8 g
  }
  \addlyrics {
    The man who | feels love's sweet e -- | mo -- tion
  }
}

[image of music]

確かにスラーが太くなっています。

これが \override コマンドを構築する基本的な方法です。これより後のセクションで遭遇するものはもう少し複雑ですが、必要な要点はすべて知っています – しかしながら、まだ練習が必要でしょう。これは以下の例で提供されます。

コンテキストを見つけ出す

しかしながら、まず最初にコンテキストを指定しなければならないとしたらどうでしょうか?指定すべきコンテキストは何でしょうか?スラーとボイスは音楽表記の各行で明らかに関係が深いので、スラーは Voice コンテキストの中にあると推測できるかもしれません。しかし、それは確かでしょうか?この問題を解決するには、Slur について記述している内部リファレンス ページの先頭に戻ります。そこには ‘Slur オブジェクトは Slur エングラーバによって作成される’ と書かれています。そのため、スラーは Slur_engraver が存在しているコンテキストのどれかで作成されるということになります。Slur_engraver へのリンクを辿ります。そのページの最後の方で Slur_engraver は 7 つのボイス コンテキスト – 標準のボイス コンテキストである Voice を含む – の一部であることが述べられています。ですから、推測は正しかったのです。そして、Voice は最下位のコンテキストの 1 つである – このことは、そこに音符を入力するという事実によって明らかに示されています – ため、ここではそのコンテキストを省略することができるのです。

1 回だけオーバライドする

上記の最後の例では すべて のスラーが太くなっています。しかし、最初のスラーだけを太くしたい場合はどうでしょうか?これは \once コマンドを使うことによって達成されます。\override コマンドの直前に \once コマンドを置くことによって、\override コマンドは 直後にある 音符から始まるスラーだけを変更するようになります。直後にある音符がスラーの開始点ではない場合、そのコマンドはまったく機能しません – それがスラーに遭遇するまで保持されるということはなく、ただ切り捨てられるだけです。そのため、\once コマンド付きの \override コマンドは以下のように上記の例とは異なる場所に置かなくてはなりません:

{
  \key es \major
  \time 6/8
  \relative {
    r4 bes'8
    % 直後にあるスラーのみを太くします
    \once \override Slur.thickness = #5.0
    bes8[( g]) g |
    g8[( es]) es d[( f]) as |
    as8 g
  }
  \addlyrics {
    The man who | feels love's sweet e -- | mo -- tion
  }
}

[image of music]

今度は、最初のスラーだけが太くなりました。

\once コマンドは \set コマンドの前でも使用される可能性があります。

元に戻す

最後に、最初の 2 つだけのスラーを太くしたい場合はどうでしょうか?その場合、2 つのコマンド – それぞれの前に \once を付けた – をスラーが始まる音符の直前に置きます:

{
  \key es \major
  \time 6/8
  \relative {
    r4 bes'8
    % 直後にあるスラーのみを太くします
    \once \override Slur.thickness = #5.0
    bes[( g]) g |
    % 直後にあるスラーのみを太くします
    \once \override Slur.thickness = #5.0
    g8[( es]) es d[( f]) as |
    as8 g
  }
  \addlyrics {
    The man who | feels love's sweet e -- | mo -- tion
  }
}

[image of music]

あるいは、\once コマンドを省略して、2 番目のスラーの後に thickness プロパティをデフォルト値に戻すために \revert コマンドを使うこともできます:

{
  \key es \major
  \time 6/8
  \relative {
    r4 bes'8
    % 以後のスラーの太さを 1.2 から 5.0 に増やします
    \override Slur.thickness = #5.0
    bes[( g]) g |
    g8[( es]) es
    % 以後のスラーの太さをデフォルトの 1.2 に戻します
    \revert Slur.thickness
    d8[( f]) as |
    as8 g
  }
  \addlyrics {
    The man who | feels love's sweet e -- | mo -- tion
  }
}

[image of music]

\revert コマンドは \override コマンドで変更されたどのプロパティでもデフォルト値に戻すことができます。状況に相応しい方を使用してください。

これで内部リファレンスと調整の基本的な方法についての紹介を終わりにします。この章で後に続くセクションの中にあるいくつのかの例でも一部では、内部リファレンスの特徴についての追加の紹介や、そこから情報を取り出すための更なる練習を提供します。それらの例ではガイダンスや説明のための言葉はずっと少ないでしょう。


5.2.2 インタフェイスの中で見つかるプロパティ

今度は歌詞をイタリック体で譜刻したいということにします。そうするには \override コマンドをどのように使う必要があるのでしょうか?以前と同様に、まず ‘すべてのレイアウト オブジェクト’ をリストアップしている内部リファレンス ページを開き、歌詞をコントロールしていそうなオブジェクトを探します。LyricText がそれであるようです。これをクリックすると、歌詞のテキストに対してセットすることができるプロパティが表示されます。そこには font-seriesfont-size が含まれますが、歌詞をイタリック体にするためのプロパティらしきものはありません。これは、形に関するプロパティはすべてのフォント オブジェクトに共通なものであり、そのため、各レイアウト オブジェクトに含まれているのではなく、他の同様な共通プロパティと一緒にグループ化されていて、インタフェイス の 1 つ font-interface の中に置かれているからです。

そのため、インタフェイスのプロパティを見つける方法と、どのオブジェクトがこれらのインタフェイス プロパティを使うのかを調べる方法を学ぶ必要があります。

LyricText について記述している内部リファレンスのページを再び開いてください。そのページの最後に LyricText がサポートするインタフェイスへのリンクがリスト アップされています。そのリストには font-interface を含むいくつかの要素があります。このリンクをクリックすると、このインタフェイスに関連付けされているプロパティのところに行きます。これらのプロパティは LyricText を含む font-interface をサポートするすべてのオブジェクトのプロパティでもあります。

font-shape(symbol) を含むフォントを制御するユーザが設定可能なプロパティをすべて見つけました。font-shape(symbol) では symbolupright, italics, あるいは caps にセットすることができます。

そこには、font-seriesfont-size もリスト アップされていることに気づくでしょう。そこで次のような疑問が湧いてきます: 共通フォントプロパティ font-seriesfont-sizeLyricText とインタフェイス font-interface の両方でリスト アップされているのに、なぜ font-shape はそうでないのか?その答えは、font-seriesfont-size は、LyricText オブジェクトが作成されるときに、それらのグローバルなデフォルト値から変更されるのに対して、font-shape はそうではないからです。LyricText の中にあるエントリから LyricText に適用されるそれら 2 つのプロパティの値がわかります。font-interface をサポートする他のオブジェクトは、それらのオブジェクトが作成されるときに、それらのプロパティを異なる値にセットします。

今度は歌詞をイタリック体に変更するように \override コマンドを構築できるかどうかを見ていきましょう。オブジェクトは LyricText であり、プロパティは font-shape であり、セットする値は italic です。前と同様に、コンテキストを省略します。

話は逸れますが重要なことを 1 つ挙げます。プロパティには値としてシンボル (例えば italic) を取るものがあります。シンボルの前にはアポストロフィ ' を置く必要があり、そうすることで内部的に LilyPond に読み込まれます。任意のテキスト文字列との違い – 任意のテキスト文字列は "a text string" のような形で表記されます – に注意してください。シンボルと文字列についてのより詳細な説明は Scheme tutorial を参照してください。

さて、それでは歌詞をイタリック体で譜刻するために必要となる \override コマンドは以下のようになります:

\override LyricText.font-shape = #'italic

そして、これは以下のように影響を与える歌詞の前に、そして近くに置くべきです:

{
  \key es \major
  \time 6/8
  \relative {
    r4 bes'8 bes[( g]) g |
    g8[( es]) es d[( f]) as |
    as8 g
  }
  \addlyrics {
    \override LyricText.font-shape = #'italic
    The man who | feels love's sweet e -- | mo -- tion
  }
}

[image of music]

これで歌詞がすべてイタリック体で譜刻されました。

Note: 歌詞の中では、最後の音節と終端の波括弧の間に常にスペースを置いてください。

参照

拡張: Scheme tutorial


5.2.3 プロパティのタイプ

これまでにプロパティのタイプを 2 つ見てきました: numbersymbol です。プロパティに与える値が有効であるためには、その値は正しいタイプであり、そのタイプのルールに従っていなければなりません。プロパティのタイプは内部リファレンスの中で常にプロパティ名の後の括弧の中に表示されています。ここに、あなたが必要になるであろうプロパティのタイプを、そのタイプのルールといくつかの例と共にリスト アップします。\override コマンドの中でプロパティの値を入力する時は、当然、常にそれらの値の前にハッシュ記号 # を付け加える必要があります – 例え、その値自体が # で始まっていたとしても付け加える必要があります。ここでは定数の例だけを示します: Scheme を用いて値の計算をしたいのであれば、 Calculations in Scheme を参照してください。

プロパティ タイプ規則
Boolean真か偽のどちらかで、それぞれ #t と #f で表されます#t, #f
Dimension (譜スペース)小数 (譜スペース単位)2.5, 0.34
Direction向きを表す有効な定数またはそれと等価な数値 (-1 から 1 までの小数が許可されます)LEFT, CENTER, UP, 1, -1
Integer整数3, -1
List一連の定数またはシンボル。 スペースで区切られ、前にアポストロフィが付いた括弧で囲まれます'(left-edge staff-bar), '(1), '(), '(1.0 0.25 0.5)
Markup有効なマークアップ\markup { \italic "cresc." }
Momentmake-moment 関数で構築される全音符の分数(ly:make-moment 1/4), (ly:make-moment 3/8)
Number正または負の小数3.5, -2.45
(数の) Pair‘スペース . スペース’ で区切られ、前にアポストロフィが付いた括弧で囲まれた 2 つの数値'(2 . 3.5), '(0.1 . -3.2)
Symbolプロパティに許可されているシンボルのセットのいずれかであり、前にアポロストロフィを付けます'italic, 'inside
Unknown手続き。何のアクションも起こさない場合は #fbend::print, ly:text-interface::print, #f
Vector#() で囲まれたいくつかの定数#(#t #t #f)

参照

拡張: Scheme tutorial


5.3 オブジェクトの見た目

いくつかの例を使ってこれまでに学んだことを練習して、譜刻される楽譜の見た目を変更するためにどのように調整が使われるのかを見ていきましょう。


5.3.1 オブジェクトの可視性と色

教育目的の楽譜では、ある要素を省略した楽譜を譜刻して、学生にそれを付け足させるという訓練にしたいと思うかもしれません。簡単な例として、その訓練とは小節線の無い楽譜だと仮定してみましょう。しかしながら、通常、小節線は自動的に挿入されます。どうやって小節線が譜刻されることを防ぐのでしょうか?

このことに挑戦する前に、オブジェクト プロパティは インタフェイス と呼ばれるものにグループ化されているということを思い出してください – インタフェイスの中で見つかるプロパティ を参照してください。これはあるグラフィカル オブジェクトを調整するために一緒に使用されるかもしれないプロパティをグループ化したものです – あるオブジェクトに対してインタフェイス内のプロパティの 1 つを使うことが許可されるのなら、他のプロパティも許可されます。あるオブジェクトはいくつかのインタフェイス内にあるプロパティを使用し、別のオブジェクトはそれとは別のインタフェイス内にあるプロパティを使用します。ある特定のグラフィカルオブジェクトによって使用されるプロパティを保持しているインタフェイスは、そのグラフィカル オブジェクトについて記述している内部リファレンス ページの最後にリスト アップされていて、それらのプロパティはそれらのインタフェイスを参照することによって閲覧できます。

グラフィカル オブジェクトについての情報を見つけ出す方法を レイアウト オブジェクトのプロパティ で説明しました。同じアプローチを使って、内部リファレンスで小節線を譜刻するレイアウト オブジェクトを見つけ出します。Backend を経由して All layout objects に行くと、そこに BarLine と呼ばれるレイアウト オブジェクトがあることがわかります。そのレイアウト オブジェクトのプロパティには小節線の可視性をコントロールする 2 つのプロパティが含まれています: break-visibilitystencil です。さらに、BarLine はインタフェイスのいくつかをサポートしています。grob-interface もサポートされていて、そこには transparent プロパティと color プロパティが含まれています。これらすべてが小節線の可視性に影響を与えます (そしてもちろん、拡大解釈すれば他の多くのレイアウト オブジェクトにも影響を与えます)。次はこれらのプロパティをそれぞれ見ていきましょう。


stencil プロパティ

このプロパティは譜刻すべきシンボル (図柄) を指定することによって小節線の見た目を制御します。他の多くのプロパティでも共通に言えますが、このプロパティの値に #f をセットすることによって何も譜刻させなくすることができます。ではやってみましょう。以前と同様に、暗黙のコンテキスト Voice は省略します:

\relative {
  \time 12/16
  \override BarLine.stencil = ##f
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

小節線はまだ譜刻されています。何が間違っているのでしょうか?内部リファレンスに戻って、BarLine のプロパティを記述しているページを読み返してください。そのページの先頭に “BarLine オブジェクトは Bar_engraver によって作成されます” と記述されています。Bar_engraver ページに行ってください。そのページの最後で、Bar_engraver を保持するコンテキストがリスト アップされています。それらのコンテキストのタイプはすべて Staff です。ですから、\override コマンドが予期したように機能しなかったのは、BarLine はデフォルトの Voice コンテキストの中にはいなかったからなのです。コンテキストが間違って指定された場合、そのコマンドは機能しません。エラー メッセージは生成されず、ログ ファイルには何もログが残りません。正しいコンテキストを付け加えることによってコマンドを修正してみましょう:

\relative {
  \time 12/16
  \override Staff.BarLine.stencil = ##f
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

今度は小節線が消えました。stencil プロパティに #f をセットする操作は頻繁に行うので、短くしたコマンド \omit が用意されています:

\relative {
  \time 12/16
  \omit Staff.BarLine
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

しかしながら、stencil プロパティを #f にセットするのではなく、オブジェクトの大きさを修正する必要があるオブジェクトも存在するということに注意してください。そのようなオブジェクトの stencil プロパティを #f にセットするとエラーになります。 例えば、NoteHead オブジェクトの stencil プロパティを #f にセットするとエラーになります。この場合、point-stencil を使ってサイズが 0 のステンシル (型、型紙) をオブジェクトにセットします:

\relative {
  c''4 c
  \once \override NoteHead.stencil = #point-stencil
  c4 c
}

[image of music]


break-visibility property

内部リファレンスの BarLine のプロパティから break-visibility プロパティには 3 つのブール値からなるベクトルが必要であることがわかります。これらはそれぞれ、小節線が行の最後、行の途中、行の最初に譜刻されるかどうかを制御します。以下の例ではすべての小節線を消したいので、必要となる値は #(#f #f #f) です (同じ結果を all-invisible でも得ることができます)。それではやってみましょう。Staff コンテキストを含めることを忘れないでください。また、この値を書くときに括弧を始める前に ## を付ける必要があることにも注意してください。# の 1 つはベクトルを導入するときに値の一部として必要とされ、先頭の #\override コマンドの中で常に値の前に置くことが必要とされます。

\relative {
  \time 12/16
  \override Staff.BarLine.break-visibility = ##(#f #f #f)
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

今度もすべての小節線が消えました。


transparent プロパティ

内部リファレンスの grob-interface ページにあるプロパティから transparent プロパティはブール値であることがわかります。これはグラフィカル オブジェクトを透明にする場合には #t にセットします。次の例では、小節線ではなく拍子記号を不可視にしてみましょう。そうするには、まず、拍子記号のグラフィカル オブジェクト名を見つける必要があります。TimeSignature レイアウト オブジェクトのプロパティを見つけるために内部リファレンスの ‘すべてのレイアウト オブジェクト’ ページに戻ってください。TimeSignatureTime_signature_engraver によって作り出され、さらに、Time_signature_engraverStaff コンテキストに含まれ、さらに、Staff コンテキストは grob-interface をサポートしているということがわかります。そのため、拍子記号を透明にするためのコマンドは以下のようになります:

\relative {
  \time 12/16
  \override Staff.TimeSignature.transparent = ##t
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

transparent プロパティに #t をセットする操作も頻繁に行うので、短くしたコマンド \hide が用意されています:

\relative {
  \time 12/16
  \hide Staff.TimeSignature
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

どちらの場合でも拍子記号は消えました。しかしながら、このコマンドは拍子記号があるべき場所に隙間を残しています。たぶん、これは学生がその部分を埋めるための練習としては望ましいでしょうが、他の状況ではこの隙間は望ましくありません。この隙間を取り除くには、拍子記号の transparent の代わりにステンシル (型、型紙) を #f にセットします:

\relative {
  \time 12/16
  \omit Staff.TimeSignature
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

違いは明白です: ステンシルを #f にセットする (\omit を用いることもできます) と、オブジェクト自体が削除されます。一方、オブジェクトを transparent (透明) にする (\hide を用いることもできます)とそのオブジェクトは消えますが、オブジェクトは不可視になっただけです。

色 (color)


color プロパティ

最後に、小節線の色を白にすることによって小節線を不可視にしてみましょう。(これには白い小節線が譜線と交差したところで譜線を見えたり見えなくしてしまうかもしれないという問題があります。以下のいくつかの例で、このことを予測することはできないと思うかもしれません。そうなる理由と、それを制御する方法についての詳細は、 Painting objects white でカバーされています。しかしここでは色について学んでいるところなので、オブジェクトを白で描くことの限界を受け入れるだけにしてください。)

grob-interface はカラー プロパティの値はリストであると指定しています。しかしながら、そのリストが何であるべきなのかの説明はありません。カラー プロパティで必要とされるリストは実際のところ内部ユニットの中にある値のリストです。しかし、内部ユニットの中にある値を知らなくても済むように、カラーを指定するための手段がいくつか用意されています。最初の方法は List of colors にある最初の表でリスト アップされている ‘標準’ のカラーの 1 つを使用する方法です。小節線を白にするには以下のように記述します:

\relative {
  \time 12/16
  \override Staff.BarLine.color = #white
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

今度も再び小節線は見えなくなりました。white の前にアポストロフィは付かないということに注意してください – これはシンボルではなく変数です。この変数は評価される時、小節線の色を白にセットするのに必要な内部的な値のリストを提供します。標準カラー リストにある他のカラーもまた変数です。小節線の色をこのリストの中にある他の変数に変更することで、これが機能することをあなた自身で納得できます。

カラーを変えるための 2 つ目の方法は、 List of colors の 2 番目のリストの中にある X11 カラー名のリストを使用する方法です。しかしながら、X11 カラー名は関数 x11-color によって実際の値にマッピングされます。x11-color は以下のように X11 カラー シンボルを内部値のリストに変換します:

\relative {
  \time 12/16
  \override Staff.BarLine.color = #(x11-color 'white)
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

この場合、関数 x11-color はシンボルを引数として扱うので、変数として評価されないようシンボルの前にアポストロフィを付ける必要があり、関数呼び出し全体を括弧で囲む必要があるということに注意してください。

もう 1 つ関数があります。RGB 値を内部カラーに変換する rgb-color 関数です。この関数は赤、緑、青の輝度を表す 3 つの引数をとります。これらの引数は 0 から 1 までの値をとります。ですから、カラーを赤にセットする場合の値は (rgb-color 1 0 0) となり、白の場合は (rgb-color 1 1 1) となります:

\relative {
  \time 12/16
  \override Staff.BarLine.color = #(rgb-color 1 1 1)
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

最後に、X11 カラー セットの一部であるグレー スケールを用いる方法もあります。グレー スケールの範囲は黒 'grey0 から白 'grey100 まで 1 段階ずつあります。グレー スケールの使用方法を示すために、例の中にあるすべてのレイアウト オブジェクトのカラーをさまざまな濃度のグレーにセットしてみましょう:

\relative {
  \time 12/16
  \override Staff.StaffSymbol.color = #(x11-color 'grey30)
  \override Staff.TimeSignature.color = #(x11-color 'grey60)
  \override Staff.Clef.color = #(x11-color 'grey60)
  \override Voice.NoteHead.color = #(x11-color 'grey85)
  \override Voice.Stem.color = #(x11-color 'grey85)
  \override Staff.BarLine.color = #(x11-color 'grey10)
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

各レイアウト オブジェクトに関連付けされているコンテキストに注意してください。これらのコンテキストを正しく取得することが重要であり、そうしなければコマンドは機能しません!コンテキストの中には特定のエングラーバが置かれているということを忘れないでください。エングラーバに対するデフォルト コンテキストを見つけ出すには、内部リファレンスのレイアウト オブジェクトからスタートして、そこからそれを作り出すエングラーバのページに行きます。エングラーバのページには、通常はどのコンテキストにそのエングラーバが含まれているのかが記述されています。


5.3.2 オブジェクトのサイズ

以前の例を見直すことから始めてみましょう (音楽表記をネストする を参照してください)。そこでは ossia として新たに一時的な譜を導入する方法が示されています。

\new Staff ="main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main" }
      { f8 f c }
    >>
    r4 |
  }
}

[image of music]

通常、オッシアは音部記号と拍子記号無しで記述され、メインの譜よりもわずかに小さく譜刻されます。今度は、すでに音部記号と拍子記号を削除する方法を知っています – 以下のようにそれぞれのステンシルを #f にセットするだけです:

\new Staff ="main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main"
      }
      {
        \omit Staff.Clef
        \omit Staff.TimeSignature
        { f8 f c }
      }
    >>
    r4 |
  }
}

[image of music]

ここで、\with 節の後にある追加の括弧のペアが、その括弧に囲まれているオーバライドと音楽がオッシア譜に適用されることを保証するために、必要となります。

しかし、\with を用いた譜コンテキストの変更と \override を用いた音部記号と拍子記号のステンシルの変更 (あるいはこのケースでは \omit を用いています) との違いは何なのでしょうか?主な違いは、\with 節の中で行われた変更はそのコンテキストが作成されるときに行われ、そのコンテキストでは デフォルト 値として残ります。一方、音楽の中に埋め込まれた \set コマンドや \override コマンドは動的です – それらは音楽のある特定のポイントに同期して変更を行います。変更が \unset\revert を使ってセットを解除されたり元に戻された場合、デフォルト値 – これは \with 節でセットされていた場合はその値、そうでない場合は通常のデフォルト値 – に戻ります。

いくつかのコンテキスト プロパティは \with 節でのみ変更可能です。これらは、コンテキストが作成された後では、変更されることのないプロパティです。alignAboveContext とそのパートナー alignBelowContext がそのようなプロパティです – いったん譜が作成されると、譜のアラインメントは決定され、それを後で変更しようとすることには意味がありません。

レイアウト オブジェクトのデフォルト値は \with 節でセットすることもできます。通常の \override コマンドをコンテキスト名を省いて使用するだけです。コンテキスト名を省略するのは、そのコンテキストは明らかに \with 節が変更しようとしているコンテキストだからです。実際、\with 節の中でコンテキストを指定するとエラーが発生します。

それでは上記の例を以下のように書き換えます:

\new Staff ="main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main"
        % この譜には音部記号を譜刻しません
        \override Clef.stencil = ##f
        % この譜には拍子記号を譜刻しません
        \override TimeSignature.stencil = ##f
      }
      { f8 f c }
    >>
    r4 |
  }
}

[image of music]

transparent プロパティを設定したり stencil を消すために短縮形 \hide\omit を使うことができ、結果として以下のようになります:

\new Staff ="main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main"
        % この譜には音部記号を譜刻しません
        \omit Clef
        % この譜には拍子記号を譜刻しません
        \omit TimeSignature
      }
      { f8 f c }
    >>
    r4 |
  }
}

[image of music]

最後に、レイアウト オブジェクトのサイズを変更してみます。

いくつかのレイアウト オブジェクトはある書体から選択された図柄として作成されます。これには符頭、臨時記号、マークアップ、音部記号、拍子記号、強弱記号、歌詞が含まれます。それらのサイズは、これから見ていくように、font-size プロパティを変更することによって変更されます。スラーやタイのような他のレイアウト オブジェクト – 一般には、スパナ オブジェクト (spanner objects) – は個々に描かれるため、font-size プロパティとは関係がありません。一般に、それらのオブジェクトはそれらを取り付けられるオブジェクトからサイズを決定する (訳者: 例えば、スラーはそのスラーが付着する音符からそのスラーのサイズを決定する) ので、通常はサイズを手動で変更する必要はありません。さらに、符幹や小節線の長さ、連桁や他の線の太さ、譜線の間隔などといった他のプロパティはすべて特別な方法で変更する必要があります。

オッシアの例に戻って、まず font-size を変更してみましょう。これを行うには 2 通りの方法があります。以下のようなコマンドで NoteHead のような各オブジェクト タイプのフォント サイズを変更する:

\override NoteHead.font-size = #-2

あるいは、\set を使って特別なプロパティ fontSize を設定するか、それを \with 節に含める (ただし、\set は含めません) ことによってすべてのフォントのサイズを変更します:

\set fontSize = #-2

これらの命令文は両方ともフォント サイズを前の値から 2 段階減らします。各段階でサイズはおよそ 12% 増減します。

それではオッシアの例でフォント サイズを変更してみましょう:

\new Staff ="main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main"
        \omit Clef
        \omit TimeSignature
        % すべてのフォント サイズを約 24% 減らします
        fontSize = #-2
      }
      { f8 f c }
    >>
    r4 |
  }
}

[image of music]

これでもまだ完璧ではありません。符頭とフラグは小さくなりましたが、符幹はそれに対して長すぎ、譜線は離れすぎています。これらをフォント サイズの減少に比例してスケール ダウンさせる必要があります。次のサブ セクションでそれを行う方法について議論します。


5.3.3 オブジェクトの長さと太さ

LilyPond では距離と長さは一般に譜スペース – 譜の中の隣り合う線の間隔 – で測ります (特別な場合では、譜スペースの半分で測ることもあります)。一方、たいていの thickness プロパティは line-thickness と呼ばれる内部プロパティを単位として測ります。例えば、デフォルトでは、ヘアピン (訳者: 強弱記号) の線の太さは 1 単位の line-thickness であり、音符の符幹の thickness は 1.3 です。けれども、それとは単位の異なる太さプロパティがあるということにも注意してください。例えば、連桁の太さプロパティは譜スペースで測ります。

それでは、どうやって長さをフォント サイズに比例させるのでしょうか?これは、まさにこの目的のために提供されている magstep と呼ばれる特別な関数の助けを借りることによって達成できます。この関数は引数を 1 つ – フォント サイズの変化 (前の例では #-2) – をとり、他のオブジェクトの縮小に比例したスケーリング ファクタを返します。以下のように使用します:

\new Staff ="main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main"
        \omit Clef
        \omit TimeSignature
        fontSize = #-2
        % 符幹の長さと譜線の間隔を減らします
        \override StaffSymbol.staff-space = #(magstep -2)
      }
      { f8 f c }
    >>
    r4 |
  }
}

[image of music]

符幹の長さと他の多くの長さに関係するプロパティは常に staff-space プロパティの値と比例関係になるよう算出されるため、それらの長さも自動的にスケール ダウンされます。これはオッシアの垂直方向のスケールだけに効果を及ぼすということに注意してください – 水平方向のスケールは、メインの音楽と同期するよう、メインの音楽のレイアウトによって決定されるため、水平方向のスケールは staff-space の変更によっていかなる影響も受けません。もちろん、メインの音楽のすべてのスケールがこの方法で変更された場合、水平方向のスペースも影響を受けます。このことについては、後のレイアウト セクションで議論します。

そして、これでオッシアの作成は完了です。他のすべてのオブジェクトのサイズと長さが類似の方法で変更されるかもしれません。

上記の例のようなスケールのちょっとした変更に対して、小節線、連桁、ヘアピン、スラーなどのさまざまな描画線の太さは通常はグローバルな調節を必要としません。ある特定のレイアウト オブジェクトの太さを調節する必要がある場合、それを達成する最良の方法はそのオブジェクトの thickness プロパティをオーバライドすることです。スラーの太さを変更する例は レイアウト オブジェクトのプロパティ で示されています。すべての描画オブジェクト (つまり、フォントから作り出されるオブジェクトではないもの) の太さが同様の方法で変更されるかもしれません。


5.4 オブジェクトの配置


5.4.1 自動配置

音楽記譜法には譜に属するオブジェクトがいくつかあり、他のオブジェクトは譜の外側に置かれるべきです。それらはそれぞれ譜内部オブジェクトと譜外部オブジェクトと呼ばれます。

譜内部オブジェクトは譜上に置かれます – 符頭、符幹、臨時記号などです。通常、それらの位置は音楽自体によって決定されます – 譜内部オブジェクトは譜のある特定の線と同じ垂直位置に置かれたり、そこに置かれるべき他のオブジェクトにくっつけられたりします。近接する和音の中にある符頭、符幹、臨時記号の衝突は普通は自動的に回避されます。これから見ていくように、この自動配置を変更することができるコマンドとオーバライドがあります。

譜の外部にあるオブジェクトには、リハーサル記号、テキスト、強弱記号などがあります。LilyPond が持つ譜外部オブジェクトの垂直位置のルールは、譜外部オブジェクトをできるだけ譜の近くに、しかし他のオブジェクトと衝突しない程度の近さに置くというものです。以下で示すように、LilyPond はオブジェクトを配置する順番を決定するために outside-staff-priority プロパティを使用します。

最初に、LilyPond はすべての譜内部オブジェクトを配置します。それから、outside-staff-priority に従って譜外部オブジェクトを並べます。譜外部オブジェクトは最小の outside-staff-priority を持つオブジェクトから順番に 1 つずつ並べられ、すでに配置されたオブジェクトと衝突しないように配置されます。つまり、2 つの譜外部オブジェクトが同じスペースを巡って競合する場合、より小さな outside-staff-priority を持つオブジェクトが譜の近くに配置されます。2 つのオブジェクトが同じ outside-staff-priority を持つ場合、先に発生するオブジェクトが譜の近くに配置されます。

以下の例では、すべてのマークアップ テキストが同じ優先度を持っています (なぜなら、優先度が明示的にセットされていないからです)。‘Text3’ が自動的に譜の近く、‘Text2’ のすぐ下に納まるよう配置されていることに注意してください。

c''2^"Text1"
c''2^"Text2" |
c''2^"Text3"
c''2^"Text4" |

[image of music]

デフォルトでは、譜も互いにできるだけ近くなるよう配置されます (最小間隔に従います)。音符が隣接する譜に向かって長く突き出てている場合、譜を離さないと記譜したものが重なり合ってしまう場合にのみ譜は離されます。以下の例は譜の調整によって音符が ‘ぴったりと納まる’ 様子を示しています:

<<
  \new Staff {
    \relative { c'4 a, }
  }
  \new Staff {
    \relative { c''''4 a, }
  }
>>

[image of music]


5.4.2 譜内部オブジェクト

これまでにコマンド \voiceXXX がスラー、タイ、運指法記号、符幹の向きに依存する他のすべてに対してどのように影響を与えるかを見てきました – ボイスを明示的にインスタンス化する を参照してください。 これらのコマンドは、多声部音楽を記述しているときに上下する旋律を見分けられるようにすることを可能にするために不可欠なものです。しかしながら、この自動機能をオーバライドする必要がある場合もあります。このオーバライドは音楽全体に対しても、個々の音符に対してもできます。この自動機能を制御しているプロパティは各レイアウト オブジェクトの direction プロパティです。まず、これは何をするのかを説明し、それから、作成済みのコマンドをいくつか紹介します。それらのコマンドを使うと、一般的な変更のための明示的なオーバライドをコードしなくて済みます。

スラーやタイのようなレイアウト オブジェクトはカーブを描き、曲がり、上下します。符幹やフラグのような他のオブジェクトも上下の向きによって位置が左右します。direction がセットされているときは、これは自動的に制御されます。


direction プロパティ

以下の例は、最初の小節でスラーのデフォルトの振る舞いを示しています。高い位置にある音符のスラーは音符の上にあり、低い位置にある音符のスターは音符の下にあります。次の小節では両方のスラーをすべて強制的に下向きにし、 さらに次の小節では両方のスラーをすべて強制的に上向きにし、 最後の小節ではスラーの向きをデフォルトに戻します。

a'4( g') c''( a') |
\override Slur.direction = #DOWN
a'4( g') c''( a') |
\override Slur.direction = #UP
a'4( g') c''( a') |
\revert Slur.direction
a'4( g') c''( a') |

[image of music]

ここで定数 DOWNUP を使っています。これらはそれぞれ値 -1+1 を持ち、定数の代わりにそれらの数値を使うこともできまはす。さらに値 0 を使う場合もあります。この値はスラーでは UP を意味するものとして扱われますが、いくつかのオブジェクトでは ‘center’ という意味になります。値 0 を持つ定数に CENTER があります。

しかしながら、これらの明示的なオーバライドは普通は使われません。もっと簡単で定義済みのコマンドが利用可能だからです。ここに一般的なコマンドの表を挙げます。それぞれのコマンドの意味が明白でない場合は、そのコマンドの意味を述べています。

下/左上/右元に戻す効果
\arpeggioArrowDown\arpeggioArrowUp\arpeggioNormal矢印が下に付く、上に付く、付かない
\dotsDown\dotsUp\dotsNeutral譜線を避けるための移動方向
\dynamicDown\dynamicUp\dynamicNeutral
\phrasingSlurDown\phrasingSlurUp\phrasingSlurNeutralNote: スラー コマンドとは別になります
\slurDown\slurUp\slurNeutral
\stemDown\stemUp\stemNeutral
\textSpannerDown\textSpannerUp\textSpannerNeutralスパナとして挿入されるテキストが譜の下/上にくる
\tieDown\tieUp\tieNeutral
\tupletDown\tupletUp\tupletNeutral連符記号が音符の下/上にくる

これらのコマンドで中立/通常の位置に戻すコマンドは \revert を用いることで実装されていて、これらは前に \once が付いて いない かもしれません。\override を用いて実装されているコマンドの効果を単一のタイミングに限定したいのであれば、明示的なオーバライドの場合と同様に、コマンドの前に \once を配置します。

あるいは、単に 1 つのレイアウト オブジェクトを上向きか下向きにしたいなら、方向指示子の ^_ を使うことができます:

a'4( g') c''( a') |
a'4^( g') c''_( a') |

[image of music]


運指

単一の音符に対する運指法記号の配置も direction プロパティによって制御できますが、direction を変更しても和音の運指法記号は影響を受けません。これから見ていくように、和音の中の個々の音符の運指法記号を制御するための特別なコマンドがあります。このコマンドを使うことで運指法記号を各音符の上、下、左、右に配置することができます。

まず、単一の音符の運指法記号に対する direction を効果を示します。最初の小節はデフォルト状態で、その後で DOWNUP を指定したときの効果を示します:

\relative {
  c''4-5 a-3 f-1 c'-5 |
  \override Fingering.direction = #DOWN
  c4-5 a-3 f-1 c'-5 |
  \override Fingering.direction = #UP
  c4-5 a-3 f-1 c'-5 |
}

[image of music]

しかしながら、direction プロパティをオーバライドすることは、手動で運指法記号を音符の上または下に配置するもっとも簡単な方法ではありません。運指法番号の前に - の代わりに _ または ^ を使う方が普通は適切です。ここで、上記の例にこの方法を用いた例を挙げます:

\relative {
  c''4-5 a-3 f-1 c'-5 |
  c4_5 a_3 f_1 c'_5 |
  c4^5 a^3 f^1 c'^5 |
}

[image of music]

direction プロパティは和音では無視されますが、方向を示す接頭辞 _^ は機能します。以下で示すように、デフォルトでは、運指法記号は和音の音符の上と下の両方に自動的に配置されます:

\relative {
  <c''-5 g-3>4
  <c-5 g-3 e-2>4
  <c-5 g-3 e-2 c-1>4
}

[image of music]

しかし、以下で示すように、運指法番号のすべてまたはいずれかを手動で強制的に和音の上または下に配置するために、これはオーバライドされるかもしれません:

\relative {
  <c''-5 g-3 e-2 c-1>4
  <c^5 g_3 e_2 c_1>4
  <c^5 g^3 e^2 c_1>4
}

[image of music]

\set fingeringOrientations コマンドを使うことによって和音の中にある個々の音符の運指法記号の配置をより細かく制御することさえできます。このコマンドのフォーマットは以下のようなものです:

\set fingeringOrientations = #'([up] [left/right] [down])

fingeringOrientationsVoice コンテキストのプロパティであり、New_fingering_engraver によって作成、使用されるため、\set が使用されます。

このプロパティには 1 つから 3 つまでの値のリストがセットされるかもしれません。このプロパティは運指法記号を上 (リストに up がある場合)、下 (リストに down がある場合)、左 (リストに left がある場合。リストに right がある場合は右) に配置します。逆に配置位置がリストされていない場合、その位置に運指法記号は配置されません。LilyPond はこれらの制約を受け取り、 後に続く和音の音符への運指法記号をうまく配置します。leftright は相互排他的であるということに注意してください – 運指法記号は左右のどちらかにしか配置されないか、どちらにも配置されません。

Note: このコマンドを使って単一の音符への運指法記号の配置をコントロールするには、その音符を山括弧で囲んで単一音符の和音として記述する必要があります。

いくつか例を挙げます:

\relative {
  \set fingeringOrientations = #'(left)
  <f'-2>4
  <c-1 e-2 g-3 b-5>4
  \set fingeringOrientations = #'(left)
  <f-2>4
  <c-1 e-2 g-3 b-5>4 |
  \set fingeringOrientations = #'(up left down)
  <f-2>4
  <c-1 e-2 g-3 b-5>4
  \set fingeringOrientations = #'(up left)
  <f-2>4
  <c-1 e-2 g-3 b-5>4 |
  \set fingeringOrientations = #'(right)
  <f-2>4
  <c-1 e-2 g-3 b-5>4
}

[image of music]

運指法記号が少し込み合っているように見える場合は、font-size でサイズを下げることができます。デフォルト値は内部リファレンスの Fingering オブジェクトのページから -5 であることがわかるので、-7 にセットしてみましょう:

\relative {
  \override Fingering.font-size = #-7
  \set fingeringOrientations = #'(left)
  <f'-2>4
  <c-1 e-2 g-3 b-5>4
  \set fingeringOrientations = #'(left)
  <f-2>4
  <c-1 e-2 g-3 b-5>4 |
  \set fingeringOrientations = #'(up left down)
  <f-2>4
  <c-1 e-2 g-3 b-5>4
  \set fingeringOrientations = #'(up left)
  <f-2>4
  <c-1 e-2 g-3 b-5>4 |
  \set fingeringOrientations = #'(right)
  <f-2>4
  <c-1 e-2 g-3 b-5>4
}

[image of music]


5.4.3 譜外部オブジェクト

譜外部オブジェクトは自動的に衝突を回避するよう配置されます。配置が最適でない場合に自動配置をオーバライドする方法がいくつかあります。


outside-staff-priority プロパティ

小さな値の outside-staff-priority プロパティを持つオブジェクトは譜の近くに配置され、他の譜外部オブジェクトは衝突を避けるのに必要な分だけ離されます。outside-staff-prioritygrob-interface の中で定義されているため、すべてのレイアウト オブジェクトのプロパティです。デフォルトでは、すべての譜内部オブジェクトの outside-staff-priority#f にセットされていて、譜外部オブジェクトが作成されたときにその譜外部オブジェクトの outside-staff-priority に適当な数値がセットされます。以下の表はいくつかの一般的な譜外部オブジェクトのデフォルトの outside-staff-priority 値を示しています。

レイアウト オブジェクト優先度以下のオブジェクトの配置を制御する:
RehearsalMark1500リハーサル記号
MetronomeMark1000メトロノーム記号
SostenutoPedalLineSpanner1000ペダル記号
SustainPedalLineSpanner1000
UnaCordaPedalLineSpanner1000
MeasureCounter750小節番号
VoltaBracketSpanner600Volta (番号付きのリピート) の囲み
InstrumentSwitch500楽器を変更するテキスト
TextScript450マークアップ テキスト
MultiMeasureRestText450複数小節にわたる休符上のテキスト
CombineTextScript450パート結合のテキスト
OttavaBracket400オッターバ (オクターブを上下させる記号) の囲み
TextSpanner350テキスト スパナ
DynamicLineSpanner250すべての強弱記号
BarNumber100小節番号
TrillSpanner50トリル記号
AccidentalSuggestion0注釈的な臨時記号 (音符の上に付く臨時記号、ムジカ・フィクタ)

これらのうちのいくつかのデフォルトでの配置を示している例を挙げます。

% 以降のテキスト スパナの詳細を設定します
\override TextSpanner.bound-details.left.text
    = \markup { \small \bold Slower }
% 強弱記号を譜の上に配置します
\dynamicUp
% オッターバ囲みの開始
\ottava #1
c''4 \startTextSpan
% 強弱テキストとヘアピンを付け加えます
c''4\pp\<
c''4
% テキスト スクリプトを付け加えます
c''4^Text |
c''4 c''
% 強弱テキストを付け加え、強弱ヘアピンを終わらせます
c''4\ff c'' \stopTextSpan |
% オッターバ囲みを終わらせます
\ottava #0
c'4 c' c' c' |

[image of music]

この例はテキスト スパナ – 音楽の上に置かれる延長線付きのテキスト – の作成方法についても示しています。スパナは \startTextSpan コマンドから \stopTextSpan コマンドまで延び、テキストのフォーマットは \override TextSpanner コマンドによって定義されます。詳細は テキスト スパナ を参照してください。

この例はさらにオッターバ囲みを作成する方法についても示しています。

outside-staff-priority のデフォルト値による配置があなたの望みに合わない場合、いずれかのオブジェクトの優先度をオーバライドすることになるかもしれません。上記の例で、オッターバ囲みをテキスト スパナの下に配置したいとします。すべきことは、OttavaBracketStaff コンテキストの中に作成されるということを思い出し、OttavaBracket の優先度を内部リファレンスか上記の表で調べて、それを TextSpanner の値よりも小さくすることです:

% 以降のテキスト スパナの詳細を設定します
\override TextSpanner.bound-details.left.text
    = \markup { \small \bold Slower }
% 強弱記号を譜の上に配置します
\dynamicUp
% 以降のオッターバ囲みをテキスト スパナの下に配置します
\once \override Staff.OttavaBracket.outside-staff-priority = #340
% オッターバ囲みの開始
\ottava #1
c''4 \startTextSpan
% 強弱テキストを付け加えます
c''4\pp
% 強弱の線スパナを付け加えます
c''4\<
% テキスト スクリプトを付け加えます
c''4^Text |
c''4 c''
% 強弱テキストを付け加えます
c''4\ff c'' \stopTextSpan |
% オッターバ囲みを終わらせます
\ottava #0
c'4 c' c' c' |

[image of music]

これらのオブジェクトのいくつか – 特に、小節番号、メトロノーム記号、それにリハーサル記号 – はデフォルトでは Score コンテキストの中にあるため、それらのプロパティをオーバライドする場合は適切なコンテキストを指定する必要があることに注意してください。

スラーはデフォルトでは譜内部オブジェクトに分類されています。しかしながら、譜の上部に配置された音符に付くスラーはしばしば譜の上に表示されます。このことは、スラーがまず最初に配置されるため、アーティキュレーションなどの譜外部オブジェクトをあまりにも高い位置に押し上げる可能性があります。アーティキュレーションの avoid-slur プロパティに 'inside をセットすることでアーティキュレーションをスラーよりも内側に配置することができます。しかし、avoid-slur プロパティはアーティキュレーションの outside-staff-priority#f にセットされている場合にのみ効果を持ちます。代替手段として、スラーの outside-staff-priority に数値をセットすることによって、スラーを他の譜外部オブジェクトとともに outside-staff-priority 値に従って配置することができます。ここで、2 つの方法の効果を示す例を挙げます:

\relative c'' {
  c4( c^\markup { \tiny \sharp } d4.) c8 |
  c4(
    \once \override TextScript.avoid-slur = #'inside
    \once \override TextScript.outside-staff-priority = ##f
    c4^\markup { \tiny \sharp } d4.) c8 |
  \once \override Slur.outside-staff-priority = #500
    c4( c^\markup { \tiny \sharp } d4.) c8 |
}

[image of music]

outside-staff-priority は、個々のオブジェクトの垂直方向の配置を制御するために使用することもできます。しかしながら、その結果は常に望み通りになるわけではありません。自動配置 にある例で “Text3” を “Text4” の上に配置したいとします。すべきことは TextScript の優先度を内部リファレンスか上記の表で調べて、“Text3” の優先度を大きくすることです:

c''2^"Text1"
c''2^"Text2" |
\once \override TextScript.outside-staff-priority = #500
c''2^"Text3"
c''2^"Text4" |

[image of music]

これはたしかに “Text3” を “Text4” の上に配置しています。しかし、“Text3”を “Text2” の上に配置して、“Text4” を押し下げてもいます。おそらく、これはそれほど望ましい結果ではないでしょう。本当に望んでいることは、すべての注釈を譜の上に譜から同じ距離だけ離して配置することです。そうするには明らかに、テキストのためにもっと広いスペースを確保するために、音符を水平方向に広げる必要があります。これは \textLengthOn コマンドを用いることで達成できます。


\textLengthOn コマンド

デフォルトでは、音楽のレイアウトが考慮されている限り、マークアップによって作り出されるテキストは水平方向のスペースと関係しません。\textLengthOn コマンドはこの動作を逆にして、テキストの配置に便宜をはかる必要がある限り、音符の間隔を広げます:

\textLengthOn  % 音符の間隔を広げてテキストに揃えます
c''2^"Text1"
c''2^"Text2" |
c''2^"Text3"
c''2^"Text4" |

[image of music]

デフォルトの動作に戻すためのコマンドは \textLengthOff です。効果を与えるのが単一の音楽タイミングであれば、\textLengthOn\once を付ける方法もあります。リハーサルマークやテンポ記号の水平方向のスペースを調整するには、 \markLengthOn\markLengthOff を使います。

マークアップ テキストは譜の上に突き出している音符を避けます。このことが望ましくない場合、優先度を #f にセットすることによって上方向への自動再配置を Off にすることになるかもしれません。ここで、マークアップ テキストがそのような音符とどのように相互作用するかを示す例を挙げます。

\relative {
  % このマークアップは短いため衝突は起きません
  c''2^"Tex" c'' |
  R1 |

  % このマークアップは長くて納まりきらないため、上に押し上げられます
  c,,2^"Text" c'' |
  R1 |

  % 衝突回避を OFF にします
  \once \override TextScript.outside-staff-priority = ##f
  c,,2^"Long Text   " c'' |
  R1 |

  % 衝突回避を OFF にします
  \once \override TextScript.outside-staff-priority = ##f
  \textLengthOn        % そして textLengthOn を ON にします
  c,,2^"Long Text   "  % 後ろにスペースが付け加えられます
  c''2 |
}

[image of music]


強弱記号の配置

通常、強弱記号は譜の下に配置されます。しかしながら、\dynamicUp コマンドを使うことで上に配置されるかもしれません。強弱記号は、その記号が付いている音符と垂直方向の関係で配置され、フレージング スラーや小節番号などの譜内部オブジェクトのすべてよりも下 (あるいは上) に配置されます。このことは、以下の例のように、到底受け入れられない結果を生み出す可能性があります:

\relative {
  \clef "bass"
  \key aes \major
  \time 9/8
  \dynamicUp
  bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! |
  ees,2.~\)\mf ees4 r8 |
}

[image of music]

しかしながら、音符とそれに付けられた強弱記号が互いに近い場合、自動配置は後の方にある強弱記号を譜から離すことによって衝突を避けます。しかし、以下のかなり不自然な例が示すように、それは最適な配置ではないかもしれません:

\dynamicUp
\relative { a'4\f b\mf a\mp b\p }

[image of music]

‘実際’ の音楽で同じような状況があった場合、音符の間隔をもう少し広げて、すべての強弱記号が譜から垂直方向に同じだけ離れるようにする方が望ましいかもしれません。マークアップ テキストの場合は \textLengthOn コマンドを用いることによってそうすることができますが、強弱記号には等価のコマンドがありません。そのため、\override コマンドを用いてそれを達成する方法を見出す必要があります。


グラフィカル オブジェクトのサイズ

まず最初に、グラフィカル オブジェクトのサイズがどのように決定されるかを学ばなくてはなりません。すべてのグラフィカル オブジェクトの内部では参照ポイントが定義され、それはそれらの親オブジェクトとの相対位置を決定するために使用されます。このポイントは親オブジェクトから垂直方向に X-offset、垂直方向に Y-offset 離れた位置になります。オブジェクトの水平方向の広がりは数値のペア X-extent で与えられ、そのペアはオブジェクトの左端と右端の参照ポイントとの相対関係について述べています。垂直方向の広がりも同様に数値のペア Y-extent によって与えられます。これらは grob-interface をサポートするすべてのグラフィカル オブジェクトが持つプロパティです。

デフォルトでは、譜外部オブジェクトには 0 の幅が与えられているため、水平方向で重なる可能性があります。これは extra-spacing-width'(+inf.0 . -inf.0) をセットすることによって、左端の広がりをプラス無限大に、右端の広がりをマイナス無限大にするというトリックによって達成されています。譜外部オブジェクトが水平方向で重ならないことを保証するには、extra-spacing-width の値をオーバライドし、余分なスペースを少しだけ作る必要があります。単位は 2 つの譜線の間隔なので、左端を 0.5 単位左に、右端を 0.5 単位右に動かすことで実現できます:

\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)

これが前の例で機能するかどうかを見てみましょう:

\dynamicUp
% Extend width by 1 staff space
\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
\relative { a'4\f b\mf a\mp b\p }

[image of music]

これで前よりも良くなりました。しかし、強弱記号が音符に合わせて上下するよりも、同じベースラインで揃っている方が望ましいでしょう。それを行うためのプロパティは staff-padding であり、衝突に関するセクションでカバーされています (オブジェクトの衝突 を参照してください)。


5.5 垂直方向のスペース

基本的に、LilyPond のオブジェクトにおける垂直方向のスペーシングは非常に良いです。2 声とピアノ伴奏からなる単純な曲でどのようになるかを見てみましょう:

[image of music]

垂直方向のスペースについて、何もおかしな所はありません。しかし、あなたが出版社と共に作業していて、譜と歌詞の垂直方向のスペースについてある要求がある場合を想像してください: 歌詞が音符から離れて配置されるように、ピアノ伴奏が歌のパートから離れて配置されるように、ピアノ伴奏の 2 つの譜が近づけて配置されるように要求されたとします。まず歌詞から取り組み始めましょう。

歌詞はシステム (訳注: 1 行分の譜のまとまり) 内に配置されています。そのため、歌詞のスペースを調整するコマンドは システム内部の可変な垂直方向のスペース にあります。これによると、歌詞は non-staff lines (譜ではない行) であるため、このスペースを変更するコマンドは nonstaff プロパティと関連するということが分かります。歌詞と関連している (上の段の) 譜とのスペースを広げるには relatedstaff プロパティ、下の段とのスペースを広げるには unrelatedstaff プロパティを使います。歌のパートは VerticalAxisGroup の一部であるため、そのプロパティを調整する必要があります。試してみて、効果があるか見てみましょう:

<<
  \new ChoirStaff
  <<
    \new Staff {
      \new Voice = "music" {
        b'2 c' c' c'
      }
    }
    \new Lyrics \with {
      \override VerticalAxisGroup.
        nonstaff-relatedstaff-spacing.padding = #5
      \override VerticalAxisGroup.
        nonstaff-unrelatedstaff-spacing.padding = #5
    }
    \lyricsto "music" {
      Here are some lyrics
    }
    \new Staff {
      \clef bass e'2 f e c
    }
  >>
  \new PianoStaff
  <<
    \new Staff {
      g''2 c'' c'' a''
    }
    \new Staff {
      \clef bass e2 f c e
    }
  >>
>>

[image of music]

確かに反映されました。しかしやり過ぎかもしれません。padding プロパティを 5 に設定すると、LilyPond は 5 譜スペースをオブジェクト間の距離に追加します。これは今回は大きすぎるので、2 を使用しましょう。

次に、ピアノ伴奏を歌のパートから離しましょう。歌は ChoirStaff であるため、この譜のグループと下にあるピアノ譜とのスペースを増やす必要があります。StaffGrouperstaffgroup-staff-spacing にある basic-distance を変更することで行います。

<<
  \new ChoirStaff \with {
    \override StaffGrouper.
      staffgroup-staff-spacing.basic-distance = #15
  }
  <<
    \new Staff {
      \new Voice = "music" {
        b'2 c' c' c'
      }
    }
    \new Lyrics \with {
      \override VerticalAxisGroup.
        nonstaff-relatedstaff-spacing.padding = #2
      \override VerticalAxisGroup.
        nonstaff-unrelatedstaff-spacing.padding = #2
    }
    \lyricsto "music" {
      Here are some lyrics
    }
    \new Staff {
      \clef bass e'2 f e c
    }
  >>
  \new PianoStaff
  <<
    \new Staff {
      g''2 c'' c'' a''
    }
    \new Staff {
      \clef bass e2 f c e
    }
  >>
>>

[image of music]

完璧です。さて、ピアノ譜をお互いに近づける最後の要求に応えましょう。そのためには、また StaffGrouper のプロパティを変更しますが、今回はbasic-distancepadding の両方の値を減らします。このようにして行います。

<<
  \new ChoirStaff \with {
    \override StaffGrouper.
      staffgroup-staff-spacing.basic-distance = #15
  }
  <<
    \new Staff {
      \new Voice = "music" {
        b'2 c' c' c'
      }
    }
    \new Lyrics \with {
      \override VerticalAxisGroup.
        nonstaff-relatedstaff-spacing.padding = #2
      \override VerticalAxisGroup.
        nonstaff-unrelatedstaff-spacing.padding = #2
    }
    \lyricsto "music" {
      Here are some lyrics
    }
    \new Staff {
      \clef bass e'2 f e c
    }
  >>
  \new PianoStaff \with {
    \override StaffGrouper.staff-staff-spacing = #'(
                            (basic-distance . 0)
                            (padding . 0))
  }
  <<
    \new Staff {
      g''2 c'' c'' a''
    }
    \new Staff {
      \clef bass e2 f c e
    }
  >>
>>

[image of music]

非常に近くなりました。しかしこれが出版社の望むものでした。必要であれば、paddingbasic-distance を変更することで間隔を広げることができます。

垂直方向のスペースを変更する方法はたくさんあります。覚えておくべきキーポイントはこれです: StaffGroup にあるオブジェクト (例えば GrandStaffPianoStaff のグループ) のスペースは、 StaffGrouper の変数によって操作されること、グループ化されていない譜 (例えば LyricsStaff) のスペースは、VerticalAxisGroup の変数によって操作されることです。詳しくは、 Flexible vertical spacing paper variables Flexible vertical spacing within systems を参照してください。


5.6 オブジェクトの衝突


5.6.1 オブジェクトを移動させる

これを聞いて驚くかもしれませんが、LilyPond は完璧ではありません。いくつかの記譜要素が重なりある可能性があります。これは遺憾なことですが、実際にはごく稀です。通常、オブジェクトを移動させる必要性は読みやすさや美しさのためです – オブジェクトの周りにもう少しスペースを多く/少なくとった方がより良くなるといった場合です。

記譜要素の重なりを解決する主要なアプローチが 3 つあります。それらは以下の順番で考慮されるべきです:

  1. 重なり合っているオブジェクトの 1 つの direction譜内部オブジェクト でリストアップした内部オブジェクトのための定義済みコマンドを用いて変更することになるかもしれません。符幹、スラー、連桁、タイ、強弱記号、テキスト、連符はこの方法で容易に再配置できるかもしれません。この方法の限界は配置の仕方の選択肢が 2 つしかないことであり、どちらも適当でないかもしれません。
  2. LilyPond がレイアウト オブジェクトを配置するときに使用するオブジェクト プロパティ\override を用いて変更することになるかもしれません。オブジェクト プロパティに変更を加えることの利点は、(a) スペースをとる必要がある場合に他のいくつかのオブジェクトは自動的に移動させられます、(b) 1 回のオーバライドを同じオブジェクト タイプのインスタンスすべてに適用することができます。変更するプロパティには以下のものが含まれます:
    • direction

      これはすでに詳しくカバーされています – 譜内部オブジェクト を参照してください。

    • padding, left-padding, right-padding, staff-padding

      あるオブジェクトが配置されるとき、そのオブジェクトの padding プロパティが、そのオブジェクトとそのオブジェクトに最も隣接するオブジェクトの端との間に置かれる間隔を指定します。配置される最中のオブジェクトの padding 値が使用されるということに注意してください。すでに配置されたオブジェクトの padding 値は無視されます。padding によって指定された間隔は side-position-interface をサポートするオブジェクトすべてに適用することができます。

      臨時記号のグループの配置は、padding の代わりに、left-paddingright-padding によって制御されます。これらのプロパティは AccidentalPlacement オブジェクトの中にあり、注意すべきことに、そのオブジェクトは Staff コンテキストの中にあります。譜刻プロセスでは、符頭が最初に譜刻され、臨時記号 (がある場合は) が次に符頭の左側に付け加えられます。このとき、臨時記号と符頭の間隔は right-padding プロパティによって指定されます。そのため、AccidentalPlacement オブジェクトの right-padding プロパティだけが臨時記号の配置に影響を与えます。

      staff-padding プロパティは padding プロパティと深い関わりがあります: padding プロパティは、side-position-interface をサポートするオブジェクトとそれに最隣接する他のオブジェクト (一般には音符や譜線) との間のスペースの最小量を制御します。一方、staff-padding は常に譜の外側に配置されるレイアウト オブジェクトにのみ適用されます – これは譜の外側に配置されるオブジェクトと譜の間に挿入されるべきスペースの最小量を制御します。staff-paddin は譜ではなく音符との相対関係で配置されるオブジェクトには影響を与えないということに注意してください。そのようなオブジェクトに対して staff-padding のオーバライドを行ったとしてもエラーは起きないかもしれませんが、無視されます。

      あなたが再配置しようとしているオブジェクトに対して求められる padding プロパティはどれなのかを見つけるには、内部リファレンスに戻ってそのオブジェクトのプロパティを調べる必要があります。padding プロパティはあなたが再配置しようとしているオブジェクトの中には無いかもしれないということに注意してください。その場合は、そのオブジェクトに関係があるオブジェクトを調べてください。

      すべての padding 値は譜スペースで測られます。たいていのオブジェクトでは、この値はデフォルトで約 1.0 かそれ以下にセットされています (それぞれのオブジェクトで値はさまざまです)。間隔を大きく (あるいは小さく) する必要がある場合、その値はオーバライドされるかもしれません。

    • self-alignment-X

      このプロパティを使うことで、親オブジェクトの参照ポイントに従って、オブジェクトを左、右、中央に揃えることができます。このプロパティは self-alignment-interface をサポートするオブジェクトすべてに対して使用することができます。一般に、テキストを保持するオブジェクトです。値は Left, RIGHT, CENTER です。代替手段として、-1 から +1 までの数値を指定することもできます。-1 は左揃えであり、+1 は右揃え、その間の数値は左揃えから右揃えへのテキストを移動させます (訳者: -0.5 であれば、左揃えと中央揃えの中間ということ)。1 よりも大きな数値を指定することでテキストをさらに左へ、-1 よりも小さな数値を指定することでテキストをさらに右へ移動させることができます。この値を 1 増減することによる移動量はそのテキストの長さの半分です。

    • extra-spacing-width

      このプロパティは item-interface をサポートするオブジェクトすべてで利用可能です。このプロパティは 2 つの数値をとり、最初の数値はオブジェクトの左側に余白を追加し、2 番目の数値はオブジェクトの右側に余白を追加します。負値はオブジェクトの端を左に移動させ、正値は右に移動させます。そのため、オブジェクトを広くするには、最初の数値を負値にして、2 番目の数値を正値にする必要があります。すべてのオブジェクトが両方の数値を遵守するわけではないということに注意してください。例えば、Accidental オブジェクトは最初の数値 (左端) にしか注意を払いません。

    • staff-position

      staff-positionstaff-symbol-referencer-interface のプロパティです。これは、譜との相対関係で配置されるオブジェクトによってサポートされます。このプロパティはオブジェクトの垂直方向の位置を、譜の中央にある譜線から譜スペースの半分を単位として、指定します。このプロパティは複数小節に亘る休符、タイ、異なるボイスの中にある音符といったレイアウト オブジェクトの衝突を解決する場合に有用です。

    • horizontal-shift

      ボイスの中で、同じタイミングにある全ての音符は 1 つの音符列にグループ化され、NoteColumn オブジェクトがその音符のグループの水平位置をコントロールするために作成されます (ボイスを明示的にインスタンス化する の “Note columns” を参照してください)。 もし 1 つの Staff コンテキストにある 2 つ以上の音符列が、同じタイミングで出現し同じ向きの符幹を持つ場合に限り、それらの horizontal-shift プロパティの値が順位を付けるために使用され、高い順位にあるものが優先的に符頭の衝突を避けるために移動します。このプロパティは \voiceXXX コマンドによってセットされ、\override コマンドで直接上書きすることができますが、通常は \shiftOn コマンドによって上書きします。注意しなければならないことは、このプロパティは移動の 順位 を決定するだけだけであり、移動の大きさを決定するものではないということです。 移動の大きさは、順位ごとに符頭の幅を基にして 1 つずつ大きくなっていきます。1 つ分の幅は通常符頭の幅の半分ですが、それで近い場合には符頭 1 つ分の幅になります。

    • force-hshift

      force-hshift プロパティは NoteColumn のプロパティです (実際には note-column-interface のプロパティです)。このプロパティを変更することで、音符列が重なってしまう場合において音符列を移動させることができます。重ならない音符列には効果が無いということに注意してください。移動の量は音符列特有の単位、すなわち最初のボイスの中にある音符の符頭の幅で指定されます。 このプロパティは、通常の \shiftOn コマンド (ボイスを明示的にインスタンス化する を参照してください) が音符の衝突を十分に解決できないような複雑な状況で使用されるべきです。この目的のためには、extra-offset プロパティを用いるよりも force-hshift プロパティを用いる方が好ましいです。なぜなら、譜スペースを単位とした距離を算出する必要が無く、NoteColumn の内外に音符を移動させることは符頭のマージといった他のアクションに影響を与えるからです。

  3. 最後に、他の方法がすべて失敗した場合、オブジェクトを手動で譜の中央線からの垂直方向の相対位置に従って、あるいは新たに設定した位置との距離に従って、再配置することになるかもしれません。この方法の欠点は、再配置のための正確な値を算出する必要がある – しばしば、その算出はそれぞれのオブジェクトに対して個々に、トライ&エラーで行われます – 必要があるということ、さらに、この方法による移動は LilyPond が他のオブジェクトをすべて配置した後に行われるため、ユーザはその結果として起こるかもしれない衝突をすべて回避する責任があるということです。しかし、この方法の最大の問題点は、音楽が後で変更された場合に、再配置用の値を再び算出する必要があるということです。このタイプの手動再配置のために使用されるプロパティは以下のようなものです:
    extra-offset

    このプロパティは grob-interface をサポートするレイアウト オブジェクトのいずれかに適用されます。このプロパティはペアになった数値をとり、それぞれの数値は水平方向と垂直方向の移動を指定します。負値はオブジェクトを左または下へ移動させます。単位は譜スペースです。この移動はオブジェクトの譜刻が完了した後に行われるため、あるオブジェクトを任意の位置へ、他のオブジェクトに影響を与えることなく、再配置することができます。

    positions

    このプロパティは、連桁、スラー、連符の傾きと高さを手動で調節するために最も有用なプロパティです。このプロパティはペアになった数値をとり、それぞれの数値は連桁、スラーなどの左端と右端の位置を譜の中央線との距離で指定します。単位は譜スペースです。けれども、スラーとフレージング スラーを任意の値で再配置することはできないということに注意してください。LilyPond はまずスラーが取り得る位置のリストを生成し、それからデフォルトでは “最良に見える” スラーを探します。positions がオーバライドされていた場合、そのリストの中からリクエストされた位置に最も近いスラーが選択されます。

あるオブジェクトがこれらのプロパティすべてを持っているわけではありません。内部リファレンスに行き、そのオブジェクトではどのプロパティが利用可能なのかを調べる必要があります。

ここで、衝突に関係しそうなオブジェクトをリスト アップします。内部リファレンスを調べるためのオブジェクト名を付けるので、それらのオブジェクトを移動させるのに使うプロパティを見つけ出すのに使ってください。

オブジェクト タイプオブジェクト名
アーティキュレーション (Articulation)Script
連桁 (Beam)Beam
強弱記号 (Dynamic) (垂直方向)DynamicLineSpanner
強弱記号 (Dynamic) (水平方向)DynamicText
運指法記号 (Fingering)Fingering
リハーサル / テキスト記号 (Rehearsal / Text mark)RehearsalMark
スラー (Slur)Slur
テキスト – つまり、^"text" (Text)TextScript
タイ (Tie)Tie
連符 (Tuplet)TupletBracket

5.6.2 表記の重なりを修正する

今度は、前のセクションで扱ったプロパティが記譜の重なりを解決する手助けをどのようにできるかを見ていきましょう。


padding プロパティ

padding プロパティに値をセットすることによって、音符とその上または下に譜刻される記号との間の距離を増減することができます。

c'2\fermata
\override Script.padding = #3
b2\fermata

[image of music]

% これは機能しません。この下を見てください
\override MetronomeMark.padding = #3
\tempo 4 = 120
c'1 |
% これは機能します
\override Score.MetronomeMark.padding = #3
\tempo 4 = 80
d'1 |

[image of music]

2 番目の例では、ある特定のオブジェクトを扱うのはどのコンテキストなのかを突き止めることが重要であるということに注意してください。MetronomeMark オブジェクトは Score コンテキストの中で処理されるため、Voice コンテキストの中でのプロパティの変更は無視されます。更に詳細を知りたければ、 Modifying properties を参照してください。

outside-staff-priority に従って配置されているオブジェクトの並びの中のあるオブジェクトの padding プロパティが増やされた場合、そのオブジェクトとそれよりも外側にあるすべてオブジェクトが移動させられます。


right-padding プロパティ

right-padding プロパティは臨時記号とそれが適用される音符との間のスペースに影響を与えます。このプロパティを変更することは必ずしも必要ではありませんが、微分音の音楽で使われる特殊な臨時記号の図柄や図柄の組み合わせに対してデフォルトのスペースが適切ではない場合に必要となるかもしれません。臨時記号のステンシルを望みのシンボルを保持するマークアップにオーバライドする必要があります:

sesquisharp = \markup { \sesquisharp }
\relative {
  c''4
  % これは 1.5 倍シャープを譜刻しますが、スペースが小さすぎます
  \once \override Accidental.stencil = #ly:text-interface::print
  \once \override Accidental.text = #sesquisharp
  cis4 c
  % これはスペースを改善しています
  \once \override Score.AccidentalPlacement.right-padding = #0.6
  \once \override Accidental.stencil = #ly:text-interface::print
  \once \override Accidental.text = #sesquisharp
  cis4 |
}

[image of music]

これは必然的に臨時記号のステンシルをオーバライドすることになります。このオーバライドについては後々までカバーされません。ステンシル タイプは手続きでなければならず、ここでは Accidentaltext プロパティの内容 – 内容には 1.5 倍シャープがセットされています – を譜刻するように変更されています。それらの記号は right-padding のオーバライドによって符頭からさらに遠くへ移動させられています。


staff-padding プロパティ

staff-padding を使うことで、強弱記号などのオブジェクトを、他のオブジェクトが譜から離すよう強制しない限り、譜から一定の距離にあるベースラインに揃えることができます。このプロパティは DynamicText のプロパティではなく、DynamicSpanner のプロパティです。この理由は、このベースラインは延長スパナを含む すべて の強弱記号に等しく適用されるべきだからです。そのため、これは以前のセクションでの例の中にある強弱記号を揃えるための方法になります:

\override DynamicLineSpanner.staff-padding = #3
\relative { a'4\f b\mf a\p b\mp }

[image of music]


self-alignment-X プロパティ

以下の例はこのプロパティが、運指法記号オブジェクトの右端を親の音符の参照ポイントに揃えることによって、弦楽器の運指法記号オブジェクトと音符の符幹との相対位置を調整している様子を示しています:

\voiceOne
<a''\2>
\once \override StringNumber.self-alignment-X = #RIGHT
<a''\2>

[image of music]


staff-position プロパティ

あるボイスの中にある複数小節に亘る休符は他のボイスの中にある音符と衝突する可能性があります。このような休符は小節線と小節線の間の中央に譜刻されるため、LilyPond がそれと衝突するかもしれない音符を突き止めるのは非常に困難です。なぜなら、現在の音符間それに音符-休符間の衝突対応は、同時に起こる音符と休符に対してのみ行われるからです。以下に、このタイプの衝突の例を挙げます:

<< \relative { c'4 c c c } \\ { R1 } >>

[image of music]

ここでの最良の解決策は、複数小節に亘る休符を下へ移動させることです。なぜなら、その休符はボイス 2 の中にあるからです。\voiceTwo (すなわち、<<{…} \\ {…}>> 構造の 2 番目のボイス) のデフォルト状態では、MultiMeasureReststaff-position-6 にセットされています。そのため、そのプロパティを、例えば半譜スペース 4 つ分押し下げるには、-10 に変更する必要があります。

<<
  \relative { c'4 c c c }
  \\
  \override MultiMeasureRest.staff-position = #-10
  { R1 }
>>

[image of music]

これは、例えば extra-offset を使うよりも良い解決方法です。なぜなら、その休符の上に加線が自動的に挿入されるからです。

正確な値と不正確な値の違いについては、 タイを手動で譜刻する を参照してください。


extra-offset プロパティ

extra-offset プロパティは、あるオブジェクトの水平方向と垂直方向の配置を完全に制御します。

以下の例では、2 番目の運指法記号が少し左に、そして 1.8 譜スペース下に移動させられています:

f'4-5
\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
f'4-5

[image of music]


positions プロパティ

positions プロパティは連符、スラー、フレージング スラー、連桁の位置を手動で制御することができ、それにより傾きも制御できます。

ここで、フレージング スラーとスラーが衝突している例を示します:

\relative { a'8 \( ( a'16 ) a \) }

[image of music]

衝突を解決するために、フレージング スラーの両端を上に移動させます。左端を譜中央線よりも 2.5 譜スペース上に設定し、右端を 4.5 譜スペース上に設定すると、LilyPond は候補の中から両端の位置が最も設定に近いフレージング スラーを選択します:

\once \override PhrasingSlur.positions = #'(2.5 . 4.5)
a'8 \( ( a''16 ) a'' \)

[image of music]

これで改善されました。しかしながら、スラーの右端を少し下げてみてはどうでしょうか?そうしようとした場合、この方法では実行できないことがわかります。すでに表示されているスラーよりも右端が下がっている候補は無く、そのような場合には positions は効果を持たないからです。しかしながら、必要があればタイ、スラー、それにフレージング スラーの位置と形状を非常に正確に設定することが できます。正確な設定を行う方法は Modifying ties and slurs で学習してください。

もう 1 つ例を示します。連桁がタイと衝突しています:

{
  \time 4/2
  <<
    \relative { c'1~ 2. e8 f }
    \\
    \relative {
      e''8 e e e
      e e e e
      f2 g
    }
  >>
  <<
    \relative { c'1~ 2. e8 f }
    \\
    \relative {
      e''8 e e e
      e e e e
      f2 g
    }
  >>
}

[image of music]

これは、譜の中央線から 1.81 譜スペース上の位置にある連桁の両端を、例えば、1 に手動で上げることによって解決することができます:

{
  \time 4/2
  <<
    \relative { c'1~ 2. e8 f }
    \\
    \relative {
      \override Beam.positions = #'(-1 . -1)
      e''8 e e e
      e e e e
      f2 g
    }
  >>
  <<
    \relative { c'1~ 2. e8 f }
    \\
    \relative {
      e''8 e e e
      e e e e
      f2 g
      \revert Beam.positions
    }
  >>
}

[image of music]

オーバライドの効果は継続して第 2 小節のボイス 2 の 8 分音符にも適用されていますが、ボイス 1 の連桁には、その後の第 2 小節においてもまったく適用されていないということに注意してください。例に示したように、オーバライドがもう適用されるべきでないところではオーバライドをリバートするべきです。


force-hshift プロパティ

今や、私はボイスを聴いている の最後で挙げた Chopin の例にどのように修正を加えるべきかを知っています。この例は以下のような状態でした:

\new Staff \relative {
  \key aes \major
  <<
    { c''2 aes4. bes8 }
    \\
    { <ees, c>2 des }
    \\
    \\
    { aes'2 f4 fes }
  >> |
  <c ees aes c>1 |
}

[image of music]

最初の和音の内声の音 (つまり、4 番目のボイスにある A-フラット) を上の音符の音符列からずらす必要はありません。そのために \shiftOff を用います。

2 番目の和音では、F を A-フラットに揃えて、符幹の衝突を避けるために最下段の音符を少し右に移動させるべきでしょう。そうするには、D-フラットの NoteColumnforce-hshift を設定して譜スペースの半分だけ右にずらし、F の force-hshift をゼロにします。注意すべきことは、すぐ後のタイミングを越えて設定が伝播してしまわないように、 \once を使っているということです。 この小さい例においては、ボイス 4 の \once と 2 個目の \override (訳注: \shiftOff のこと) は省略できますが、それは良い方法ではありません。

ここで、最終結果を挙げます:

\new Staff \relative {
  \key aes \major
  <<
    { c''2 aes4. bes8 }
    \\
    { <ees, c>2 \once \override NoteColumn.force-hshift = 0.5 des }
    \\
    \\
    { \once \shiftOff aes'2 \once \shiftOff f4 fes }
  >> |
  <c ees aes c>1 |
}

[image of music]


5.6.3 実際の音楽からの例

調整についてのセクションを、望みの出力を作り出すためにいくつかの調整を必要とするトリッキーな例を処理するときにとられるステップを示すことで締めくくります。この例は、記譜法についての普通ではない問題を解決するための記譜法リファレンスの使い方を示すために慎重に選ばれたものです。この例は一般的な譜刻プロセスを代表するものではありません。ですから、この例の複雑さでやる気を失わないでください!幸いなことに、このように複雑な問題は非常に稀です!

この例は Chopin の Première Ballade, Op. 23 の第 6 - 9 小節からとりました。序盤の Lento から Moderato へと移調する部分です。まず最初に望んでいる出力挙げますが、例があまりにも複雑になり過ぎないように強弱記号、運指法記号、ペダル記号は省きました。

[image of music]

まず、第 3 小節の右手パートには 4 つのボイスが必要であることに注目します。それぞれのボイスは、連桁でつながれた 5 つの 8 分音符、タイで結ばれた C、半音符の D (これは 8 分音符の D とマージされています)、付点 4 分音符の F シャープ (これも同じピッチの 8 分音符とマージされています) です。他の部分はすべて単一のボイスなので、最も容易な方法は 4 つのボイスを必要になったときに一時的に導入する方法です。一時的に多声にする方法を忘れてしまったのならば、私はボイスを聴いているボイスを明示的にインスタンス化する を参照してください。 ここでは、多声パッセージに明示的にインスタンス化されたボイスを使うことにします。なぜなら、すべてのボイスが明示的にインスタンス化されている方が、LilyPond はうまく衝突を回避できるからです。

音符を 2 つの変数として入力し、譜構造を Score ブロックの中でセットアップすることから始めて、それで LilyPond がデフォルトでどのような出力を作り出すのか見てみましょう:

rhMusic = \relative {
  \new Voice {
    r2 c''4. g8 |
    bes1~ |
    \time 6/4
    bes2. r8
    % 4 つのボイスの多声セクションの開始
    <<
      { c,8 d fis bes a }  % メイン ボイスの続き
      \new Voice {
        \voiceTwo
        c,8~ 2
      }
      \new Voice {
        \voiceThree
        s8 d2
      }
      \new Voice {
        \voiceFour
        s4 fis4.
      }
    >> |
    g2.  % メイン ボイスの続き
  }
}

lhMusic = \relative {
  r2 <c' g ees>2 |
  <d g, d>1 |
  r2. d,,4 r4 r |
  r4
}

\score {
  \new PianoStaff <<
    \new Staff = "RH"  <<
      \key g \minor
      \rhMusic
    >>
    \new Staff = "LH" <<
      \key g \minor
      \clef "bass"
      \lhMusic
    >>
  >>
}

[image of music]

すべての音符は間違っていません。しかしながら、見た目は満足とは程遠いものです。タイは移調する拍子記号と衝突していて、第 3 小節の連桁の付け方は間違っていて、音符はマージされておらず、いくつかの記譜要素は欠けています。簡単なものから片付けていきましょう。連桁の付け方は手動で連桁を挿入することで修正でき、左手パートのスラーと右手パートのフレージング スラーは簡単に追加できます – なぜなら、これらはすべてチュートリアルでカバーされているからです。これらの修正を加えると、以下のようになります:

rhMusic = \relative {
  \new Voice {
    r2 c''4.\( g8 |
    bes1~ |
    \time 6/4
    bes2. r8
    % 4 つのボイスの多声セクションの開始
    <<
      { c,8 d fis bes a }  % メイン ボイスの続き
      \new Voice {
        \voiceTwo
        c,8~ 2
      }
      \new Voice {
        \voiceThree
        s8 d2
      }
      \new Voice {
        \voiceFour
        s4 fis4.
      }
    >> |
    g2.\)  % メイン ボイスの続き
  }
}

lhMusic = \relative {
  r2 <c' g ees>2( |
  <d g, d>1) |
  r2. d,,4 r4 r |
  r4
}

\score {
  \new PianoStaff <<
    \new Staff = "RH"  <<
      \key g \minor
      \rhMusic
    >>
    \new Staff = "LH" <<
      \key g \minor
      \clef "bass"
      \lhMusic
    >>
  >>
}

[image of music]

第 1 小節は正しくなりました。第 2 小節にはアルペジオが含まれていて、2 重の小節線で終わります。この学習マニュアルではこれらのことは言及されてこなかったのに、どうやってやればいいのでしょうか?ここで、記譜法リファレンスに移行する必要があります。索引で ‘arpeggio’ と ‘bar line’ を探せばすぐに、アルペジオは \arpeggio を和音の後に付け加えることによって作り出され、2 重小節線は \bar "||" コマンドによって作り出されることがわかります。それは簡単にできます。次に、タイと拍子記号の衝突を修正する必要があります。これはタイを上に移動させる方法が最善です。オブジェクトの移動については以前に オブジェクトを移動させる でカバーしました。そこでは、譜との相対位置で配置されるオブジェクトは、そのオブジェクトの staff-position プロパティをオーバライドすることによって、移動させることができると述べられています。このプロパティは譜スペースの半分を単位として、譜の中央線からの距離で指定されます。ですから、以下の以下のオーバライドをタイで結ばれる最初の音符の前に置けば、タイは中央線から 3.5 半譜スペースだけ上の位置に移動させられます:

\once \override Tie.staff-position = #3.5

これで第 2 小節の修正も完了で、以下のようになります:

rhMusic = \relative {
  \new Voice {
    r2 c''4.\( g8 |
    \once \override Tie.staff-position = #3.5
    bes1~ |
    \bar "||"
    \time 6/4
    bes2. r8
    % 4 つのボイスの多声セクションの開始
    <<
      { c,8 d fis bes a }  % メイン ボイスの続き
      \new Voice {
        \voiceTwo
        c,8~ 2
      }
      \new Voice {
        \voiceThree
        s8 d2
      }
      \new Voice {
        \voiceFour
        s4 fis4.
      }
    >> |
    g2.\)  % メイン ボイスの続き
  }
}

lhMusic = \relative {
  r2 <c' g ees>2( |
  <d g, d>1)\arpeggio |
  r2. d,,4 r4 r |
  r4
}

\score {
  \new PianoStaff <<
    \new Staff = "RH"  <<
      \key g \minor
      \rhMusic
    >>
    \new Staff = "LH" <<
      \key g \minor
      \clef "bass"
      \lhMusic
    >>
  >>
}

[image of music]

第 3 小節 – Moderato セクションの開始部分 – に取り掛かります。チュートリアルで \tempo コマンドを使ってテンポ表示を付け加える方法を示しましたので、‘Moderato’ を付け加えることは容易です。しかし、異なるボイスの中にある音符をマージするにはどうするのでしょうか?ここで、助けを求めて記譜法リファレンスに移行する必要があります。記譜法リファレンスで “merge” を探せばすぐに、 Collision resolution で符頭や付点の付き方が異なる音符をマージするためのコマンドにたどり着きます。今回の例では、多声部セクションで両方のタイプの音符をマージする (異なる符頭を持つ音符のマージと、付点の付き方が異なる音符のマージ) 必要があるので、記譜法リファレンスで見つけた情報を使って、以下のコマンド:

\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn

を多声部セクションの開始点に置き、以下のコマンド:

\mergeDifferentlyHeadedOff
\mergeDifferentlyDottedOff

をセクションの終了点に置きます。これで、例は以下のようになります:

[image of music]

オーバライドは 2 つの F シャープの音符をマージしましたが、2 つの D をマージしませんでした。なぜマージしなかったのでしょうか?その答えは記譜法リファレンスの同じセクションにあります – マージされる音符は反対向きの符幹を持っていなくてはならず、同じ音符列に 3 つ目の音符がある場合は 2 つの音符をマージさせることはできません。今回の例では、2 つの D は両方とも上向きの符幹を持っていて、3 つ目の音符 – C – が存在します。我々は \stemDown を用いて符幹の向きを変更する方法を知っていて、記譜法リファレンスも C を移動させる方法について述べています – \shift コマンドの 1 つを用いてシフトを行います。しかし、どのシフトを行えばよいのでしょうか?C はシフト off のボイス 2 の中にあり、2 つの D はボイス 1 とボイス 3 – それぞれ、シフト off とシフト on – の中にあります。ですから、C が 2 つの D と衝突するのを避けるために、\shiftOnn を用いて C を更にシフトさせる必要があります。これらの変更を加えると、以下のようになります:

rhMusic = \relative {
  \new Voice {
    r2 c''4.\( g8 |
    \once \override Tie.staff-position = #3.5
    bes1~ |
    \bar "||"
    \time 6/4
    bes2.\tempo "Moderato" r8
    \mergeDifferentlyHeadedOn
    \mergeDifferentlyDottedOn
    % 4 つのボイスの多声セクションの開始
    <<
      { c,8 d fis bes a }  % メイン ボイスの続き
      \new Voice {
        \voiceTwo
        % c2 をメインの音符列から外したため、
        % マージが機能します
        c,8~ \shiftOnn c2
      }
      \new Voice {
        \voiceThree
        % マージさせるために d2 の符幹を下向きにする必要があります
        s8 \stemDown d2
      }
      \new Voice {
        \voiceFour
        s4 fis4.
      }
    >> |
    \mergeDifferentlyHeadedOff
    \mergeDifferentlyDottedOff
    g2.\)  % メイン ボイスの続き
  }
}

lhMusic = \relative {
  r2 <c' g