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

From: zaord <[email-masked]>
Date: Mon, 12 Mar 2012 05:37:15 -0700 (PDT)

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.

---

From: Gilles <[email-masked]>
Date: Tue, 13 Mar 2012 18:36:27 +0100

> 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

---

From: zaord <[email-masked]>
Date: Thu, 15 Mar 2012 04:59:35 -0700 (PDT)

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

Subject: Re: Colorier suivant l'intervalle avec la note précédente
From: zaord <[email-masked]>
To: [email-masked]
Date: Thu, 15 Mar 2012 04:59:35 -0700 (PDT)

Bonjour,

Merci pour votre réponse.

J'ai déja regardé sur la LSR, mais rien trouvé vis à vis de ma
problématique.

Oui il me semble qu'il faille faire une fonction en sheme, mais ce language
me parait difficile et j'ai bien essayer de bricoller un peut, j'ai pas
trouver de ressources assez claires pour comprendre comment ca marche...

Je réponds dans votre message :

Je comprends pas actuelleemnt à quoi correspondent les fonction qui
commencent par ly: pitch...
Si tu as un peu de doc sur le sujet... qui prennent tout depuis le début... 

Mais je comprends ton idée et elle me parait bonne.

b) Une manière subtile :

Je ne comprends pqs non plus ce qu'est un Grob, un grob parent etc...

Il n'existe pas de variable dans lilypond ?

Si on rencontre un accord, les stems sont alors coloriés avec la note juste
au dessus dans l'accord et la note la plus aigue est colorié en fonction de
l'inervalle avec la note d'après temporellement ;)

Pas simple cette histoire

Biz

Ewen 

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

---

From: zaord <[email-masked]>
Date: Sat, 24 Mar 2012 05:11:51 -0700 (PDT)

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.

---

From: Gilles <[email-masked]>
Date: Sat, 24 Mar 2012 20:45:12 +0100

> intervalles d'un note avec la suivante...
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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

---

From: daviau ewen <[email-masked]>
Date: Sat, 24 Mar 2012 21:00:50 +0100

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

Bises

Le 24 mars 2012 20:45, Gilles <[email-masked]> a écrit :

> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%**%%%%%%%%%%%%
> \version "2.14.2"
>
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%**%%%%%%%%
>
> ______________________________**_________________
> liste de diffusion lilypond-user-fr
> [email-masked]
> https://lists.gnu.org/mailman/**listinfo/lilypond-user-fr<https://lists.gnu.org/mailman/listinfo/lilypond-user-fr>
>

---

From: zaord <[email-masked]>
Date: Mon, 26 Mar 2012 04:51:57 -0700 (PDT)

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" 

                    ( 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
b> <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.

---

From: Gilles <[email-masked]>
Date: Tue, 27 Mar 2012 15:52:16 +0200

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

> seul problème je

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

---

From: daviau ewen <[email-masked]>
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 <[email-masked]> a écrit :

> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%**%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%**
> %%%%%%%%%%%%
> \version "2.14.2"
> %%%%%%%%%%%%%%%%%%%%%%%%% colorizeNote %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%**
> %%%%%%%
>
> %%%%%%%%%%%%%%%%%%%%%%% colorizeStem %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%**
> %%%%%%