2013-09-30 36 views
1

我经常有一串谐波,所以我决定使用音乐功能(该功能是一个切线;如果我直接用音符放置覆盖,我会遇到同样的问题,问题是覆盖本身):如何限制Staff.NoteHead覆盖?

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

     $notes 

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

\harmonicsOn\harmonicsOff的作品,但他们总是空心的笔记,所以我不想使用它们。覆盖音符可以让我在四分音符上有坚实的头像。

我的问题是,该说明头被覆盖在持续时间的所有音符,不仅提供给函数的说明(参见米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),留下时间不变中的其他注意事项。

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

Full code | NoteHead Internals Documentation

回答

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 
    #} 
    ) 
+0

还值得一提的是,当您需要更改为具有在相同情况下其他同时grobs一个GROB一个属性(如作为和弦),命令'\ tweak'可能派上用场。看一下这些:'{ 1}'只改变一个和弦内的一个音符,而'{e'1 - \ tweak#'color #red \ pp - >}'只会改变动态的颜色。还要注意,在最后一种情况下,该命令需要'-'才能工作,因此会变成' - \ tweak'。 –