Subject: Notes en couleur

From: Christian LE BARS <[email-masked]>
Date: Sat, 26 Nov 2022 16:26:22 +0100

Bonjour a tous.

J'aimerais coloriser les têtes de notes altérées.

Voici le code

\relative c'
  {
   \clef treble
   \Global
   \override NoteHead.color = #magenta fis'8  \override NoteHead.color = 
#black e
   \override NoteHead.color = #magenta fis4  \override NoteHead.color = 
#black d8
   a b2 8 g a2

  \override NoteHead.color = # magenta fis4 \override NoteHead.color = 
#black
   <b, g'> \override NoteHead.color = #magenta  fis' \override 
NoteHead.color = #black g
   e4. e'8 \override NoteHead.color = # magenta cis \override 
NoteHead.color = #black a8
   4 g \override NoteHead.color = #magenta fis  \override NoteHead.color 
= #black g
   < fis  a> <g b> a8 b a e g   \override NoteHead.color = #magenta fis fis

\override NoteHead.color = #black g
   \override NoteHead.color = #magenta fis \override NoteHead.color = 
#black d e4 d2.
  }

Plutôt qu'écrire \override NoteHead.color = #magenta, j'aimerai écrire 
par exemple: Vert

et Vert contiendrait la chaine : \override NoteHead.color = #magenta

de plus pour l'accord <fis a> j'aimerai avoir que le fis en magenta pas 
tout l'accord

J'espère que ma demande est claire.

Bon samedi.

Christian

---

From: Christian LE BARS <[email-masked]>
Date: Sat, 26 Nov 2022 16:32:33 +0100

Pour coloriser une note d'un accord j'ai trouvé c'est :

\tweak color

A+

---

From: Jean Abou Samra <[email-masked]>
Date: Sun, 27 Nov 2022 16:00:39 +0100

Le 26/11/2022 à 16:26, Christian LE BARS a écrit :
>   \override NoteHead.color = #magenta fis'8  \override NoteHead.color 
> = #black e
>   4 g \override NoteHead.color = #magenta fis  \override 
> de plus pour l'accord <fis a> j'aimerai avoir que le fis en magenta 
> pas tout l'accord
>

Bonjour Christian,

Tu peux tout simplement mettre le \override dans une variable (oui,
ça marche !).

vert = \override NoteHead.color = #magenta

(Au passage, il ne vaudrait pas mieux renommer la variable
en « magenta » plutôt que « vert » ?)

Mais est-ce que tu ne serais pas encore plus content que
ce soit automatique ?

\version "2.22.2"

\layout {
   \context {
     \Staff
     \consists
       #(lambda (context)
          (make-engraver
           (acknowledgers
            ((rhythmic-head-interface engraver grob source-engraver)
             (let* ((cause (event-cause grob))
                    (pitch (ly:event-property cause 'pitch))
                    (alter (ly:pitch-alteration pitch)))
               (if (not (zero? alter))
                   (let ((step-alter (cons (ly:pitch-steps pitch)
                                           alter))
                         (key-sig (ly:context-property context 
'keyAlterations)))
                     (if (not (member step-alter key-sig))
                         (set! (ly:grob-property grob 'color)
                               (assq-ref (ly:grob-property grob 'details)
                                         'altered-color))))))))))
   }
}

alteredColor = \override NoteHead.details.altered-color = \etc

%%% Exemple :

\relative {
   \key d \minor
   \alteredColor #magenta
   d'8 e fis g a bes a fis
}

Cordialement,
Jean

---

From: Christian LE BARS <[email-masked]>
Date: Sun, 27 Nov 2022 20:37:01 +0100

Bonsoir Jean.

merci pour ta solution, cependant elle n'est pas complète ,

si j'ai bien le fa dièse de la 5eme ligne je n'ai pas le fa dièse du 1er 
intervalle.

remarque: je suis en ré major pas en ré mineur.

voici ton code intégré dans ma partition:

\version "2.22.2"

%--------------------------------------------
\layout {
   \context {
     \Staff
     \consists
       #(lambda (context)
          (make-engraver
           (acknowledgers
            ((rhythmic-head-interface engraver grob source-engraver)
             (let* ((cause (event-cause grob))
                    (pitch (ly:event-property cause 'pitch))
                    (alter (ly:pitch-alteration pitch)))
               (if (not (zero? alter))
                   (let ((step-alter (cons (ly:pitch-steps pitch)
                                           alter))
                         (key-sig (ly:context-property context 
'keyAlterations)))
                     (if (not (member step-alter key-sig))
                         (set! (ly:grob-property grob 'color)
                               (assq-ref (ly:grob-property grob 'details)
                                         'altered-color))))))))))
   }
}
%-----------------------------------------------------------
alteredColor = \override NoteHead.details.altered-color = \etc
  %------------------------------------
Global=
{
   \numericTimeSignature
   \time 3/4
   \key d\major
   \alteredColor #magenta
}
%-------------------------------------------
Droite =
\relative c'
  {
   \Global

    fis'8  e  fis4  d8 a b2 8 g a2  fis4 <b, g'>   fis'  g
   e4. e'8  cis  a8 4 g  fis  g < fis  a> <g b> a8 b a e g  fis fis  g
    fis  d e4 d2.
  }
  %-----------------------------------
  Gauche =
\relative c
  {
   \clef bass
   \Global
   \set Staff.pedalSustainStyle = #'mixed
   d4\sustainOn b'8 c a4 g,\sustainOff g'8 b d,4 d a' a e,2 b'4
   a g' e d a' d, e,2 b'4 a g' e d a' g d, d'2
  }
  %------------------------------------------
  \score
   {
    <<
  %   \Accords
     \new PianoStaff
      << % les portées piano
       \new Staff { \Droite }
       \new Staff { \Gauche }
      >>
    >>
    \layout { indent= 0}
   }

  je te souhaite une bonne soirée.

Cordialement Christian

---

From: Jean Abou Samra <[email-masked]>
Date: Mon, 28 Nov 2022 00:07:01 +0100

Le 27/11/2022 à 20:37, Christian LE BARS a écrit :
> si j'ai bien le fa dièse de la 5eme ligne je n'ai pas le fa dièse du 
> 1er intervalle.
>

Bonsoir Christian,

D'une part, j'avais mal compris ce que tu voulais : je pensais que tu 
cherchais
à colorier les notes qui ont une altération accidentelle (qui n'est pas dans
l'armure). D'autre part, je me suis planté dans mon code, en confondant 
les fonctions
ly:pitch-notename et ly:pitch-steps.

S'il ne s'agit que de colorier toutes les notes qui sont jouées avec un
dièse ou un bécarre, c'est beaucoup plus simple :

\version "2.22.2"

%--------------------------------------------
\layout {
   \context {
     \Voice
     \override NoteHead.color =
       #(lambda (grob)
          (and (not (zero? (ly:pitch-alteration (ly:event-property 
(event-cause grob) 'pitch))))
               (assq-ref (ly:grob-property grob 'details) 'altered-color)))
   }
}
%-----------------------------------------------------------
alteredColor = \override NoteHead.details.altered-color = \etc
  %------------------------------------
Global=
{
   \numericTimeSignature
   \time 3/4
   \key d\major
   \alteredColor #magenta
}
%-------------------------------------------
Droite =
\relative c'
  {
   \Global

Cordialement,
Jean

---

From: Christian LE BARS <[email-masked]>
Date: Mon, 28 Nov 2022 08:24:26 +0100

Bonjour Jean

Voila c'est exactement ce que je recherchais, merci.

C'est de ma faute il fallait que je te dise ce que je voulais exactement,

tu ne pouvait pas deviner.

Le but c'est quand je suis dans l'orchestre et que cela va vite(pour moi) ,

le changement de couleur attire mon attention pour éviter une fausse note

Bonne journée

cordialement

Christian

---

From: Christian LE BARS <[email-masked]>
Date: Mon, 28 Nov 2022 13:43:03 +0100

bonjour Jean

Encore un truc que je ne comprend pas!

J'ai inséré ton code dans une autre partition (la Mer de Trenet);

Hélas des si bémol sont oubliés

voici le code:\version "2.22.1"
  %--------------------------------------------
\layout {
   \context {
     \Voice
     \override NoteHead.color =
       #(lambda (grob)
          (and (not (zero? (ly:pitch-alteration (ly:event-property 
(event-cause grob) 'pitch))))
               (assq-ref (ly:grob-property grob 'details) 'altered-color)))
   }
}
%-----------------------------------------------------------
alteredColor = \override NoteHead.details.altered-color = \etc
%--------------------------------------------
Global=
{
  \numericTimeSignature
  \time 4/4
  \key f\major
  \alteredColor #magenta
}
%------------------------------------------
LaMainDroite =
\relative c''
  {
   \Global
   \clef "treble"
   <<
     { a'4^5^1(f^3)f(d)f(d)d(bes)d(bes)bes(g)r4 c'^2 ^"MD"f^5 r\fermata }
     \\
     {c,2 bes a g f ees  <bes ees g c>2.\arpeggio -"MG" s4}
   >>
   r4<a c^1^2>r<a d^1^3>r<d f^3^5>r bes^1r <c f^2^5>r<a d>r<bes d 
f^1^3^5>r<g' bes,>
  }
%-------------------------------------------
\score
  {
   \new Staff\LaMainDroite
  \layout
   {
    \context
     {\Score \override Fingering.color = red}
   }
  }

ta fonction ne vois pas les si bémol 3eme ligne§

Pourquoi?

Par avance merci

Christian

---

From: Jean Abou Samra <[email-masked]>
Date: Mon, 28 Nov 2022 19:51:10 +0100

> ta fonction ne vois pas les si bémol 3eme ligne§

C'est normal, mais je reconnais que je t'ai induit en erreur par ma
façon d'écrire le code. C'est la même chose que ce qui se produit
si tu fais

\version "2.22.2"

{
   \override NoteHead.color = "red"
   c'1 2 4 8 8
   << { c''4 } \\ { c'4 } >>
}

Comme tu peux le constater, le \override n'a pas d'effet à l'intérieur
du << >>, ceci parce que \override Objet.propriété = ... est un raccourci
pour \override Context.Objet.propriété = ... où Contexte est le contexte
le plus proche, en l'occurrence Voice. Le \override ne s'applique donc
qu'au contexte Voice qui démarre au début de l'expression { ... }.
Or, la construction << >> crée de nouveaux Voice.

L'une des solutions possibles est de changer « \override NoteHead ... » en
« \override Score.NoteHead... », ce qui donne :

\version "2.22.2"

alteredColor = \override Score.NoteHead.details.altered-color = \etc

Une autre possibilité est de déplacer le \alteredColor directement
dans le \layout :

\version "2.22.1"

Cordialement,
Jean

---

From: Christian LE BARS <[email-masked]>
Date: Mon, 28 Nov 2022 20:31:26 +0100

Merci Jean.

Impeccable!