\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' { 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 { } }