Lilypond:更改音高低于和高于特定音高的颜色

时间:2019-01-06 14:52:28

标签: lilypond

在为录音机(长笛)编写Lilypond乐谱时,我希望我可以通过改变其颜色来自动标记音高超出乐器范围的音符。

例如,对于低音乐器,所有低于f的绝对音高和高于g''的所有音高都被涂成红色。高音,高音和女高音乐器也是如此。

我在coloring notes上发现了一个有用的问题,但仍有一段我无法编写的代码:

#(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 个答案:

答案 0 :(得分: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
  }
}

制作:

enter image description here

要根据仪器的范围对其进行自定义,请更改(< semitones 0)(> semitones 24)的值。值0是中间的C(C4),增量1等于一个半音。因此,在上述情况下,范围在C4-C6之间。对于低于中间C的音高,您需要使用负值(例如-5是G3)。