On Sun, May 25, 2014 at 10:06 AM, David Nalesnik
<david.nales...@gmail.com>wrote:
> (Something could be worked out for enharmonics, I suppose.)
>
OK, this handles enharmonics:
\version "2.18.2"
#(define (get-pitch elt)
(ly:music-property elt 'pitch))
#(define (extract-pitches lst result)
(cond
((null? lst) result)
((ly:pitch? (get-pitch (car lst)))
(set! result (append result (list (get-pitch (car lst)))))
(extract-pitches (cdr lst) result))
((ly:music-property (car lst) 'elements)
(append
(extract-pitches (ly:music-property (car lst) 'elements) result)
(extract-pitches (cdr lst) result)))
(else (extract-pitches (cdr lst) result))))
colorPitches =
#(define-music-function (parser location mus col) (ly:music? color?)
(let* ((music-list (extract-named-music mus '(EventChord NoteEvent)))
(pitch-list (extract-pitches music-list '())))
#{
\override NoteHead.color =
#(lambda (grob)
(let ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch)))
(if (any
(lambda (x) (= (ly:pitch-semitones pitch) (ly:pitch-semitones x)))
pitch-list)
col)))
#}))
%%%%%%%%%%%%%%%%%%%%%%%% EXAMPLE %%%%%%%%%%%%%%%%%%%%%%%%%%
playerI = \relative c'' { g bes }
playerII = \relative c' { <c d> dis } % works for chords too
upper = \relative c' {
c4 cis d dis es f fis fisis g aeses gis a ais bes b c
}
\score {
\new Staff \upper
\layout { }
}
\score {
\new Staff {
\colorPitches \playerI #green
\upper
}
\layout { }
}
\score {
\new Staff {
\colorPitches \playerII #red
\upper
}
\layout { }
}
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user