Как ограничить переопределения 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
команда, но я получаю тот же результат.
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
#}
)