7

現在、私は次のようなコードを書いています。

\version "2.14.2"

P = #parenthesize

\relative c, {
  \clef bass 
    <c \P c'> <e \P e'> <g \P g'>2 <c, \P c'>4 <d \P d'> <e \P e'>2
}

ここで繰り返し言うのは、「この音と 1 オクターブ上の同じ音を括弧で囲んだもの」という意味です。

これを省略して、次のように書けるようにしたいと思います。

\version "2.14.2"

poct = ...

\relative c, {
  \clef bass 
  \poct c \poct e \poct g2 \poct c,4 \poct d \poct e2
}

私の以前の質問に対する有益な回答で示唆されているように、音楽機能を使用しようとしましたが、これを機能させる方法はありません。私が得ることができる最も近いのは

poct = #(define-music-function
     (parser location note)
     (ly:music?)
   #{
     << $note \transpose c c \parenthesize $note >>
   #})

しかし、これは<<..>>の代わりに<..を使用します。これ>は、私が望む方法でレンダリングされず (警告が表示されます)、\transpose c c実際に何かを転置する理由がわかりません。

最後に、接線関係ですが、音楽関数を試してみると、模倣する音楽関数を作成するだけでは不可能であることがわかりました\repeat unfold 2。次の例では、3 番目と 4 番目の間で 1 オクターブ下にジャンプしますc

\version "2.14.2"

double = #(define-music-function
     (parser location note)
     (ly:music?)
   #{
     $note $note
   #})

\relative c, {
  \clef bass 
  \double c \double e \double g2 \double c,4 \double d \double e2
}
4

3 に答える 3

1

LilyPond の開発者の 1 人である David Kastrup から次の回答を得ました。


「オクターブ移調」が発生するのは、基本的に \transpose cc が \absolute と同じだからです (LilyPond は移調された音楽に \relative を適用しないため)。

\repeat unfold に関連して \absolute は必要ありません: \repeat unfold は相対的な音楽を扱う方法を知っています。

バージョン 2.14.2 は非常に古いです。とにかく、現在 LilyPond トラッカーには問題http://code.google.com/p/lilypond/issues/detail?id=3673があり、それぞれのコードはhttps://codereview.appspot にあります。 com/30890043/diff/40001/scm/music-functions.scm

そして、実際にSchemeプログラミングに入ります。#{ #} は適切に機能しない可能性がありますが、それぞれの defmacro-public は 2.14 でも機能する可能性があります。

その定義では、二重定義は次のようになります。

double = #(define-music-function (parser location note) (ly:music?) (make-relative (note) note #{ $note $note #}))

その後、絶対モードと相対モードの両方で機能します。2.14 #{ #} が make-relative とジャイブしない場合、(make-sequential-music (list (ly:music-deep-copy note) (ly:music-deep-copy note))) を書くと、スキームの置き換え。

元の問題は単純なコードの置き換えにすぎないことに気付くと理解しやすくなるので、 \relative { \double c' } は異なるオクターブを使用して \relative { c' c' } になります。make-relative マクロは、単一の音符に対してのみ \relative 操作を実行し、結果を音楽式に貼り付けます。

于 2013-11-26T16:02:30.877 に答える