Lilypond: изменить цвет нот ниже и выше определенной высоты

При написании партитуры Лилипонда для рекордеров (флейт) я хотел бы автоматически пометить ноты с высотой звука вне диапазона инструмента, изменив его цвет.

Идея состоит в том, что, например, все абсолютные высоты звука ниже f и все высоты выше g'' окрашены в красный цвет для басового инструмента. То же самое для инструментов тенора, альта и сопрано.

Я нашел полезный вопрос о цветных заметках, но остался фрагмент кода, который я не могу написать:

#(define (ambitus-notehead-alt grob)
  ( **code_i_cannot_write** )
#(define (ambitus-notehead-tenor grob)
  ( **code_i_cannot_write** )
#(define (ambitus-notehead-bass grob)
  ( **code_i_cannot_write** )

\score {
  \new Staff \relative c' {
    \override NoteHead #'color = #ambitus-notehead-alt
    \music_altrecorder
  }
  \new Staff \relative c' {
    \override NoteHead #'color = #ambitus-notehead-tenor
    \music_tenorrecorder
  }
  \new Staff \relative c' {
    \override NoteHead #'color = #ambitus-notehead-bass
    \music_bassrecorder
  }
}

1 ответ

Решение

Вот функция, которая делает то, что вы хотите:

\version "2.19.82"

#(define (colour-out-of-range grob)
   (let* ((pch (ly:event-property (event-cause grob) 'pitch))
          (semitones (ly:pitch-semitones pch)))
          (cond ((< semitones 0) red)
                ((> semitones 24) red)
                (else black))))

\score {
  \new Staff \relative c' {
    \override NoteHead.color = #colour-out-of-range
    g8 a b c d e f g a b c d e f g a b c d e f g
  }
}

Производство:

Чтобы настроить его для диапазона вашего инструмента, измените значения (< semitones 0) а также (> semitones 24), Значение 0 является серединой C (C4), а приращения 1 равны одному полутону. Таким образом, в случае выше, диапазон находится между C4-C6. Вам нужно использовать отрицательные значения для шагов ниже среднего C (например, -5 означает G3).

Другие вопросы по тегам