lilypond-user
[Top][All Lists]
Advanced

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

Re: Color noteheads according to their duration


From: Aaron Hill
Subject: Re: Color noteheads according to their duration
Date: Fri, 28 Sep 2018 01:08:25 -0700
User-agent: Roundcube Webmail/1.3.6

On 2018-09-27 10:54 pm, Federico Bruni wrote:
Il giorno gio 27 set 2018 alle 21:29, Tim Meier <address@hidden>
ha scritto:
Hello,

unfortunately I'm not that well versed in the lillypond/scheme syntax. What I want to do is basically this (in pseudocode):

if (noteDuration is quarter) => make noteHead blue
if (noteDuration is half) => make noteHead red
...

Can someone tell me how I would write that in Scheme?


You may adapt this snippet to work on durations instead of pitches:
http://lilypond.org/doc/v2.19/Documentation/snippets/pitches#pitches-coloring-notes-depending-on-their-pitch

IMO a new coloring-notes-depending-on-their-duration.ly file should be
added to the Snippets manual if someone comes up with the required
code.

Here's a quick adaptation:

%%%%
\version "2.19.82"

#(define color-mapping
  (list
    (cons (ly:make-duration -1 0 1 1) (x11-color 'red))
    (cons (ly:make-duration 0 0 1 1) (x11-color 'orange))
    (cons (ly:make-duration 1 1 1 1) (x11-color 'yellow))
    (cons (ly:make-duration 2 0 1 1) (x11-color 'green))
    (cons (ly:make-duration 1 0 1 1) (x11-color 'blue))
    (cons (ly:make-duration 2 1 1 1) (x11-color 'violet))
    (cons (ly:make-duration 3 0 1 1) (x11-color 'red))
    (cons (ly:make-duration 3 1 1 1) (x11-color 'orange))
    (cons (ly:make-duration 4 0 1 1) (x11-color 'yellow))
    (cons (ly:make-duration 1 0 2 3) (x11-color 'green))
    (cons (ly:make-duration 2 0 2 3) (x11-color 'blue))))

#(define (duration-equals? d1 d2)
  (and (not (ly:duration<? d1 d2)) (not (ly:duration<? d2 d1))))

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

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

\score {
  \new Staff \relative b' {
    \override NoteHead.color = #color-notehead
    b \breve 1 2. 4 2 4. 8 8. 16 \tuplet 3/2 { 2 4 } r4 |
  }
}
%%%%

Don't know if this is up to snippet standards, though.

-- Aaron Hill

Attachment: durationcolor.cropped.png
Description: PNG image


reply via email to

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