Pregunta

I often have a string of harmonics, so I decided to use a music function (the function is a tangent; if I place the override directly with the notes I get the same problem. The issue is the override itself):

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

        $notes

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

\harmonicsOn and \harmonicsOff works, but they're always hollow notes so I don't want to use them. Overriding the notehead allows me to have solid heads on quarter notes.

My problem is that the note heads are overridden for all notes in the duration, not only the notes supplied to the function (see m. 2, 3 in the image below the following code):

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

I'm looking for a way to modify only the notes I want (in this case, in \harmony), leaving the other notes within that duration untouched.

Edit: I tried with lilypond 2.17 using the new \temporary command, but I get the same result.

Full code | NoteHead Internals Documentation

¿Fue útil?

Solución

Your problem is that your function uses the \override command, which affects all simultaneous grobs in a given context, and thus it is changing all noteheads in the Staff context (which contains both melody and harmony music). If you change the noteheads only in the Voice context, then your problem is solved:

harmonics =
#(define-music-function
    (parser location notes)
    (ly:music?)
    #{
        %\harmonicsOn
        \override Voice.NoteHead #'style = #'harmonic-mixed
        $notes
        \revert Voice.NoteHead #'style
        %\harmonicsOff
    #}
    )
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top