[ << 入出力全般 ] | [トップ][目次][インデックス] | [ スペースの問題 >> ] |
[ < LilyPond ファイルをインクルードする ] | [ 上へ : 入力ファイルに取り組む ] | [ 変数を使用する > ] |
3.3.2 1 つのソースから異なる版を生成する
同じ音楽ソースから異なるバージョンの楽譜を容易に生成できるようにするために、いくつかの方法が用意されています。長い音楽や注記のセクションをさまざまなやり方で組み合わせる場合には、おそらく変数が最も役に立つでしょう。差し替え用の短い音楽セクションの中から 1 つを選択する場合にはタグが役に立ち、楽曲の一部をいろいろな箇所で組み合わせることもできます。
どのような方法をとるにしても、楽譜構造から音楽表記を分離しておくと、音楽表記に手を触れずに楽譜構造を変更することが簡単に行えます。
変数を使用する | ||
タグを使用する | ||
グローバル設定を使用する |
[ << 入出力全般 ] | [トップ][目次][インデックス] | [ スペースの問題 >> ] |
[ < 1 つのソースから異なる版を生成する ] | [ 上へ : 1 つのソースから異なる版を生成する ] | [ タグを使用する > ] |
変数を使用する
音楽のセクションが変数の中で定義されている場合、そのセクションを楽譜の異なる部分で再利用することができます – Organizing pieces with variables を参照してください。例えば、アカペラ のボーカル譜はリハーサル目的ですべてのパートをまとめたピアノ譜を持つことがよくあります。これは声楽全般で言えることです。その場合、音楽を入力する必要があるのは 1 回だけです。2 つの変数からの音楽を 1 つの譜に組み込むことができます – 自動パート結合 を参照してください。ここに例を挙げます:
sopranoMusic = \relative { a'4 b c b8( a) } altoMusic = \relative { e'4 e e f } tenorMusic = \relative { c'4 b e d8( c) } bassMusic = \relative { a4 gis a d, } allLyrics = \lyricmode { King of glo -- ry } << \new Staff = "Soprano" \sopranoMusic \new Lyrics \allLyrics \new Staff = "Alto" \altoMusic \new Lyrics \allLyrics \new Staff = "Tenor" { \clef "treble_8" \tenorMusic } \new Lyrics \allLyrics \new Staff = "Bass" { \clef "bass" \bassMusic } \new Lyrics \allLyrics \new PianoStaff << \new Staff = "RH" { \partCombine \sopranoMusic \altoMusic } \new Staff = "LH" { \clef "bass" \partCombine \tenorMusic \bassMusic } >> >>
音楽表記には変更を加えずに、楽譜構造の文を変えるだけで、ボーカル パートだけあるいはピアノ パートだけの楽譜を作り出すことができます。
長い楽譜では、変数定義をそれぞれ別々のファイルの中に置いて、それらのファイルをインクルードすることになるかもしれません – LilyPond ファイルをインクルードする を参照してください。
[ << 入出力全般 ] | [トップ][目次][インデックス] | [ スペースの問題 >> ] |
[ < 変数を使用する ] | [ 上へ : 1 つのソースから異なる版を生成する ] | [ グローバル設定を使用する > ] |
タグを使用する
\tag #'partA
コマンドは音楽表記に
partA という名前を付けます。この方法でタグを付けられた表記は、後で \keepWithTag #'name
と
\removeWithTag #'name
のどちらかを用いて、名前によって選択あるいは排除することができます。タグの付いた音楽にそのようなフィルタを適用した結果は以下のようになります:
フィルタ | 結果 |
---|---|
\keepWithTag #'name あるいは
\keepWithTag #'(name1 name2…) が前に付くタグ付きの音楽 | タグの付いていない音楽と、与えられたタグ名のいずれかに当てはまる音楽がインクルードされます。他のタグ名を持つタグ付き音楽は排除されます。 |
\removeWithTag #'name あるいは
\removeWithTag #'(name1 name2…) が前に付くタグ付きの音楽 | タグの付いていない音楽と、与えられたタグ名のどれにも当てはまらない音楽がインクルードされます。与えられたタグ名のいずれかに当てはまる音楽は排除されます。 |
\keepWithTag と \removeWithTag のどちらも前に付かないタグ付きの音楽 | タグの付いた音楽とタグの付いていない音楽すべてがインクルードされます。 |
\tag
、\keepWithTag
それに \removeWithTag
コマンドの引数はシンボルやシンボルのリスト (例えば #'score
or #'(violinI violinII
)
と、音楽表記の順であるべきです。シンボルが LilyPond において正しい識別子
(アルファベットのみから成り、数字、アンダースコア、ダッシュは含まない) であり、音符名と混同しない場合である限り、#'
を省略することができ、シンボルのリストはドットで区切る記法を用いることができます。例えば、\tag #'(violinI violinII)
は \tag violinI.violinII
と書くことができます。\keepWithTag
や \removeWithTag
でも同様です。タグコマンドは音楽関数なので、\book
または \score
ブロックのような、音楽表記ではないオブジェクトをフィルターするのに使うことはできません。
以下の例では、楽曲を 2 つのバージョンで示しています。1 つはトリルを通常の記譜法で示していて、もう 1 つはトリルを明示的に展開しています:
music = \relative { g'8. c32 d \tag #'trills { d8.\trill } \tag #'expand {\repeat unfold 3 { e32 d } } c32 d } \score { \keepWithTag #'trills \music } \score { \keepWithTag #'expand \music }
\keepWithTag
を使う代わりに、音楽セクションを排除する方が楽な場合もあります:
music = \relative { g'8. c32 d \tag #'trills {d8.\trill } \tag #'expand {\repeat unfold 3 {e32 d} } c32 d } \score { \removeWithTag #'expand \music } \score { \removeWithTag #'trills \music }
タグ フィルタリングはアーティキュレーション、テキストなどにも適用することができます。フィルタリングを行うにはアーティキュレーションの前に
-\tag #'your-tag
を置きます。例えば、以下は条件付の運指指示を持つ音符と条件付注記を持つ音符を定義しています:
c1-\tag #'finger ^4 c1-\tag #'warn ^"Watch!"
複数の \tag
エントリで、または複数のタグを一つのシンボルのリストにすることで、表記に複数のタグを付けることもできます:
music = \relative c'' { \tag #'a \tag #'both { a4 a a a } \tag #'(b both) { b4 b b b } } << \keepWithTag #'a \music \keepWithTag #'b \music \keepWithTag #'both \music >>
単一の音楽表記に複数の \removeWithTag
フィルタを適用することによって、いくつかの異なる名前のタグが付いたセクションを排除することができます。または、\removeWithTag
にタグのリストを与える表記を用いることもできます:
music = \relative c'' { \tag #'A { a4 a a a } \tag #'B { b4 b b b } \tag #'C { c4 c c c } \tag #'D { d4 d d d } } \new Voice { \removeWithTag #'B \removeWithTag #'C \music \removeWithTag #'(B C) \music }
単一の音楽表記に 2 つ以上の \keepWithTag
フィルタを適用すると、タグ付きセクションが すべて 排除されてしまいます。なぜなら、最初のフィルタがそのタグ以外を持つセクションを排除し、2 番目のフィルタが更にそのセクションを排除するからです。\keepWithTag
コマンドを、複数のタグのリストを引数に与えて使うことで、そのリストに無いタグを持つセクションのみを削除することができます。
music = \relative c'' { \tag #'violinI { a4 a a a } \tag #'violinII { b4 b b b } \tag #'viola { c4 c c c } \tag #'cello { d4 d d d } } \new Staff { \keepWithTag #'(violinI violinII) \music }
上の例では、violinI と violinII の \tag
を表示しますが、viola や cello は表示しません。
While \keepWithTag
is convenient when dealing with one set
of alternatives, the removal of music tagged with unrelated tags
is problematic when using them for more than one purpose.
\keepWithTag
は、1 つだけの入れ替えのセットを扱う場合には便利ですが、関係のないタグが付けられた音楽を削除してしまうことは、タグを複数の目的で使用したい場合に問題となります。そのような場合では、タグの‘グループ’を宣言することができます。
\tagGroup #'(violinI violinII viola cello)
こうすることで、4 つの異なるタグが一つの‘タグ グループ’になります。それぞれのタグは、複数の‘タグ グループ’のメンバとなることはできません。
\keepWithTag #'violinI …
これで、violinI
のタグ グループに含まれるタグから、該当するタグのみが表示され、その他のタグは削除されます。(訳注: 指定されたタグ
グループに含まれないタグは表示されたままになります。)
music = \relative { \tagGroup #'(violinI violinII viola cello) \tag #'violinI { c''4^"violinI" c c c } \tag #'violinII { a2 a } \tag #'viola { e8 e e2. } \tag #'cello { d'2 d4 d } R1^"untagged" } \new Voice { \keepWithTag #'violinI \music }
既存の音楽表記のある特定の場所にいくつか音を組み込みたいことがあります。\pushToTag
と \appendToTag
を使って、既存の音楽構造の elements
の前または後に素材を追加することができます。すべての音楽構造が elements
を持つわけではありませんが、連続するか同時進行する音楽構造はまず間違いなく elements
を持ちます:
music = { \tag #'here { \tag #'here <<c''>> } } { \pushToTag #'here c' \pushToTag #'here e' \pushToTag #'here g' \music \appendToTag #'here c' \appendToTag #'here e' \appendToTag #'here g' \music }
どちらのコマンドもタグ、組み込む素材、それにタグ付けされた音楽表記を 取り、タグが出現するたびに素材を組み込みます。
参照
学習マニュアル: Organizing pieces with variables
記譜法リファレンス: 自動パート結合, LilyPond ファイルをインクルードする
既知の問題と警告
\keepWithTag
や \removeWithTag
でフィルタリングされた音楽表記に \relative
を用いると、オクターブ関係が変化してしまいます。これは、フィルタリングされた音符のみが \relative
で解釈されるためです。\keepWithTag
や \removeWithTag
よりも先にまず \relative
を適用することで、全ての音符が解釈されるようになるため、危険を回避することができます。
[ << 入出力全般 ] | [トップ][目次][インデックス] | [ スペースの問題 >> ] |
[ < タグを使用する ] | [ 上へ : 1 つのソースから異なる版を生成する ] | [ 特殊文字 > ] |
グローバル設定を使用する
別のファイルからグローバル設定をインクルードすることができます:
lilypond -dinclude-settings=MY_SETTINGS.ly MY_SCORE.ly
ページ サイズ、フォント、書体などのような設定のグループを別々のファイルに保存することができます。こうすることにより、適当な設定ファイルを指定するだけで、同じ楽譜から異なる版を作り出すことができます。
このテクニックはスタイル シートでも使えます。 Style sheets を参照してください。
参照
学習マニュアル: Organizing pieces with variables, Style sheets
記譜法リファレンス: LilyPond ファイルをインクルードする
[ << 入出力全般 ] | [トップ][目次][インデックス] | [ スペースの問題 >> ] |
[ < タグを使用する ] | [ 上へ : 1 つのソースから異なる版を生成する ] | [ 特殊文字 > ] |