Lilypond 根据语音用不同颜色标记关键音符?

Lilypond 根据语音用不同颜色标记关键音符?,lilypond,Lilypond,我的工作是四段式声乐。我试图使关键音符在每个声音部分都有不同的颜色。根据前面的答案和lilypond代码片段,我有以下代码: %Association list of pitches to colors. #(define color-mapping (list (cons (ly:make-pitch 0 6 FLAT) (x11-color 'blue)))) %Compare pitch and alteration (not octave). #(define (

我的工作是四段式声乐。我试图使关键音符在每个声音部分都有不同的颜色。根据前面的答案和lilypond代码片段,我有以下代码:

%Association list of pitches to colors.
#(define color-mapping
   (list    
    (cons (ly:make-pitch 0 6 FLAT) (x11-color 'blue))))

%Compare pitch and alteration (not octave).
#(define (pitch-equals? p1 p2)
   (and
    (= (ly:pitch-alteration p1) (ly:pitch-alteration p2))
    (= (ly:pitch-notename p1) (ly:pitch-notename p2))))

#(define (pitch-to-color pitch)
   (let ((color (assoc pitch color-mapping pitch-equals?)))
     (if color
         (cdr color))))

#(define (color-notehead grob)
   (pitch-to-color
    (ly:event-property (event-cause grob) 'pitch)))
然后我用每一个声音来呼唤它:

\override NoteHead.color = #color-notehead
这使得得分中的每个Bb都是蓝色的,这是一个很好的开始。但我希望能有一个蓝色的,绿色的,等等的Bb,这样我的歌手就可以一眼看出他们有主音

笨重的解决方案是制作4个不同版本的音乐,每个版本只能用一种声音调用override NoteHead.color。并根据每个歌手的声音部分给他们一个不同的版本


如果每个语音的特定音符颜色不同,是否有一种编码方法

最简单的解决方案可能是为每个不同的语音定义不同的功能,并且在每个功能定义中使用不同的颜色。下面是一个有两种声音的示例:

\version "2.19.53"

%Association list of pitches to colors.
#(define color-mapping-voice1
   (list    
    (cons (ly:make-pitch 0 6 FLAT) (x11-color 'blue))))

#(define color-mapping-voice2
   (list    
    (cons (ly:make-pitch 0 6 FLAT) (x11-color 'red))))

%Compare pitch and alteration (not octave).
#(define (pitch-equals? p1 p2)
   (and
    (= (ly:pitch-alteration p1) (ly:pitch-alteration p2))
    (= (ly:pitch-notename p1) (ly:pitch-notename p2))))

#(define (pitch-to-color-voice1 pitch)
   (let ((color (assoc pitch color-mapping-voice1 pitch-equals?)))
     (if color
         (cdr color))))

#(define (pitch-to-color-voice2 pitch)
   (let ((color (assoc pitch color-mapping-voice2 pitch-equals?)))
     (if color
         (cdr color))))

#(define (color-notehead-voice1 grob)
   (pitch-to-color-voice1
    (ly:event-property (event-cause grob) 'pitch)))

#(define (color-notehead-voice2 grob)
   (pitch-to-color-voice2
    (ly:event-property (event-cause grob) 'pitch)))

{
  \new Staff <<
    \new Voice{ 
      \voiceOne
      \override NoteHead.color = #color-notehead-voice1 
      bes' bes' d'' f''
    }
    \new Voice{ 
      \voiceTwo
      \override NoteHead.color = #color-notehead-voice2 
      bes d' f' bes'
    }
  >>
}
\version“2.19.53”
%音高与颜色的关联列表。
#(定义颜色映射-1)
(名单
(缺点(ly:使音高0.6平坦)(x11颜色为“蓝色”))
#(定义颜色映射-2)
(名单
(缺点(ly:使音高0.6平坦)(x11颜色为“红色”))
%比较音高和变化(不是八度)。
#(定义(节距等于p1 p2)
(及
(=(ly:变桨p1)(ly:变桨p2))
(=(ly:音高音符名称p1)(ly:音高音符名称p2)))
#(定义(从音高到颜色的语音1音高)
(let((颜色(关联音高颜色映射-voice1音高等于?)
(如果颜色
(cdr颜色)
#(定义(音高到彩色音高2音高)
(let((颜色(关联音高颜色映射-voice2音高等于?)
(如果颜色
(cdr颜色)
#(定义(color-notehead-voice1 grob)
(从音高到音色1)
(ly:事件属性(事件原因组)“音高”)
#(定义(color-notehead-voice2 grob)
(从音高到彩色2)
(ly:事件属性(事件原因组)“音高”)
{

\新员工注意到,
pitch equals?
不需要为每个语音复制,但是
颜色映射
音调到颜色
颜色记事本
需要。还请注意,每个语音都有不同的记事本覆盖,因为每个语音现在都有自己的
颜色记事本语音
功能。