[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

4.7 更なる調整

@translationof Further tweaking


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

4.7.1 調整のその他の使用方法

@translationof Other uses for tweaks


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

異なるボイスの中にある音符をタイで結ぶ

@translationof Tying notes across voices

以下の例は異なるボイスの中にある音符をタイで結ぶ方法を示しています。通常、タイで結べるのは同じボイスの中にある音符だけです。2 つのボイスを使い、そのうちの 1 つにタイで結んだ音符を置きます:

[image of music]

そして、そのボイスの最初の上向き符幹と符尾を消します。これで、タイはボイスをまたがっているように見えます:

 
<<
  {
    \once \omit Stem
    \once \omit Flag
    b'8~ 8\noBeam
  }
\\
  { b'8[ g'] }
>>

[image of music]

参照

Learning Manual: \once 接頭辞, stencil プロパティ.


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

MIDI でフェルマータをシミュレートする

@translationof Simulating a fermata in MIDI

譜外部オブジェクトを出力から削除しようとする場合、そのオブジェクトの transparent プロパティではなく stencil プロパティをオーバライドする方が通常は望ましいです。あるオブジェクトの stencil プロパティを #f にセットすると、そのオブジェクトは出力から完全に削除されます。このことは、削除されたオブジェクトがそのオブジェクトとの相対位置で配置される他のオブジェクトの配置にまったく影響を及ぼさないということを意味します。

例えば、MIDI 出力でフェルマータをシミュレートするためにメトロノーム設定を変更したいとします。その場合、メトロノーム記号を出力に表示させたくありません。そして、それが 2 つのシステム (小節とその中にある表記) 間のスペースと、譜上にある隣接する注釈の位置に影響を与えることを望みません。そのため、そのメトロノーム記号の stencil プロパティを #f にセットする方法が最良です。ここで、2 つの手法の結果を示します:

 
\score {
  \relative {
    % Visible tempo marking
    \tempo 4=120
    a'4 a a
    \once \hide Score.MetronomeMark
    % Invisible tempo marking to lengthen fermata in MIDI
    \tempo 4=80
    a4\fermata |
    % New tempo for next section
    \tempo 4=100
    a4 a a a |
  }
  \layout { }
  \midi { }
}

[image of music]

 
\score {
  \relative {
    % Visible tempo marking
    \tempo 4=120
    a'4 a a
    \once \omit Score.MetronomeMark
    % Invisible tempo marking to lengthen fermata in MIDI
    \tempo 4=80
    a4\fermata |
    % New tempo for next section
    \tempo 4=100
    a4 a a a |
  }
  \layout { }
  \midi { }
}

[image of music]

両方の手段とも、フェルマータ部分の演奏時間を伸ばすメトロノーム記号を出力から削除していて、両方とも MIDI の演奏に必要な効果を与えています。しかし、1 番目の例の透明なメトロノーム記号がそれに続く拍子指示を上に押し上げているのに対して、2 番目のメトロノーム記号 (ステンシルが削除されたもの) は押し上げていません。

参照

音楽用語集: (music-glossary)system section ‘system’ in Music Glossary


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

4.7.2 レイアウトの調整のために変数を使用する

@translationof Using variables for layout adjustments

オーバライド コマンドはしばしば長く、入力するのが大変なものになります。そして、それらは完全に正しく記述されなければなりません。同じオーバライドが何度も使用される場合、それらを保持する変数を定義すると非常に役に立ちます。

歌詞の中のある特定の単語をボールド イタリック体で譜刻することによって、それらを強調したいと仮定します。歌詞の中では、\italic と \bold は (書式を) 変更したい単語や文と一緒に \markup ブロックの中に入れた場合にのみ機能しますが、それを毎回入力するのは大変です。埋め込む必要のある単語自体が、2 つのコマンドを簡単な変数を用いて使うことを妨げます。代替手段として、\override コマンドと \revert コマンドを使うことはできないでしょうか?

 
\override Lyrics.LyricText.font-shape = #'italic
\override Lyrics.LyricText.font-series = #'bold

\revert Lyrics.LyricText.font-shape
\revert Lyrics.LyricText.font-series

これらも、強調する必要のある単語がたくさんある場合、入力するのが非常に大変です。しかしながら、これらは 2 つの変数として定義することができ、それらの変数で単語を囲むことによって使ってその単語を強調することができます。これらのオーバライドに変数を用いることのもう 1 つの利点は、ドットの両側にスペースを置く必要が無いことです。なぜなら、これらのオーバライドは \lyricmode の中で直接解釈されるわけではないからです。ここで変数を用いる例を挙げますが、実際には早く打ち込めるようにもっと短い変数名を使用します:

 
emphasize = {
  \override Lyrics.LyricText.font-shape = #'italic
  \override Lyrics.LyricText.font-series = #'bold
}

normal = {
  \revert Lyrics.LyricText.font-shape
  \revert Lyrics.LyricText.font-series
}

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

SopranoMusic = \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 \emphasize Fa -- ther, | \normal strong to save,
}

VerseTwo = \lyricmode {
  O | \once \emphasize Christ, whose voice the | wa -- ters heard,
}

VerseThree = \lyricmode {
  O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood
}

VerseFour = \lyricmode {
  O | \emphasize Tri -- ni -- ty \normal of | love and pow'r
}

\score {
  \new ChoirStaff <<
    \new Staff <<
      \clef "treble"
      \new Voice = "Soprano"  { \voiceOne \global \SopranoMusic }
      \new Voice = "Alto" { \voiceTwo \AltoMusic }
      \new Lyrics \lyricsto "Soprano" { \VerseOne }
      \new Lyrics \lyricsto "Soprano" { \VerseTwo }
      \new Lyrics \lyricsto "Soprano" { \VerseThree }
      \new Lyrics \lyricsto "Soprano" { \VerseFour }
    >>
    \new Staff <<
      \clef "bass"
      \new Voice = "Tenor" { \voiceOne \TenorMusic }
      \new Voice = "Bass"  { \voiceTwo \BassMusic }
    >>
  >>
}

[image of music]


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

4.7.3 スタイル シート

@translationof Style sheets

LilyPond が作り出す出力にはさまざまな変更を加えることができます (詳細は 出力を調整する を参照してください)。しかしながら、調整を加えたい入力ファイルがたくさんあるとしたらどうでしょう?また、単に調整を実際の音楽表記から分離したいとしたらどうでしょう?これはとても簡単なことです。

以下の例を見てみましょう。#() を持つ部分を理解できなくても心配しないでください。Scheme を用いた高度な調整 で説明されています。

 
mpdolce =
  \tweak self-alignment-X #-0.6
  #(make-dynamic-script
    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})

inst =
#(define-music-function
     (string)
     (string?)
   #{ <>^\markup \bold \box #string #})

\relative {
  \tempo 4=50
  a'4.\mpdolce d8 cis4--\glissando a |
  b4 bes a2 |
  \inst "Clarinet"
  cis4.\< d8 e4 fis |
  g8(\! fis)-. e( d)-. cis2 |
}

[image of music]

mpdolce と tempoMark の定義に手を加えてみることにします。それらは望みの出力を作り出していますが、それらを別の楽曲で使いたいとします。単純にそれらを各ファイルの先頭部分にカット&ペーストすることもできますが、わずらわしいです。その方法では定義は依然として入力ファイルの中にあり、私は個人的にすべての #() は何か醜いと感じます。それらを他のファイルの中に隠すことにしましょう:

 
%%% これを "definitions.ily" というファイル名で保存してください
mpdolce =
  \tweak self-alignment-X #-0.6
  #(make-dynamic-script
    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})

inst =
#(define-music-function
     (string)
     (string?)
   #{ <>^\markup \bold \box #string #})

音楽ファイルの先頭付近で \include コマンドを使ってこのファイルを参照します。(インクルードされるファイルをコンパイルされるメイン ファイルと区別するため、拡張子 ‘.ily’ を使っています。) 今度は音楽ファイルを変更しましょう (このファイルを ‘"music.ly"’ として保存してください)。

 
\include "definitions.ily"

\relative {
  \tempo 4=50
  a'4.\mpdolce d8 cis4--\glissando a |
  b4 bes a2 |
  \inst "Clarinet"
  cis4.\< d8 e4 fis |
  g8(\! fis)-. e( d)-. cis2 |
}

[image of music]

これで前よりも良くなりましたが、いくつか変更を加えることにします。グリッサンド (訳者: 第 1 小節の C シャープと A の間) は見え難いので、もっと太く、符頭に近づけます。メトロノーム記号を、最初の音符の上ではなく、音部記号の上に持ってきます。最後に、私の作曲の先生は ‘C’ 拍子記号を嫌っているので、‘4/4’ に変更した方が良さそうです。

‘music.ly’ には変更を加えないでください。‘definitions.ily’ を以下のように書き換えます:

 
%%%  definitions.ily
mpdolce =
  \tweak self-alignment-X #-0.6
  #(make-dynamic-script
    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})

inst =
#(define-music-function
     (string)
     (string?)
   #{ <>^\markup \bold \box #string #})

\layout{
  \context {
    \Score
    \override MetronomeMark.extra-offset = #'(-5 . 0)
    \override MetronomeMark.padding = #'3
  }
  \context {
    \Staff
    \override TimeSignature.style = #'numbered
  }
  \context {
    \Voice
    \override Glissando.thickness = #3
    \override Glissando.gap = #0.1
  }
}

[image of music]

もっと良くなりました!今度はこれを公表したいとします。私の作曲の先生は ‘C’ 拍子記号を嫌っていますが、私はそちらを好みます。現在の definitions.ily を web-publish.ily にコピーして、それにを変更を加えてみましょう。この音楽はスクリーンに表示される PDF を作り出すことを意図したものなので、出力のフォントを全体に大きくすることにします。

 
%%%  web-publish.ily
mpdolce =
  \tweak self-alignment-X #-0.6
  #(make-dynamic-script
    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})

inst =
#(define-music-function
     (string)
     (string?)
   #{ <>^\markup \bold \box #string #})

#(set-global-staff-size 23)

\layout{
  \context {
    \Score
    \override MetronomeMark.extra-offset = #'(-5 . 0)
    \override MetronomeMark.padding = #'3
  }
  \context {
    \Staff
  }
  \context {
    \Voice
    \override Glissando.thickness = #3
    \override Glissando.gap = #0.1
  }
}

[image of music]

音楽ファイルの中では、単に \include "definitions.ily" を \include "web-publish.ily" に置き換えるだけです。もちろん、これをもっと便利なようにすることができます。‘definitions.ily’ ファイルには mpdolce と tempoMark の定義だけを持たせて、‘web-publish.ily’ ファイルには上で記述した \layout セクションだけを持たせ、‘university.ily’ ファイルには私の先生の好む出力を作り出すための調整だけを持たせます。‘music.ly’ の先頭部分は以下のようになります:

 
\include "definitions.ily"

%%%  以下の 2 行のどちらか片方のコメントを外してください!
\include "web-publish.ily"
%\include "university.ily"

このアプローチは、あなたがパーツ一式を作っているだけだとしても役に立つ可能性があります。私は自分のプロジェクトのために半ダースの ‘スタイル シート’ ファイルを使います。私はそれぞれの音楽ファイルを \include "../global.ily" で始め、‘gloval.ily’ には以下の内容を記述しています:

 
%%%   global.ily
\version "2.21.3"

#(ly:set-option 'point-and-click #f)

\include "../init/init-defs.ly"
\include "../init/init-layout.ly"
\include "../init/init-headers.ly"
\include "../init/init-paper.ly"

[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

4.7.4 その他の情報源

@translationof Other sources of information

内部リファレンスは LilyPond についての多くの情報を持っていますが、LilyPond の内部ファイルを調べることによってさらに多くの情報を収集することができます。内部ファイルを探究するには、まずあなたの使っているシステム特有のディレクトリを見つけ出す必要があります。このディレクトリの場所は、(a) あなたが lilypond.org からコンパイル済みのバイナリをダウンロードすることによって LilyPond を手に入れたのか、それとも、パッケージ マネージャから LilyPond をインストールした (つまり、GNU/Linux と一緒に配布されたか、fink や cygwin でインストールされた) のか、(b) LilyPond はどの OS 上で使用されているのか、に依存します:

lilypond.org からダウンロードした

パッケージ マネージャからインストールした、あるいは、ソースからコンパイルした

‘PREFIX/share/lilypond/X.Y.Z/’ に進んでください。PREFIX はパッケージ マネージャか configure スクリプトによってセットされるものであり、X.Y.Z は LilyPond のバージョン番号です。


このディレクトリの中に 2 つの興味深いサブディレクトリがあります:

‘ly/’ の中にあるファイルから見ていきましょう。‘ly/property-init.ly’ をテキスト エディタで開いてください。エディタはあなたが普段 .ly ファイルを編集するために使っているもので結構です。このファイルは標準の LilyPond 定義済みコマンド – \tieUp や \slurDotted など – のすべての定義を保持しています。1 つまたは複数の \override コマンドを保持している変数の定義以外のものはないということがわかるでしょう。例えば、\tieDotted は以下のように定義されています:

 
tieDotted = {
  \override Tie.dash-period = #0.75
  \override Tie.dash-fraction = #0.1
}

あなたがこれらのデフォルト値を好まない場合、これらの定義済みコマンドを容易に再定義することができます – 他の変数と同様に、入力ファイルの先頭で定義します。

以下のファイルは ‘ly/’ で見つかる有用なファイルです:

ファイル名内容
‘ly/engraver-init.ly’エングラーバ コンテキストの定義
‘ly/paper-defaults-init.ly’紙面関係のデフォルトの仕様
‘ly/performer-init.ly’パフォーマ コンテキストの定義
‘ly/property-init.ly’すべての共通定義済みコマンドの定義
‘ly/spanner-init.ly’スパナ関係の定義済みコマンドの定義

他の設定 (マークアップ コマンドの定義など) は .scm (Scheme) ファイルとして保存されています。Scheme プログラミング言語は、LilyPond 内部処理へのプログラム可能なインタフェイスを提供するために使用されます。これらのファイルについての詳しい説明は、Scheme 言語についての知識が必要となるため、このマニュアルの範囲外です。Scheme 言語とこれらのファイルを理解するには、十分な知識や時間が必要であるということを知っておくべきです ( (extending)Scheme tutorial section ‘Scheme tutorial’ in Extending を参照してください)。

あなたがこの知識を持っているのなら、興味を持つかもしれない Scheme ファイルは以下のものです:

ファイル名内容
‘scm/auto-beam.scm’サブ 連桁のデフォルト (訳者: 8 分音符には連桁だけが使用され、16 分音符やそれよりも短い音符には連桁とサブ 連桁が使われるのだと思います)
‘scm/define-grobs.scm’Grob (グラフィカル オブジェクト) プロパティのデフォルト設定
‘scm/define-markup-commands.scm’すべてのマークアップ コマンドの仕様
‘scm/midi.scm’MIDI 出力のデフォルト設定
‘scm/output-lib.scm’フレット、色、臨時記号、小節線などの見た目に影響を与える設定
‘scm/parser-clef.scm’サポートされる音部記号の定義
‘scm/script.scm’アーティキュレーションのデフォルト設定

[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]         [トップ] [目次] [インデックス] [ ? ]

4.7.5 Scheme を用いた高度な調整

@translationof Advanced tweaks with Scheme

\override と \tweak コマンドを用いることで多くのことが可能になりますが、LilyPond のアクションを変更するもっと強力な手段が LilyPond 内部処理へのプログラム可能なインタフェイスを通じて利用可能です。Scheme プログラミング言語で書かれたコードは LilyPond の内部処理に直接組み込むことができます。もちろん、それを行うには Scheme プログラミングについての基礎知識が必要であり、その手引きが (extending)Scheme tutorial section ‘Scheme tutorial’ in Extending で提供されています。

多くの実現可能なことの 1 つの例としては、プロパティに定数をセットする代わりに Scheme プロシージャをセットすることができます。このプロパティが LilyPond によってアクセスされたときに、このプロシージャが呼び出されます。このプロシージャが呼び出されたときに、このプロシージャによって決定された値を動的にそのプロパティにセットすることができます。以下の例では、符頭にその音符の譜上での位置に従って色を付けています:

 
#(define (color-notehead grob)
   "Color the notehead according to its position on the staff."
   (let ((mod-position (modulo (ly:grob-property grob 'staff-position)
                               7)))
     (case mod-position
       ;;   Return rainbow colors
       ((1) (x11-color 'red    ))  ; for C
       ((2) (x11-color 'orange ))  ; for D
       ((3) (x11-color 'yellow ))  ; for E
       ((4) (x11-color 'green  ))  ; for F
       ((5) (x11-color 'blue   ))  ; for G
       ((6) (x11-color 'purple ))  ; for A
       ((0) (x11-color 'violet ))  ; for B
       )))

\relative {
  % Arrange to obtain color from color-notehead procedure
  \override NoteHead.color = #color-notehead
  a2 b | c2 d | e2 f | g2 a |
}

[image of music]

(extending)Callback functions section ‘Callback functions’ in Extending に、これらのプログラム可能なインタフェイスの使い方を示している例がもっとあります。


[ < ] [ > ]   [ << ] [ 上へ ] [ >> ]

This document was generated by gub on 7 月 13, 2020 using texi2html 1.82.

他の言語: English, català, česky, deutsch, español, français, italiano, nederlands
About automatic language selection.