[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: color notehead according to absolute pitch

From: Damian leGassick
Subject: Re: color notehead according to absolute pitch
Date: Wed, 06 Aug 2008 13:00:32 +0100


how about

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

#(define (pitch-to-color pitch)
((and (eqv? (ly:pitch-octave pitch) 0) (eqv? (ly:pitch-alteration pitch) 0) (eqv? (ly:pitch-notename pitch) 6)) (x11-color 'red)) ((and (eqv? (ly:pitch-octave pitch) 0) (eqv? (ly:pitch-alteration pitch) -1/2) (eqv? (ly:pitch-notename pitch) 6)) (x11-color 'green)) ((and (eqv? (ly:pitch-octave pitch) 1) (eqv? (ly:pitch-alteration pitch) 0) (eqv? (ly:pitch-notename pitch) 6)) (x11-color 'blue)) ((and (eqv? (ly:pitch-octave pitch) 0) (eqv? (ly:pitch-alteration pitch) 0) (eqv? (ly:pitch-notename pitch) 5)) (x11-color 'orange)) ((and (eqv? (ly:pitch-octave pitch) 0) (eqv? (ly:pitch-alteration pitch) 0) (eqv? (ly:pitch-notename pitch) 4)) (x11-color 'orange))

and any kind schemers reading....

how would you refactor this to use lists, along the lines of

(0 0 6 'red)
(0 -1/2 6 'green)
(1 0 6 'blue)
((0 0 5 ) (0 0 4) 'orange)



On 5 Aug 2008, at 23:06, Damian leGassick wrote:

thanks steven

cond - yes, i was trying to use case

kenny - can you figure it out from here?
if not i'll try tomorrow morning london time


On 5 Aug 2008, at 21:10, Steven Weber wrote:

Use the (cond) expression.  Here's a simplified version of your
pitch-to-color function that colors all c's red and all f's blue:

#(define (pitch-to-color pitch)
                ((eqv? (ly:pitch-notename pitch) 0) (x11-color 'red))
                ((eqv? (ly:pitch-notename pitch) 3) (x11-color 'blue))


-----Original Message-----
From: address@hidden
[mailto:address@hidden On Behalf Of
Damian leGassick
Sent: Tuesday, August 05, 2008 5:53 AM
To: address@hidden
Subject: Re: color notehead according to absolute pitch

On 5 Aug 2008, at 05:39, Jay Anderson wrote:

Kenny Stephens <kfstephensii <at>> writes:
Our church has a handbell group whose members are not all musically
literate. To
keep themselves from having to learn to read music, they mark their
notes using
differently colored highlighters.

Is there a means by which I can color the notes based on its
absolute pitch ---
not its pitch class? Some of the music spans three octaves. The
requirements are:
1) b4 and b5 are different colors.
2) b\flat4 and b4 are different colors.
3) different pitches can be assigned to the same color (some
"ringers" play
two or more handbells).

I've only been playing around with Lilypond for about a week
(though I've logged
numerous hours) for typesetting organ music; but this is different.
I did find
an example using Scheme and 'staff-position,' but this fails
condition 1.

Ideas, suggestions or solutions would be appreciated.

Using the same idea as the example you mentioned

you can base the color on the pitch:

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

Now you'd just have to figure out how to implement the pitch-to- color
function. For example this colors all the flat notes blue:

#(define (pitch-to-color pitch)
(if (eqv? (ly:pitch-alteration pitch) -1/2) (x11-color 'blue)))

You might want to get a little fancy to make sure enharmonic spellings
of the same pitch are the same color, but for most cases that
shouldn't be a problem.


lilypond-user mailing list

I can get as far as:

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

#(define (pitch-to-color pitch)
                        (eqv? (ly:pitch-octave pitch) 0)
                        (eqv? (ly:pitch-alteration pitch) -1/2)
                        (eqv? (ly:pitch-notename pitch) 6))
        (x11-color 'blue)))

which sets only the b-flat above middle c to be blue.

can't work out how to simultaneously colour the b-natural, say, red -
i'd love to know too


lilypond-user mailing list

lilypond-user mailing list

reply via email to

[Prev in Thread] Current Thread [Next in Thread]