如何限制Staff.NoteHead覆盖?

时间:2013-09-30 16:34:20

标签: lilypond

我经常有一串谐波,所以我决定使用一个音乐功能(该功能是一个切线;如果我直接用音符放置覆盖,我会遇到同样的问题。问题是覆盖本身):< / p>

harmonics =
#(define-music-function
    (parser location notes)
    (ly:music?)
    #{
        %\harmonicsOn
        \override Staff.NoteHead #'style = #'harmonic-mixed

        $notes

        \revert Staff.NoteHead #'style
        %\harmonicsOff
    #}
    )

\harmonicsOn\harmonicsOff有效,但它们总是空心的,因此我不想使用它们。覆盖notehead允许我在四分音符上有坚实的头部。

我的问题是,在持续时间内所有音符都会覆盖音符头,而不仅仅是提供给该功能的音符(参见下面代码中图像中的m.2,3):

melody = \relative c' { \stemUp

    \repeat unfold 4 { r8 b g b e' b, | }
    \bar "|."
}

harmony = \relative c' { \stemDown

    e,2. |

    \harmonics { e } |        
    \harmonics { e4 e } s |

    e2. |
}

\score {
    \new Staff {
        \time 3/4 \clef "treble_8"
        \key g \major

    <<
        \new Voice { \melody} \new Voice { \harmony}
    >>
    }
}

enter image description here

我正在寻找一种方法来仅修改我想要的音符(在这种情况下,在\harmony中),使其他音符保持不变。

编辑:我使用新的\temporary命令尝试使用lilypond 2.17,但我得到的结果相同。

Full code | NoteHead Internals Documentation

1 个答案:

答案 0 :(得分:1)

您的问题是您的函数使用\override命令,它会影响给定上下文中的所有同步grob,因此它会更改Staff上下文中的所有符头(包含旋律和和声音乐)。如果仅在语音环境中更改符头,则问题就解决了:

harmonics =
#(define-music-function
    (parser location notes)
    (ly:music?)
    #{
        %\harmonicsOn
        \override Voice.NoteHead #'style = #'harmonic-mixed
        $notes
        \revert Voice.NoteHead #'style
        %\harmonicsOff
    #}
    )