Как ограничить переопределения 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}
    >>
    }
}

Я ищу способ изменить только заметки, которые я хочу (в этом случае, в \harmony), оставляя другие заметки в течение этого периода нетронутыми.

Изменить: я пытался с Lilypond 2.17, используя новый \temporary команда, но я получаю тот же результат.

Полный код | NoteHead Внутренняя документация

1 ответ

Решение

Ваша проблема в том, что ваша функция использует \override команда, которая влияет на все одновременные гробы в данном контексте, и, таким образом, она меняет все ноты в контексте персонала (который содержит как мелодию, так и музыку гармонии). Если вы измените заголовки только в контексте Voice, то ваша проблема решена:

harmonics =
#(define-music-function
    (parser location notes)
    (ly:music?)
    #{
        %\harmonicsOn
        \override Voice.NoteHead #'style = #'harmonic-mixed
        $notes
        \revert Voice.NoteHead #'style
        %\harmonicsOff
    #}
    )
Другие вопросы по тегам