Lilypond 根据语音用不同颜色标记关键音符?
我的工作是四段式声乐。我试图使关键音符在每个声音部分都有不同的颜色。根据前面的答案和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 (
%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?
不需要为每个语音复制,但是颜色映射
、音调到颜色
和颜色记事本
需要。还请注意,每个语音都有不同的记事本覆盖,因为每个语音现在都有自己的颜色记事本语音
功能。