lilypond-user-fr
[Top][All Lists]
Advanced

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

Re: Colorier suivant l'intervalle avec la note préc édente


From: daviau ewen
Subject: Re: Colorier suivant l'intervalle avec la note préc édente
Date: Tue, 27 Mar 2012 16:06:06 +0200

Ouah t'est un fortiche toi ;)

Je pense que je te citerais dans un livre prochain ;)


Merci!

Ewen
Le 27 mars 2012 15:52, Gilles <address@hidden> a écrit :

J'ai réussi à modifier le code que tu m'avais donné....
Ouah ! Trés joli.


seul problème je
voudrais colorier les hampes plutot que les tête de notes...

Bon j'ai fait 2 versions
- une version qui colorie les notes et les "stem"
- une version (colorizeStem) qui ne colorie que les stem.

La version 2 est très décevante, à moins peut-être de grossir/agrandir les stem
La version 1 devrait marcher pour la 2.16 (non testé) mais il faudra modifier la 2.

Gilles

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.14.2"
#(define (pitch->color pitch prev-pitch)
(let ((mod-interval (modulo (- (ly:pitch-semitones prev-pitch)
                              (ly:pitch-semitones pitch))

                           12)))
 (case mod-interval
      ;;   Return rainbow colors
      ((1)   (rgb-color 0.71 0.28 0.58     ))  ; for C
      ((2)   (rgb-color  0.15 0.33 0.68    )); for D
      ((3)   (rgb-color  0.58 0.73 0.91    ))  ; for E
      ((4)   (rgb-color  0.71 0.86 0.69    ))  ; for F
      ((5)   (rgb-color  1.0 0.87 0.0       ))  ; for G
      ((6)   (rgb-color  1.0 0.58 0.55     ))  ; for A
      ((7)   (rgb-color  0.93 0.15 0.20   ))  ; for B
      ((8)   (rgb-color 0 0.5 0               ))
      ((9)   (rgb-color 0.71 0.28 0.58    ))
      ((10) (rgb-color  0.71 0.28 0.58   ))
      ((11) (rgb-color  0.71 0.28 0.58   ))
      ((12) (rgb-color  0.71 0.28 0.58   ))
      (else black))))
%% parfois Lilypond renvoie color <unspecified> !?
%% je pense qu'il faut commencer de 0 et finir à 11
%% (non testé)

%%%%%%%%%%%%%%%%%%%%%%%%% colorizeNote %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

colorizeNote = #(define-music-function (parser location music) (ly:music?)
"Colorize note in green if previous notes is below, in black if pitch equal,
in resd if above"

(let ((prev-pitch (ly:make-pitch 0 0 0)))
 (music-map
   (lambda(x)
     (let ((p (ly:music-property x 'pitch)))
       (if (ly:pitch? p) (begin
          (ly:music-set-property! x 'tweaks
            (cons (cons 'color (pitch->color p prev-pitch))

                  (ly:music-property x 'tweaks)))
            (set! prev-pitch p)))
        x))
   music)))

#(define (note-color->stem-color grob)
(let* ((note-head (ly:grob-property grob 'cause))
      (color (ly:grob-property note-head 'color)))
; décommenter la ligne suivante n'a aucun effet ! Dommage.
; (ly:grob-set-property! note-head 'color black)
color))

%%%%%%%%%%%%%%%%%%%%%%% colorizeStem %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \displayMusic \override Voice.Stem #'color = #red =>
#(define (override-stem-color mycolor)
 (make-music 'ContextSpeccedMusic 'context-type 'Voice 'element
  (make-music 'OverrideProperty 'pop-first #t
    'grob-property-path (list (quote color))
    'grob-value mycolor
    'symbol 'Stem)))

colorizeStem = #(define-music-function (parser location music) (ly:music?)

"Colorize note in green if previous note is below, in black if pitch is
equal, in red if above"
(let ((prev-pitch (ly:make-pitch 0 0 0)))
    (music-map
      (lambda(x)
        (case (ly:music-property x 'name)
         ((EventChord)
            (let ((es (filter
                       (lambda(y) (eq? (ly:music-property y 'name) 'NoteEvent))
                       (ly:music-property x 'elements))))
             (if (null? es)
               x
               (let* ((p (ly:music-property (car es) 'pitch))
                      (color (pitch->color p prev-pitch)))
                 (set! prev-pitch p)
                 (make-sequential-music (list
                     (override-stem-color color) x))))))
         (else x)))
      music)))

%%%%%%%%%%%%%%%%%%% Test %%%%%%%%%%%%%%%%%%%
musique = \relative

{ c4 d e d e  d c e e d f e g f <e g c> <d f b> <c e c'>1 }

\markup "colorizeNote + stem override"
{
 \override Voice.Stem #'color = #note-color->stem-color
 \colorizeNote \musique
}
\markup "colorizeStem"
\colorizeStem \musique


_______________________________________________
liste de diffusion lilypond-user-fr
address@hidden
https://lists.gnu.org/mailman/listinfo/lilypond-user-fr


reply via email to

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