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

Bonjour,

Je voudrais colorier des hampes suivant l'intervalle avec la note
précédente...

Quelqu'un aurait t'il une solution ?

Biz

Ewen

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Colorier-suivant-l-intervalle-avec-la-note-precedente-tp7365170p7365170.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

Je voudrais colorier des hampes suivant l'intervalle avec la note
précédente...

Quelqu'un aurait t'il une solution ?

Bonjour
1- Une solution toute faite : non
Mais en tapant le mot clef color dans le LSR, on peut trouver plein d'exemples:
http://lsr.dsi.unimi.it/LSR/Search?q=color
2- Si on essaye de faire une fonction en scheme, elle sera différente pour Lilypond 2.14 ou 2.15 car la représentation interne des notes à changer.
(Faire plutôt pour la 2.15 pour être prêt pour la 2.16 qui finira bien par sortir ...)
3- Quelques idées/questions.
a) Une manière primitive (la seule que je sais à peu près faire)
Faire une fonction avec la fonction scheme : music-map dans laquelle on sauvegarde dans une variable la note précédente, on compare la hauteur actuelle avec celle de la précédente (voir les fonctions commençant par ly:pitch...) puis on remplace cette note par une séquence
  { \override Stem #'color = #unecouleuradeterminer
    la note
}

b) Une manière subtile :
\override Stem #'color = #unefonctionsubtile
Il doit être possible de trouver la note grob-parent de ce Stem, mais par contre je n'ai aucune idée où on pourrait sauvegarder la valeur de la note précédente.

c) Qu'est-ce qu'on fait si on rencontre un accord (plusieurs pitches) ?

Bon courage
Gilles

Spam detection software, running on the system "desolation.proulx.com", has
identified this incoming email as possible spam. The original message
has been attached to this so you can view it (if it isn't spam) or label
similar future email. If you have any questions, see
the administrator of that system for details.

Content preview: Bonjour, Merci pour votre réponse. J'ai déja regardé sur
   la LSR, mais rien trouvé vis à vis de ma problématique. [...]

Content analysis details: (6.8 points, 4.5 required)

pts rule name description
---- ---------------------- --------------------------------------------------
-0.0 RCVD_IN_DNSWL_HI RBL: Sender listed at http://www.dnswl.org/, high
                            trust
                            [208.118.235.92 listed in list.dnswl.org]
4.0 BAYES_99 BODY: Bayes spam probability is 99 to 100%
                            [score: 1.0000]
0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider
                            (ewen.daviau[at]gmail.com)
0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is
                            CUSTOM_MED
0.8 SPF_NEUTRAL SPF: sender does not match SPF record (neutral)
1.1 URI_HEX URI: URI hostname has long hexadecimal sequence
0.9 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing list

Hi!

J'ai toujours pas trouvé le moyen créer une liste avec les différents
intervalles d'un note avec la suivante...

Personne n'as d'idée ?

Merci

Ewen

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Colorier-suivant-l-intervalle-avec-la-note-precedente-tp7365170p7401174.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

J'ai toujours pas trouvé le moyen créer une liste avec les différents
intervalles d'un note avec la suivante...

Personne n'as d'idée ?

Voici une fonction qui colorie les têtes de notes en fonction de la
hauteur de la note précédente.
Pour autre chose que les têtes de notes (queues ou autre), je ne sais pas
faire.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.14.2"

colorizeNote = #(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)
         (let ((p (ly:music-property x 'pitch)))
           (if (ly:pitch? p) (begin
              (ly:music-set-property! x 'tweaks
                (cons ; on ajoute dans la liste de tweaks
                   (cons 'color ; un "tweak" de couleur
                      (cond
                         ((ly:pitch<? prev-pitch p) red)
                         ((equal? prev-pitch p) black)
                         (else green)))
                   (ly:music-property x 'tweaks)))
                (set! prev-pitch p)))
            x))
       music)))

music = \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}
\colorizeNote \music
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Merci ! je regarde ça mais ça m'as l'air d'être du beau boulot...

Bises

···

Le 24 mars 2012 20:45, Gilles <****@****> a écrit :

J'ai toujours pas trouvé le moyen créer une liste avec les différents
intervalles d'un note avec la suivante...

Personne n'as d'idée ?

Voici une fonction qui colorie les têtes de notes en fonction de la
hauteur de la note précédente.
Pour autre chose que les têtes de notes (queues ou autre), je ne sais pas
faire.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.14.2"

colorizeNote = #(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)
(let ((p (ly:music-property x 'pitch)))
(if (ly:pitch? p) (begin
(ly:music-set-property! x 'tweaks
(cons ; on ajoute dans la liste de tweaks
(cons 'color ; un "tweak" de couleur
(cond
((ly:pitch<? prev-pitch p) red)
((equal? prev-pitch p) black)
(else green)))
(ly:music-property x 'tweaks)))
(set! prev-pitch p)))
x))
music)))

music = \relative { c4 d e d e d c e e d f e g f <c e
c'>1}
\colorizeNote \music
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


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

Bonjour,

J'ai réussi à modifier le code que tu m'avais donné.... seul problème je
voudrais colorier les hampes plutot que les tête de notes...

Il semble pas que ce soit possible avec les Tweak mais peut être avec la
commande ly:grob-object

Quelqu'un aurait une idée ?

Merci

Ewen

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.12.3"

colorizeNote = #(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)
         (let ((p (ly:music-property x 'pitch)))
           (if (ly:pitch? p) (begin
              (ly:music-set-property! x 'tweaks
                (cons ; on ajoute dans la liste de tweaks
                   (cons 'color ; un "tweak" de couleur
                     
                    ( let (( mod-interval ( modulo (- (ly:pitch-semitones
prev-pitch) (ly:pitch-semitones p)) 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 )) )) )
                     
                   (ly:music-property x 'tweaks)))
                (set! prev-pitch p))) x))
       music)))

         musiques = \relative { c4 d e d e d c e e d f e g f <e g c> <d f

<c e

c'>1}
\colorizeNote \musiques
         
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Colorier-suivant-l-intervalle-avec-la-note-precedente-tp7365170p7405634.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

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

Ouah t'est un fortiche toi :wink:

Je pense que je te citerais dans un livre prochain :wink:

Merci!

Ewen

···

Le 27 mars 2012 15:52, Gilles <****@****> 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 !?
%% 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 <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
lilypond-user-fr@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user-fr